11import { Card } from "@/components/ui/card.tsx" ;
2- import { Target } from "lucide-react" ;
2+ import { Target , Clock , FileText , TestTube , Network , CheckCircle , FolderOpen } from "lucide-react" ;
33import type React from "react" ;
44import { getFileColor , getText } from "@/lib/utils" ;
55import info from "@/assets/info.json" ;
@@ -11,57 +11,151 @@ interface IGeneratedTests {
1111 fileName : string ,
1212 numberOfTestCases : number
1313 } >
14- totalHttpCalls ?: number
14+ outputHttpCalls ?: number
15+ evaluatedHttpCalls ?: number
16+ executionTimeInSeconds ?: number
1517}
1618
17- export const GeneratedTests : React . FC < IGeneratedTests > = ( { totalTests, testFiles, totalHttpCalls} ) => (
19+ const formatExecutionTime = ( totalSeconds ?: number ) => {
20+ if ( totalSeconds === undefined || totalSeconds === null ) return null ;
21+
22+ const days = Math . floor ( totalSeconds / 86400 ) ;
23+ const hours = Math . floor ( ( totalSeconds % 86400 ) / 3600 ) ;
24+ const minutes = Math . floor ( ( totalSeconds % 3600 ) / 60 ) ;
25+ const seconds = Math . floor ( totalSeconds % 60 ) ;
26+
27+ return { days, hours, minutes, seconds } ;
28+ } ;
29+
30+ export const GeneratedTests : React . FC < IGeneratedTests > = ( { totalTests, testFiles, outputHttpCalls, evaluatedHttpCalls, executionTimeInSeconds} ) => {
31+ const timeBreakdown = formatExecutionTime ( executionTimeInSeconds ) ;
32+
33+ return (
1834 < Card className = "border-2 border-black p-6 rounded-none" >
1935 < div className = "flex items-start gap-4" >
2036 < Target className = "w-6 h-6 text-gray-500" />
2137 < div className = "flex-1" >
22- < div className = "flex justify-between " >
38+ < div className = "grid grid-cols-1 sm:grid-cols-2 gap-4 " >
2339 < ReportTooltip tooltipText = { info . generatedTestFiles } >
24- < span className = "text-lg font-bold" > # Generated Test Files:</ span >
40+ < div className = "bg-gradient-to-br from-green-50 to-emerald-50 border-2 border-green-300 rounded-lg p-4 hover:shadow-md transition-shadow" >
41+ < div className = "flex items-center gap-3" >
42+ < div className = "bg-green-500 rounded-full p-2" >
43+ < FileText className = "w-5 h-5 text-white" />
44+ </ div >
45+ < div className = "flex-1" >
46+ < div className = "text-sm font-medium text-gray-600" > Generated Test Files</ div >
47+ < div className = "text-2xl font-bold text-green-700" data-testid = "generated-tests-total-test-files" > { testFiles . length } </ div >
48+ </ div >
49+ </ div >
50+ </ div >
2551 </ ReportTooltip >
26- < span className = "text-lg font-bold" data-testid = "generated-tests-total-test-files" > { testFiles . length } </ span >
27- </ div >
28- < div className = "flex justify-between" >
52+
2953 < ReportTooltip tooltipText = { info . generatedTestCases } >
30- < span className = "text-lg font-bold" > # Generated Tests Cases:</ span >
54+ < div className = "bg-gradient-to-br from-orange-50 to-amber-50 border-2 border-orange-300 rounded-lg p-4 hover:shadow-md transition-shadow" >
55+ < div className = "flex items-center gap-3" >
56+ < div className = "bg-orange-500 rounded-full p-2" >
57+ < TestTube className = "w-5 h-5 text-white" />
58+ </ div >
59+ < div className = "flex-1" >
60+ < div className = "text-sm font-medium text-gray-600" > Generated Test Cases</ div >
61+ < div className = "text-2xl font-bold text-orange-700" data-testid = "generated-tests-total-tests" > { totalTests } </ div >
62+ </ div >
63+ </ div >
64+ </ div >
3165 </ ReportTooltip >
32- < span className = "text-lg font-bold" data-testid = "generated-tests-total-tests" > { totalTests } </ span >
33- </ div >
34- < div className = "flex justify-between" >
35- < ReportTooltip tooltipText = { info . numberOfHttpCalls } >
36- < span className = "text-lg font-bold" > # HTTP Calls:</ span >
66+
67+ < ReportTooltip tooltipText = { info . outputHttpCalls } >
68+ < div className = "bg-gradient-to-br from-cyan-50 to-sky-50 border-2 border-cyan-300 rounded-lg p-4 hover:shadow-md transition-shadow" >
69+ < div className = "flex items-center gap-3" >
70+ < div className = "bg-cyan-500 rounded-full p-2" >
71+ < Network className = "w-5 h-5 text-white" />
72+ </ div >
73+ < div className = "flex-1" >
74+ < div className = "text-sm font-medium text-gray-600" > Output HTTP Calls</ div >
75+ < div className = "text-2xl font-bold text-cyan-700" data-testid = "rest-report-output-http-calls" > { outputHttpCalls } </ div >
76+ </ div >
77+ </ div >
78+ </ div >
79+ </ ReportTooltip >
80+
81+ < ReportTooltip tooltipText = { info . evaluatedHttpCalls } >
82+ < div className = "bg-gradient-to-br from-pink-50 to-rose-50 border-2 border-pink-300 rounded-lg p-4 hover:shadow-md transition-shadow" >
83+ < div className = "flex items-center gap-3" >
84+ < div className = "bg-pink-500 rounded-full p-2" >
85+ < CheckCircle className = "w-5 h-5 text-white" />
86+ </ div >
87+ < div className = "flex-1" >
88+ < div className = "text-sm font-medium text-gray-600" > Evaluated HTTP Calls</ div >
89+ < div className = "text-2xl font-bold text-pink-700" data-testid = "rest-report-evaluated-http-calls" > { evaluatedHttpCalls } </ div >
90+ </ div >
91+ </ div >
92+ </ div >
3793 </ ReportTooltip >
38- < span className = "text-lg font-bold" data-testid = "rest-report-http-calls" > { totalHttpCalls } </ span >
3994 </ div >
95+ { timeBreakdown && (
96+ < div className = "mt-4 p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-2 border-blue-300 rounded-lg" >
97+ < ReportTooltip tooltipText = { info . executionTimeInSeconds } >
98+ < div className = "flex items-center gap-2 mb-3" >
99+ < Clock className = "w-5 h-5 text-blue-600" />
100+ < span className = "text-base font-bold text-blue-900" > Execution Time</ span >
101+ </ div >
102+ </ ReportTooltip >
103+ < div className = "grid grid-cols-2 sm:grid-cols-4 gap-3" data-testid = "rest-report-execution-time" >
104+ < div className = "text-center bg-white rounded-lg p-3 border border-blue-200 shadow-sm" >
105+ < div className = "text-2xl font-bold text-blue-600" > { timeBreakdown . days } </ div >
106+ < div className = "text-xs font-medium text-gray-600 mt-1" > Days</ div >
107+ </ div >
108+ < div className = "text-center bg-white rounded-lg p-3 border border-blue-200 shadow-sm" >
109+ < div className = "text-2xl font-bold text-indigo-600" > { timeBreakdown . hours } </ div >
110+ < div className = "text-xs font-medium text-gray-600 mt-1" > Hours</ div >
111+ </ div >
112+ < div className = "text-center bg-white rounded-lg p-3 border border-blue-200 shadow-sm" >
113+ < div className = "text-2xl font-bold text-purple-600" > { timeBreakdown . minutes } </ div >
114+ < div className = "text-xs font-medium text-gray-600 mt-1" > Minutes</ div >
115+ </ div >
116+ < div className = "text-center bg-white rounded-lg p-3 border border-blue-200 shadow-sm" >
117+ < div className = "text-2xl font-bold text-violet-600" > { timeBreakdown . seconds } </ div >
118+ < div className = "text-xs font-medium text-gray-600 mt-1" > Seconds</ div >
119+ </ div >
120+ </ div >
121+ </ div >
122+ ) }
40123
41- < div className = "mt-4 pt-4 border-t border-gray-200" >
42- < div className = "text-sm font-medium text-gray-700 mb-2" > Test Files</ div >
43- < div className = "space-y-1" >
44- {
45- testFiles . length > 0 ? (
46- testFiles . map ( ( file , index ) => (
47- < div className = "flex items-center gap-2 text-sm text-gray-600" key = { index } >
48- < div className = { `w-2 h-2 ${ getFileColor ( index , file . fileName ) } rounded-full` } > </ div >
49- < ReportTooltip tooltipText = { getText ( info . testFilesLocated ,
124+ < div className = "mt-4" >
125+ < div className = "bg-gradient-to-r from-slate-50 to-gray-50 border-2 border-slate-300 rounded-lg p-4" >
126+ < div className = "flex items-center gap-2 mb-3" >
127+ < FolderOpen className = "w-5 h-5 text-slate-600" />
128+ < span className = "text-base font-bold text-slate-900" > Test Files</ span >
129+ </ div >
130+ < div className = "space-y-2" >
131+ {
132+ testFiles . length > 0 ? (
133+ testFiles . map ( ( file , index ) => (
134+ < ReportTooltip key = { index } tooltipText = { getText ( info . testFilesLocated ,
50135 {
51136 fileName : file . fileName ,
52137 numberOfTestCases : file . numberOfTestCases
53138 } ) } >
54- < span > { file . fileName } (# { file . numberOfTestCases } )</ span >
139+ < div className = "flex items-center gap-3 bg-white rounded-md p-3 border border-slate-200 hover:border-slate-400 hover:shadow-sm transition-all" >
140+ < div className = { `w-3 h-3 ${ getFileColor ( index , file . fileName ) } rounded-full flex-shrink-0` } > </ div >
141+ < div className = "flex-1 min-w-0" >
142+ < span className = "text-sm font-medium text-gray-700 truncate block" > { file . fileName } </ span >
143+ </ div >
144+ < div className = "flex-shrink-0 bg-slate-100 px-2 py-1 rounded-md" >
145+ < span className = "text-xs font-bold text-slate-700" > { file . numberOfTestCases } </ span >
146+ </ div >
147+ </ div >
55148 </ ReportTooltip >
56- </ div >
57- ) )
58- ) : (
59- < div className = "text-gray-500 italic" > No test files generated. </ div >
60- )
61- }
149+ ) )
150+ ) : (
151+ < div className = "text-center text-gray-500 italic py-4" > No test files generated. </ div >
152+ )
153+ }
154+ </ div >
62155 </ div >
63156 </ div >
64157 </ div >
65158 </ div >
66159 </ Card >
67- )
160+ ) ;
161+ } ;
0 commit comments