@@ -173,6 +173,16 @@ function thirdPartyAuthRendered() {
173173 name : / C o n t i n u e w i t h A p p l e / ,
174174 } ) ;
175175}
176+
177+ function thirdPartyAuthNotRendered ( ) {
178+ expect (
179+ screen . queryByRole ( 'button' , { name : / C o n t i n u e w i t h G o o g l e / } )
180+ ) . not . toBeInTheDocument ( ) ;
181+ expect (
182+ screen . queryByRole ( 'button' , { name : / C o n t i n u e w i t h A p p l e / } )
183+ ) . not . toBeInTheDocument ( ) ;
184+ }
185+
176186function signInButtonAndSeparatorRendered ( ) {
177187 screen . getByRole ( 'button' , { name : 'Sign in' } ) ;
178188 screen . getByText ( 'or' ) ;
@@ -257,12 +267,7 @@ describe('Signin component', () => {
257267 // to `enterPasswordAndSubmit()` because it's wrapped in a `setTimeout`
258268 expect ( hardNavigateSpy ) . toHaveBeenCalled ( ) ;
259269
260- expect (
261- screen . queryByRole ( 'button' , { name : / C o n t i n u e w i t h G o o g l e / } )
262- ) . not . toBeInTheDocument ( ) ;
263- expect (
264- screen . queryByRole ( 'button' , { name : / C o n t i n u e w i t h A p p l e / } )
265- ) . not . toBeInTheDocument ( ) ;
270+ thirdPartyAuthNotRendered ( ) ;
266271 expect ( GleanMetrics . login . view ) . toHaveBeenCalledWith ( {
267272 event : { thirdPartyLinks : false } ,
268273 } ) ;
@@ -278,12 +283,7 @@ describe('Signin component', () => {
278283 supportsKeysOptionalLogin : false ,
279284 } ) ;
280285
281- expect (
282- screen . queryByRole ( 'button' , { name : / C o n t i n u e w i t h G o o g l e / } )
283- ) . not . toBeInTheDocument ( ) ;
284- expect (
285- screen . queryByRole ( 'button' , { name : / C o n t i n u e w i t h A p p l e / } )
286- ) . not . toBeInTheDocument ( ) ;
286+ thirdPartyAuthNotRendered ( ) ;
287287 expect ( GleanMetrics . login . view ) . toHaveBeenCalledWith ( {
288288 event : { thirdPartyLinks : false } ,
289289 } ) ;
@@ -968,7 +968,9 @@ describe('Signin component', () => {
968968 thirdPartyAuthRendered ( ) ;
969969 privacyAndTermsRendered ( ) ;
970970 differentAccountLinkRendered ( ) ;
971- resetPasswordLinkRendered ( ) ;
971+ expect (
972+ screen . queryByRole ( 'link' , { name : 'Forgot password?' } )
973+ ) . not . toBeInTheDocument ( ) ;
972974
973975 passwordInputNotRendered ( ) ;
974976 } ) ;
@@ -984,7 +986,6 @@ describe('Signin component', () => {
984986 expect (
985987 screen . queryByRole ( 'link' , { name : 'Forgot password?' } )
986988 ) . not . toBeInTheDocument ( ) ;
987- expect ( screen . queryByText ( 'Or' ) ) . not . toBeInTheDocument ( ) ;
988989 expect (
989990 screen . queryByRole ( 'button' , { name : 'Sign in' } )
990991 ) . not . toBeInTheDocument ( ) ;
@@ -1013,16 +1014,18 @@ describe('Signin component', () => {
10131014
10141015 expect ( GleanMetrics . cachedLogin . view ) . toHaveBeenCalledTimes ( 1 ) ;
10151016 expect ( GleanMetrics . cachedLogin . view ) . toHaveBeenCalledWith ( {
1016- event : { thirdPartyLinks : true } ,
1017+ event : { thirdPartyLinks : false } ,
10171018 } ) ;
10181019 signInHeaderRendered ( ) ;
10191020 avatarAndEmailRendered ( ) ;
1020- thirdPartyAuthRendered ( ) ;
1021- signInButtonAndSeparatorRendered ( ) ;
1021+ screen . getByRole ( 'button' , { name : 'Sign in' } ) ;
10221022 privacyAndTermsRendered ( ) ;
1023- resetPasswordLinkRendered ( ) ;
10241023 differentAccountLinkRendered ( ) ;
1025-
1024+ thirdPartyAuthNotRendered ( ) ;
1025+ expect (
1026+ screen . queryByRole ( 'link' , { name : 'Forgot password?' } )
1027+ ) . not . toBeInTheDocument ( ) ;
1028+ expect ( screen . queryByText ( 'or' ) ) . not . toBeInTheDocument ( ) ;
10261029 passwordInputNotRendered ( ) ;
10271030 } ) ;
10281031
@@ -1039,7 +1042,7 @@ describe('Signin component', () => {
10391042
10401043 passwordInputNotRendered ( ) ;
10411044 expect ( GleanMetrics . cachedLogin . view ) . toHaveBeenCalledWith ( {
1042- event : { thirdPartyLinks : true } ,
1045+ event : { thirdPartyLinks : false } ,
10431046 } ) ;
10441047 } ) ;
10451048
@@ -1056,7 +1059,7 @@ describe('Signin component', () => {
10561059
10571060 passwordInputNotRendered ( ) ;
10581061 expect ( GleanMetrics . cachedLogin . view ) . toHaveBeenCalledWith ( {
1059- event : { thirdPartyLinks : true } ,
1062+ event : { thirdPartyLinks : false } ,
10601063 } ) ;
10611064 } ) ;
10621065
@@ -1101,19 +1104,6 @@ describe('Signin component', () => {
11011104 } ) ;
11021105 } ) ;
11031106
1104- it ( 'emits an event on forgot password link click' , async ( ) => {
1105- renderWithLocalizationProvider (
1106- < Subject sessionToken = { MOCK_SESSION_TOKEN } />
1107- ) ;
1108-
1109- fireEvent . click ( screen . getByText ( 'Forgot password?' ) ) ;
1110- await waitFor ( ( ) => {
1111- expect ( GleanMetrics . cachedLogin . forgotPassword ) . toHaveBeenCalledTimes (
1112- 1
1113- ) ;
1114- } ) ;
1115- } ) ;
1116-
11171107 describe ( 'successful submission' , ( ) => {
11181108 it ( 'submits and emits metrics' , async ( ) => {
11191109 const cachedSigninHandler = jest
@@ -1447,16 +1437,19 @@ describe('Signin component', () => {
14471437
14481438 signInHeaderRendered ( ) ;
14491439 avatarAndEmailRendered ( ) ;
1450- signInButtonAndSeparatorRendered ( ) ;
1451- thirdPartyAuthRendered ( ) ;
1440+ screen . getByRole ( 'button' , { name : 'Sign in' } ) ;
14521441 privacyAndTermsRendered ( ) ;
14531442 differentAccountLinkRendered ( ) ;
1454- resetPasswordLinkRendered ( ) ;
1443+ thirdPartyAuthNotRendered ( ) ;
1444+
1445+ expect (
1446+ screen . queryByRole ( 'link' , { name : 'Forgot password?' } )
1447+ ) . not . toBeInTheDocument ( ) ;
14551448
14561449 passwordInputNotRendered ( ) ;
14571450 } ) ;
14581451
1459- it ( 'renders as expected with linked account' , ( ) => {
1452+ it ( 'renders as expected with linked account (passwordless) ' , ( ) => {
14601453 renderWithLocalizationProvider (
14611454 < Subject
14621455 sessionToken = { MOCK_SESSION_TOKEN }
@@ -1466,18 +1459,86 @@ describe('Signin component', () => {
14661459 ) ;
14671460 signInHeaderRendered ( ) ;
14681461 avatarAndEmailRendered ( ) ;
1469- thirdPartyAuthRendered ( ) ;
14701462 privacyAndTermsRendered ( ) ;
1463+ thirdPartyAuthNotRendered ( ) ;
1464+
1465+ screen . getByRole ( 'button' , { name : 'Sign in' } ) ;
1466+
1467+ // OAuth buttons and forgot password should NOT be rendered for cached users
1468+ expect (
1469+ screen . queryByRole ( 'link' , { name : 'Forgot password?' } )
1470+ ) . not . toBeInTheDocument ( ) ;
14711471
14721472 passwordInputNotRendered ( ) ;
1473+ } ) ;
1474+ } ) ;
1475+
1476+ describe ( 'UI simplification for cached users' , ( ) => {
1477+ it ( 'hides OAuth buttons for cached users' , ( ) => {
1478+ renderWithLocalizationProvider (
1479+ < Subject sessionToken = { MOCK_SESSION_TOKEN } />
1480+ ) ;
1481+
1482+ thirdPartyAuthNotRendered ( ) ;
1483+ } ) ;
1484+
1485+ it ( 'hides forgot password link for cached users' , ( ) => {
1486+ renderWithLocalizationProvider (
1487+ < Subject sessionToken = { MOCK_SESSION_TOKEN } />
1488+ ) ;
1489+
14731490 expect (
14741491 screen . queryByRole ( 'link' , { name : 'Forgot password?' } )
14751492 ) . not . toBeInTheDocument ( ) ;
1476- expect ( screen . queryByText ( 'Or' ) ) . not . toBeInTheDocument ( ) ;
1493+ } ) ;
1494+
1495+ it ( 'hides "use a different account" link for Firefox Desktop users' , ( ) => {
1496+ renderWithLocalizationProvider (
1497+ < Subject
1498+ sessionToken = { MOCK_SESSION_TOKEN }
1499+ isSignedIntoFirefoxDesktop = { true }
1500+ />
1501+ ) ;
1502+
14771503 expect (
1478- screen . queryByRole ( 'button ' , { name : 'Sign in ' } )
1504+ screen . queryByRole ( 'link ' , { name : 'Use a different account ' } )
14791505 ) . not . toBeInTheDocument ( ) ;
14801506 } ) ;
1507+
1508+ it ( 'shows "use a different account" link for non-Firefox Desktop users' , ( ) => {
1509+ renderWithLocalizationProvider (
1510+ < Subject sessionToken = { MOCK_SESSION_TOKEN } />
1511+ ) ;
1512+
1513+ expect (
1514+ screen . getByRole ( 'link' , { name : 'Use a different account' } )
1515+ ) . toBeInTheDocument ( ) ;
1516+ } ) ;
1517+
1518+ it ( 'shows cached signin button for passwordless accounts' , ( ) => {
1519+ renderWithLocalizationProvider (
1520+ < Subject
1521+ sessionToken = { MOCK_SESSION_TOKEN }
1522+ hasPassword = { false }
1523+ hasLinkedAccount = { true }
1524+ />
1525+ ) ;
1526+
1527+ // Sign in button should be visible for passwordless cached users
1528+ expect (
1529+ screen . getByRole ( 'button' , { name : 'Sign in' } )
1530+ ) . toBeInTheDocument ( ) ;
1531+ } ) ;
1532+
1533+ it ( 'emits correct Glean metrics for cached signin with hidden OAuth' , ( ) => {
1534+ renderWithLocalizationProvider (
1535+ < Subject sessionToken = { MOCK_SESSION_TOKEN } />
1536+ ) ;
1537+
1538+ expect ( GleanMetrics . cachedLogin . view ) . toHaveBeenCalledWith ( {
1539+ event : { thirdPartyLinks : false } ,
1540+ } ) ;
1541+ } ) ;
14811542 } ) ;
14821543 } ) ;
14831544
0 commit comments