@@ -146,3 +146,82 @@ describe('ComparisonStatsCard', () => {
146146 expect ( screen . queryByText ( 'Winner' ) ) . toBeNull ( ) ;
147147 } ) ;
148148} ) ;
149+
150+ describe ( 'ComparisonStatsCard responsive rendering and growth trends (Variation 3)' , ( ) => {
151+ it ( 'renders positive growth trend with winner badge for higher value' , ( ) => {
152+ render (
153+ < ComparisonStatsCard
154+ title = "Streak"
155+ valueA = { 120 }
156+ valueB = { 40 }
157+ labelA = "Alice"
158+ labelB = "Bob"
159+ icon = "Flame"
160+ />
161+ ) ;
162+ expect ( screen . getByText ( 'Winner' ) ) . toBeDefined ( ) ;
163+ expect ( screen . getByText ( '120' ) ) . toBeDefined ( ) ;
164+ expect ( screen . getByText ( '40' ) ) . toBeDefined ( ) ;
165+ } ) ;
166+
167+ it ( 'renders negative growth indicator — no winner badge for lower value' , ( ) => {
168+ render (
169+ < ComparisonStatsCard
170+ title = "Streak"
171+ valueA = { 20 }
172+ valueB = { 80 }
173+ labelA = "Alice"
174+ labelB = "Bob"
175+ icon = "Flame"
176+ />
177+ ) ;
178+ const winners = screen . getAllByText ( 'Winner' ) ;
179+ expect ( winners . length ) . toBe ( 1 ) ;
180+ expect ( screen . getByText ( '20' ) . className ) . not . toMatch ( / e m e r a l d / ) ;
181+ } ) ;
182+
183+ it ( 'renders title and icon correctly' , ( ) => {
184+ render (
185+ < ComparisonStatsCard
186+ title = "Pull Requests"
187+ valueA = { 10 }
188+ valueB = { 5 }
189+ labelA = "Dev A"
190+ labelB = "Dev B"
191+ icon = "GitBranch"
192+ />
193+ ) ;
194+ expect ( screen . getByText ( / P u l l R e q u e s t s / i) ) . toBeDefined ( ) ;
195+ expect ( screen . getByText ( 'Dev A' ) ) . toBeDefined ( ) ;
196+ expect ( screen . getByText ( 'Dev B' ) ) . toBeDefined ( ) ;
197+ } ) ;
198+
199+ it ( 'renders zero values without crashing' , ( ) => {
200+ render (
201+ < ComparisonStatsCard
202+ title = "Commits"
203+ valueA = { 0 }
204+ valueB = { 0 }
205+ labelA = "Alice"
206+ labelB = "Bob"
207+ icon = "GitCommit"
208+ />
209+ ) ;
210+ expect ( screen . queryByText ( 'Winner' ) ) . toBeNull ( ) ;
211+ } ) ;
212+
213+ it ( 'renders large values correctly' , ( ) => {
214+ render (
215+ < ComparisonStatsCard
216+ title = "Total Contributions"
217+ valueA = { 9999 }
218+ valueB = { 1 }
219+ labelA = "Alice"
220+ labelB = "Bob"
221+ icon = "TrendingUp"
222+ />
223+ ) ;
224+ expect ( screen . getByText ( '9999' ) ) . toBeDefined ( ) ;
225+ expect ( screen . getByText ( 'Winner' ) ) . toBeDefined ( ) ;
226+ } ) ;
227+ } ) ;
0 commit comments