11import { isValidSignIn } from "@src/utils/auth/callbacks/is-valid-signin" ;
2+ import type { DecodedIdToken } from "@src/utils/auth/types" ;
23import { AppConfig } from "@src/utils/config" ;
34import { appConfigBuilder } from "@test-data/config/builders" ;
5+ import { createTypeBuilder } from "@test-data/meta-builder" ;
46import { jwtDecode } from "jwt-decode" ;
57import { Account } from "next-auth" ;
68
@@ -13,6 +15,15 @@ describe("isValidSignIn", () => {
1315 . andNHS_LOGIN_CLIENT_ID ( "mock-client-id" )
1416 . build ( ) ;
1517
18+ const decodedIdTokenBuilder = ( ) => {
19+ return createTypeBuilder < DecodedIdToken > ( {
20+ iss : mockConfig . NHS_LOGIN_URL ,
21+ aud : mockConfig . NHS_LOGIN_CLIENT_ID ,
22+ identity_proofing_level : "P9" ,
23+ vot : "P9.Cp.Ck" ,
24+ } ) ;
25+ } ;
26+
1627 beforeEach ( ( ) => {
1728 jest . clearAllMocks ( ) ;
1829 } ) ;
@@ -32,12 +43,7 @@ describe("isValidSignIn", () => {
3243 it ( "should return true if token is valid" , ( ) => {
3344 const mockAccount = { id_token : "valid-token" } as Account ;
3445
35- ( jwtDecode as jest . Mock ) . mockReturnValue ( {
36- iss : mockConfig . NHS_LOGIN_URL ,
37- aud : mockConfig . NHS_LOGIN_CLIENT_ID ,
38- identity_proofing_level : "P9" ,
39- vot : "P9.Cp.Ck" ,
40- } ) ;
46+ ( jwtDecode as jest . Mock ) . mockReturnValue ( decodedIdTokenBuilder ( ) . build ( ) ) ;
4147
4248 const result = isValidSignIn ( mockAccount , mockConfig ) ;
4349 expect ( result ) . toBe ( true ) ;
@@ -46,12 +52,7 @@ describe("isValidSignIn", () => {
4652 it ( "should return false and logs if iss is invalid" , ( ) => {
4753 const mockAccount = { id_token : "invalid-token" } as Account ;
4854
49- ( jwtDecode as jest . Mock ) . mockReturnValue ( {
50- iss : "incorrect-issuer" ,
51- aud : mockConfig . NHS_LOGIN_CLIENT_ID ,
52- identity_proofing_level : "P9" ,
53- vot : "P9.Cp.Ck" ,
54- } ) ;
55+ ( jwtDecode as jest . Mock ) . mockReturnValue ( decodedIdTokenBuilder ( ) . withIss ( "incorrect-issuer" ) . build ( ) ) ;
5556
5657 const result = isValidSignIn ( mockAccount , mockConfig ) ;
5758 expect ( result ) . toBe ( false ) ;
@@ -60,12 +61,7 @@ describe("isValidSignIn", () => {
6061 it ( "should return false and logs if aud is invalid" , ( ) => {
6162 const mockAccount = { id_token : "invalid-token" } as Account ;
6263
63- ( jwtDecode as jest . Mock ) . mockReturnValue ( {
64- iss : mockConfig . NHS_LOGIN_URL ,
65- aud : "incorrect-audience" ,
66- identity_proofing_level : "P9" ,
67- vot : "P9.Cp.Ck" ,
68- } ) ;
64+ ( jwtDecode as jest . Mock ) . mockReturnValue ( decodedIdTokenBuilder ( ) . withAud ( "incorrect-audience" ) . build ( ) ) ;
6965
7066 const result = isValidSignIn ( mockAccount , mockConfig ) ;
7167 expect ( result ) . toBe ( false ) ;
@@ -74,12 +70,7 @@ describe("isValidSignIn", () => {
7470 it ( "should return false and logs if identity_proofing_level is invalid" , ( ) => {
7571 const mockAccount = { id_token : "invalid-token" } as Account ;
7672
77- ( jwtDecode as jest . Mock ) . mockReturnValue ( {
78- iss : mockConfig . NHS_LOGIN_URL ,
79- aud : mockConfig . NHS_LOGIN_CLIENT_ID ,
80- identity_proofing_level : "P0" ,
81- vot : "P9.Cp.Ck" ,
82- } ) ;
73+ ( jwtDecode as jest . Mock ) . mockReturnValue ( decodedIdTokenBuilder ( ) . withIdentity_proofing_level ( "P0" ) . build ( ) ) ;
8374
8475 const result = isValidSignIn ( mockAccount , mockConfig ) ;
8576 expect ( result ) . toBe ( false ) ;
@@ -88,12 +79,7 @@ describe("isValidSignIn", () => {
8879 it ( "should return false and logs if vot is invalid" , ( ) => {
8980 const mockAccount = { id_token : "invalid-token" } as Account ;
9081
91- ( jwtDecode as jest . Mock ) . mockReturnValue ( {
92- iss : mockConfig . NHS_LOGIN_URL ,
93- aud : mockConfig . NHS_LOGIN_CLIENT_ID ,
94- identity_proofing_level : "P9" ,
95- vot : "P9.Sausages" ,
96- } ) ;
82+ ( jwtDecode as jest . Mock ) . mockReturnValue ( decodedIdTokenBuilder ( ) . withVot ( "P9.Sausages" ) . build ( ) ) ;
9783
9884 const result = isValidSignIn ( mockAccount , mockConfig ) ;
9985 expect ( result ) . toBe ( false ) ;
0 commit comments