@@ -2,7 +2,9 @@ import { render, screen, within } from '@testing-library/react';
22import { useAuthStatus } from '@hooks/use-auth-status' ;
33import { getSessionServer } from '@utils/amplify-utils' ;
44import { getIdTokenClaims } from '@utils/token-utils' ;
5+ import { serverIsFeatureEnabled } from '@utils/server-features' ;
56import { NhsNotifyHeader } from '@molecules/Header/Header' ;
7+ import { useFeatureFlags } from '@providers/features-provider' ;
68
79jest . mock ( '@hooks/use-auth-status' ) ;
810const mockUseAuthStatus = jest . mocked ( useAuthStatus ) ;
@@ -13,22 +15,37 @@ const mockGetIdTokenClaims = jest.mocked(getIdTokenClaims);
1315jest . mock ( '@utils/amplify-utils' ) ;
1416const mockGetSessionServer = jest . mocked ( getSessionServer ) ;
1517
18+ jest . mock ( '@utils/server-features' ) ;
19+ const mockServerIsFeatureEnabled = jest . mocked ( serverIsFeatureEnabled ) ;
20+
21+ jest . mock ( '@providers/features-provider' ) ;
22+ const mockUseFeatureFlags = jest . mocked ( useFeatureFlags ) ;
23+
1624jest . mock ( 'nhs-notify-web-template-management-utils/logger' ) ;
1725
1826beforeEach ( ( ) => {
1927 jest . resetAllMocks ( ) ;
2028 mockUseAuthStatus . mockImplementation ( ( status ) => status ?? 'configuring' ) ;
29+ mockServerIsFeatureEnabled . mockResolvedValue ( false ) ; // default for most tests
30+ mockUseFeatureFlags . mockReturnValue ( {
31+ proofing : false ,
32+ routing : false ,
33+ } ) ;
2134} ) ;
2235
2336describe ( 'NhsNotifyHeader' , ( ) => {
2437 describe ( 'when unauthenticated' , ( ) => {
2538 beforeEach ( ( ) => {
2639 mockGetSessionServer . mockResolvedValue ( { } ) ;
2740 mockGetIdTokenClaims . mockReturnValue ( { } ) ;
41+ mockUseFeatureFlags . mockReturnValue ( {
42+ proofing : false ,
43+ routing : false ,
44+ } ) ;
2845 } ) ;
2946
3047 it ( 'initializes the authStatus as unauthenticated' , async ( ) => {
31- const header = await NhsNotifyHeader ( { } ) ;
48+ const header = await NhsNotifyHeader ( ) ;
3249
3350 render ( header ) ;
3451
@@ -40,7 +57,7 @@ describe('NhsNotifyHeader', () => {
4057 } ) ;
4158
4259 it ( 'renders the logo and service name with the correct url' , async ( ) => {
43- const header = await NhsNotifyHeader ( { } ) ;
60+ const header = await NhsNotifyHeader ( ) ;
4461
4562 render ( header ) ;
4663
@@ -54,15 +71,15 @@ describe('NhsNotifyHeader', () => {
5471 } ) ;
5572
5673 it ( `renders the authentication link as 'sign in'` , async ( ) => {
57- const header = await NhsNotifyHeader ( { } ) ;
74+ const header = await NhsNotifyHeader ( ) ;
5875
5976 render ( header ) ;
6077
6178 expect ( screen . getByTestId ( 'sign-in-link' ) ) . toHaveTextContent ( 'Sign in' ) ;
6279 } ) ;
6380
6481 it ( 'does not show the navigation links' , async ( ) => {
65- const header = await NhsNotifyHeader ( { } ) ;
82+ const header = await NhsNotifyHeader ( ) ;
6683
6784 render ( header ) ;
6885
@@ -72,7 +89,7 @@ describe('NhsNotifyHeader', () => {
7289 } ) ;
7390
7491 it ( 'matches snapshot (unauthenticated)' , async ( ) => {
75- const header = await NhsNotifyHeader ( { } ) ;
92+ const header = await NhsNotifyHeader ( ) ;
7693
7794 const container = render ( header ) ;
7895
@@ -91,14 +108,17 @@ describe('NhsNotifyHeader', () => {
91108 displayName : 'Dr Test Example' ,
92109 clientName : 'NHS England' ,
93110 } ) ;
111+
112+ mockUseFeatureFlags . mockReturnValue ( {
113+ proofing : false ,
114+ routing : false ,
115+ } ) ;
94116 } ) ;
95117
96118 it ( 'initializes the authStatus as authenticated' , async ( ) => {
97- const header = await NhsNotifyHeader ( { } ) ;
98-
119+ const header = await NhsNotifyHeader ( ) ;
99120 render ( header ) ;
100121
101- // hook used in AuthLink, HeaderNavigation, HeaderAccountDetails
102122 expect ( mockUseAuthStatus ) . toHaveBeenCalledTimes ( 3 ) ;
103123
104124 for ( const call of mockUseAuthStatus . mock . calls ) {
@@ -107,7 +127,7 @@ describe('NhsNotifyHeader', () => {
107127 } ) ;
108128
109129 it ( 'renders the users display name' , async ( ) => {
110- const header = await NhsNotifyHeader ( { } ) ;
130+ const header = await NhsNotifyHeader ( ) ;
111131
112132 render ( header ) ;
113133
@@ -117,7 +137,7 @@ describe('NhsNotifyHeader', () => {
117137 } ) ;
118138
119139 it ( 'renders the client name' , async ( ) => {
120- const header = await NhsNotifyHeader ( { } ) ;
140+ const header = await NhsNotifyHeader ( ) ;
121141
122142 render ( header ) ;
123143
@@ -127,7 +147,7 @@ describe('NhsNotifyHeader', () => {
127147 } ) ;
128148
129149 it ( `renders auth link as 'Sign out'` , async ( ) => {
130- const header = await NhsNotifyHeader ( { } ) ;
150+ const header = await NhsNotifyHeader ( ) ;
131151
132152 render ( header ) ;
133153 expect ( screen . getByTestId ( 'sign-out-link' ) ) . toHaveTextContent ( 'Sign out' ) ;
@@ -139,7 +159,7 @@ describe('NhsNotifyHeader', () => {
139159 } ) ;
140160 mockGetIdTokenClaims . mockReturnValueOnce ( { } ) ;
141161
142- const header = await NhsNotifyHeader ( { } ) ;
162+ const header = await NhsNotifyHeader ( ) ;
143163
144164 render ( header ) ;
145165
@@ -154,17 +174,22 @@ describe('NhsNotifyHeader', () => {
154174 } ) ;
155175
156176 it ( 'matches snapshot (authenticated)' , async ( ) => {
157- const header = await NhsNotifyHeader ( { } ) ;
177+ const header = await NhsNotifyHeader ( ) ;
158178
159179 const container = render ( header ) ;
160180 expect ( container . asFragment ( ) ) . toMatchSnapshot ( ) ;
161181 } ) ;
162182
163183 describe ( `with 'routing' flag enabled` , ( ) => {
164- it ( 'renders both the navigation links with correct hrefs' , async ( ) => {
165- const header = await NhsNotifyHeader ( {
166- features : { routing : true } ,
184+ beforeEach ( ( ) => {
185+ mockUseFeatureFlags . mockReturnValue ( {
186+ proofing : false ,
187+ routing : true ,
167188 } ) ;
189+ } ) ;
190+
191+ it ( 'renders both the navigation links with correct hrefs' , async ( ) => {
192+ const header = await NhsNotifyHeader ( ) ;
168193
169194 render ( header ) ;
170195
@@ -177,18 +202,20 @@ describe('NhsNotifyHeader', () => {
177202 const plansLink = within ( nav ) . getByRole ( 'link' , {
178203 name : 'Message plans' ,
179204 } ) ;
180- expect ( plansLink ) . toHaveAttribute (
181- 'href' ,
182- '/templates-and-message-plans/message-plans'
183- ) ;
205+ expect ( plansLink ) . toHaveAttribute ( 'href' , '/message-plans' ) ;
184206 } ) ;
185207 } ) ;
186208
187209 describe ( `with 'routing' flag disabled` , ( ) => {
188- it ( 'renders the templates link with correct href' , async ( ) => {
189- const header = await NhsNotifyHeader ( {
190- features : { routing : false } ,
210+ beforeEach ( ( ) => {
211+ mockUseFeatureFlags . mockReturnValue ( {
212+ proofing : false ,
213+ routing : false ,
191214 } ) ;
215+ } ) ;
216+
217+ it ( 'renders the templates link with correct href' , async ( ) => {
218+ const header = await NhsNotifyHeader ( ) ;
192219
193220 render ( header ) ;
194221
@@ -201,9 +228,7 @@ describe('NhsNotifyHeader', () => {
201228 } ) ;
202229
203230 it ( 'should not render the message plans link' , async ( ) => {
204- const header = await NhsNotifyHeader ( {
205- features : { routing : false } ,
206- } ) ;
231+ const header = await NhsNotifyHeader ( ) ;
207232
208233 render ( header ) ;
209234
0 commit comments