@@ -48,3 +48,42 @@ describe('HeroSection', () => {
4848 expect ( screen . getByText ( / i s o m e t r i c / i) . textContent ) . toMatch ( / i s o m e t r i c / i) ;
4949 } ) ;
5050} ) ;
51+
52+ describe ( 'HeroSection responsive rendering and typography (Variation 3)' , ( ) => {
53+ it ( 'renders full typography heading with high contrast gradient' , ( ) => {
54+ render ( < HeroSection /> ) ;
55+ const heading = screen . getByRole ( 'heading' , { level : 1 } ) ;
56+ expect ( heading ) . toBeDefined ( ) ;
57+ expect ( heading . className ) . toMatch ( / t e x t - 5 x l | t e x t - 8 x l | f o n t - e x t r a b o l d / ) ;
58+ } ) ;
59+
60+ it ( 'renders all three stat badges' , ( ) => {
61+ render ( < HeroSection /> ) ;
62+ expect ( screen . getByText ( / 1 , 2 4 7 C o n t r i b u t i o n s / i) ) . toBeDefined ( ) ;
63+ expect ( screen . getByText ( / 8 3 P u l l R e q u e s t s / i) ) . toBeDefined ( ) ;
64+ expect ( screen . getByText ( / 2 1 4 C o m m i t s / i) ) . toBeDefined ( ) ;
65+ } ) ;
66+
67+ it ( 'renders GitHub username input field' , ( ) => {
68+ render ( < HeroSection /> ) ;
69+ const input = screen . getByPlaceholderText ( / E n t e r G i t H u b U s e r n a m e / i) ;
70+ expect ( input ) . toBeDefined ( ) ;
71+ } ) ;
72+
73+ it ( 'renders Watch Dashboard button' , ( ) => {
74+ render ( < HeroSection /> ) ;
75+ const button = screen . getByText ( / W a t c h D a s h b o a r d / i) ;
76+ expect ( button ) . toBeDefined ( ) ;
77+ } ) ;
78+
79+ it ( 'renders Copy Link button' , ( ) => {
80+ render ( < HeroSection /> ) ;
81+ const button = screen . getByText ( / C o p y L i n k / i) ;
82+ expect ( button ) . toBeDefined ( ) ;
83+ } ) ;
84+
85+ it ( 'renders descriptive paragraph with professional precision text' , ( ) => {
86+ render ( < HeroSection /> ) ;
87+ expect ( screen . getByText ( / p r o f e s s i o n a l p r e c i s i o n / i) ) . toBeDefined ( ) ;
88+ } ) ;
89+ } ) ;
0 commit comments