@@ -7,35 +7,49 @@ import ReleaseNoteUnsubscribe from './ReleaseNoteUnsubscribe';
77import messages from './messages' ;
88import * as api from '../data/api' ;
99
10+ const renderUnsubscribePage = ( search = '' ) => render (
11+ < ReleaseNoteUnsubscribe /> ,
12+ {
13+ path : '/release-notes/unsubscribe' ,
14+ routerProps : { initialEntries : [ `/release-notes/unsubscribe${ search } ` ] } ,
15+ } ,
16+ ) ;
17+
1018describe ( 'ReleaseNoteUnsubscribe' , ( ) => {
1119 beforeEach ( ( ) => {
1220 initializeMocks ( ) ;
1321 } ) ;
1422
15- test ( 'renders the idle confirmation state' , ( ) => {
16- render ( < ReleaseNoteUnsubscribe /> ) ;
23+ test ( 'renders invalid state when token is missing' , ( ) => {
24+ renderUnsubscribePage ( ) ;
25+ expect ( screen . getByText ( messages . unsubscribeInvalidTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
26+ expect ( screen . getByText ( messages . unsubscribeInvalid . defaultMessage ) ) . toBeInTheDocument ( ) ;
27+ } ) ;
28+
29+ test ( 'renders the idle confirmation state when token is present' , ( ) => {
30+ renderUnsubscribePage ( '?token=signed-token' ) ;
1731 expect ( screen . getByText ( messages . unsubscribeTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
1832 expect ( screen . getByText ( messages . unsubscribeConfirmation . defaultMessage ) ) . toBeInTheDocument ( ) ;
1933 expect (
2034 screen . getByRole ( 'button' , { name : messages . unsubscribeButton . defaultMessage } ) ,
2135 ) . toBeInTheDocument ( ) ;
2236 } ) ;
2337
24- test ( 'calls unsubscribeFromReleaseNoteEmails and shows success state on success' , async ( ) => {
38+ test ( 'calls unsubscribeFromReleaseNoteEmails with token and shows success state on success' , async ( ) => {
2539 const spy = jest . spyOn ( api , 'unsubscribeFromReleaseNoteEmails' ) . mockResolvedValue ( { message : 'ok' } ) ;
26- render ( < ReleaseNoteUnsubscribe /> ) ;
40+ renderUnsubscribePage ( '?token=signed-token' ) ;
2741
2842 fireEvent . click ( screen . getByRole ( 'button' , { name : messages . unsubscribeButton . defaultMessage } ) ) ;
2943
3044 await waitFor ( ( ) => {
3145 expect ( screen . getByText ( messages . unsubscribeSuccessTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
3246 } ) ;
33- expect ( spy ) . toHaveBeenCalledWith ( ) ;
47+ expect ( spy ) . toHaveBeenCalledWith ( 'signed-token' ) ;
3448 } ) ;
3549
3650 test ( 'shows error state and allows retry on failure' , async ( ) => {
3751 const spy = jest . spyOn ( api , 'unsubscribeFromReleaseNoteEmails' ) . mockRejectedValue ( new Error ( 'boom' ) ) ;
38- render ( < ReleaseNoteUnsubscribe /> ) ;
52+ renderUnsubscribePage ( '?token=signed-token' ) ;
3953
4054 fireEvent . click ( screen . getByRole ( 'button' , { name : messages . unsubscribeButton . defaultMessage } ) ) ;
4155
0 commit comments