11import '../../mail/__mocks__/mail.service'
22
3+ import {
4+ createPkceChallenge ,
5+ createPkceVerifier ,
6+ } from '~server/modules/auth/auth.pkce'
37import { resetTables } from '~tests/db/utils'
48import { add } from 'date-fns/add'
59import { mock } from 'vitest-mock-extended'
@@ -9,7 +13,6 @@ import { db } from '@acme/db'
913import * as mailService from '../../mail/mail.service'
1014import { emailLogin , emailVerifyOtp } from '../auth.service'
1115import { createAuthToken , createVfnIdentifier } from '../auth.utils'
12- import { createPkceChallenge , createPkceVerifier } from '~server/modules/auth/auth.pkce' ;
1316
1417const mockedMailService = mock ( mailService )
1518
@@ -49,7 +52,7 @@ describe('auth.service', () => {
4952 const codeChallenge = 'test-codeChallenge-123'
5053
5154 await emailLogin ( { email, codeChallenge : codeChallenge } )
52-
55+
5356 await expect (
5457 emailLogin ( { email, codeChallenge : codeChallenge } ) ,
5558 ) . rejects . toThrow ( 'Please refresh and try again.' )
@@ -64,8 +67,14 @@ describe('auth.service', () => {
6467 await emailLogin ( { email, codeChallenge : codeChallenge2 } )
6568
6669 // Should have two records with different codeChallenges
67- const vfnIdentifier1 = createVfnIdentifier ( { email, codeChallenge : codeChallenge1 } )
68- const vfnIdentifier2 = createVfnIdentifier ( { email, codeChallenge : codeChallenge2 } )
70+ const vfnIdentifier1 = createVfnIdentifier ( {
71+ email,
72+ codeChallenge : codeChallenge1 ,
73+ } )
74+ const vfnIdentifier2 = createVfnIdentifier ( {
75+ email,
76+ codeChallenge : codeChallenge2 ,
77+ } )
6978 const token1 = await db . verificationToken . findUnique ( {
7079 where : { identifier : vfnIdentifier1 } ,
7180 } )
@@ -120,7 +129,9 @@ describe('auth.service', () => {
120129 const codeVerifier = createPkceVerifier ( )
121130 const token = '123456'
122131
123- await expect ( emailVerifyOtp ( { email, token, codeVerifier } ) ) . rejects . toThrow ( )
132+ await expect (
133+ emailVerifyOtp ( { email, token, codeVerifier } ) ,
134+ ) . rejects . toThrow ( )
124135 } )
125136
126137 it ( 'should reject a wrong OTP with wrong codeVerifier' , async ( ) => {
@@ -133,11 +144,15 @@ describe('auth.service', () => {
133144 // Create a verification token
134145 await emailLogin ( { email, codeChallenge : correctCodeChallenge } )
135146
136- const wrongToken = " WRONG6"
147+ const wrongToken = ' WRONG6'
137148
138149 // Should throw
139150 await expect (
140- emailVerifyOtp ( { email, token : wrongToken , codeVerifier : wrongVerifier } ) ,
151+ emailVerifyOtp ( {
152+ email,
153+ token : wrongToken ,
154+ codeVerifier : wrongVerifier ,
155+ } ) ,
141156 ) . rejects . toThrow ( )
142157 } )
143158
@@ -148,20 +163,25 @@ describe('auth.service', () => {
148163 const wrongToken = 'WRONG6'
149164
150165 await emailLogin ( { email, codeChallenge : codeChallenge } )
151- await expect ( emailVerifyOtp ( { email , token : wrongToken , codeVerifier } ) ) . rejects . toThrow (
152- 'Token is invalid or has expired' ,
153- )
166+ await expect (
167+ emailVerifyOtp ( { email , token : wrongToken , codeVerifier } ) ,
168+ ) . rejects . toThrow ( 'Token is invalid or has expired' )
154169 } )
155170
156-
157171 it ( 'should reject an expired OTP with correct codeVerifier' , async ( ) => {
158172159173 const codeVerifier = createPkceVerifier ( )
160174 const codeChallenge = createPkceChallenge ( codeVerifier )
161175
162- const { token, hashedToken } = createAuthToken ( { email, codeChallenge : codeChallenge } )
176+ const { token, hashedToken } = createAuthToken ( {
177+ email,
178+ codeChallenge : codeChallenge ,
179+ } )
163180
164- const vfnIdentifier = createVfnIdentifier ( { email, codeChallenge : codeChallenge } )
181+ const vfnIdentifier = createVfnIdentifier ( {
182+ email,
183+ codeChallenge : codeChallenge ,
184+ } )
165185 // Create a verification token with an old issuedAt date
166186 const oldDate = add ( new Date ( ) , { seconds : - 700 } ) // 700 seconds ago (beyond 600s expiry)
167187 await db . verificationToken . create ( {
@@ -172,9 +192,9 @@ describe('auth.service', () => {
172192 } ,
173193 } )
174194
175- await expect ( emailVerifyOtp ( { email , token , codeVerifier } ) ) . rejects . toThrow (
176- 'Token is invalid or has expired' ,
177- )
195+ await expect (
196+ emailVerifyOtp ( { email , token , codeVerifier } ) ,
197+ ) . rejects . toThrow ( 'Token is invalid or has expired' )
178198 } )
179199
180200 it ( 'should increment attempts on each verification try' , async ( ) => {
@@ -187,7 +207,9 @@ describe('auth.service', () => {
187207 const identifier = createVfnIdentifier ( { email, codeChallenge } )
188208 // Make 2 failed attempts
189209 for ( let i = 1 ; i <= 2 ; i ++ ) {
190- await expect ( emailVerifyOtp ( { email, token : wrongToken , codeVerifier } ) ) . rejects . toThrow ( )
210+ await expect (
211+ emailVerifyOtp ( { email, token : wrongToken , codeVerifier } ) ,
212+ ) . rejects . toThrow ( )
191213 const verificationToken = await db . verificationToken . findUnique ( {
192214 where : { identifier } ,
193215 } )
@@ -205,16 +227,17 @@ describe('auth.service', () => {
205227
206228 // Make 5 failed attempts
207229 for ( let i = 0 ; i < 5 ; i ++ ) {
208- await expect ( emailVerifyOtp ( { email, token, codeVerifier } ) ) . rejects . toThrow ( )
230+ await expect (
231+ emailVerifyOtp ( { email, token, codeVerifier } ) ,
232+ ) . rejects . toThrow ( )
209233 }
210234
211235 // 6th attempt should give TOO_MANY_REQUESTS
212- await expect ( emailVerifyOtp ( { email , token , codeVerifier } ) ) . rejects . toThrow (
213- 'Wrong OTP was entered too many times' ,
214- )
236+ await expect (
237+ emailVerifyOtp ( { email , token , codeVerifier } ) ,
238+ ) . rejects . toThrow ( 'Wrong OTP was entered too many times' )
215239 } )
216240
217-
218241 it ( 'should delete verification token after successful verification' , async ( ) => {
219242220243 const codeVerifier = createPkceVerifier ( )
@@ -224,7 +247,10 @@ describe('auth.service', () => {
224247 await emailVerifyOtp ( { email, token, codeVerifier } )
225248
226249 // Token should be deleted
227- const vfnIdentifier = createVfnIdentifier ( { email, codeChallenge : codeChallenge } )
250+ const vfnIdentifier = createVfnIdentifier ( {
251+ email,
252+ codeChallenge : codeChallenge ,
253+ } )
228254 const verificationToken = await db . verificationToken . findUnique ( {
229255 where : { identifier : vfnIdentifier } ,
230256 } )
@@ -243,7 +269,9 @@ describe('auth.service', () => {
243269 ) . resolves . toBeDefined ( )
244270
245271 // Second verification with same token should fail
246- await expect ( emailVerifyOtp ( { email, token, codeVerifier } ) ) . rejects . toThrow ( )
272+ await expect (
273+ emailVerifyOtp ( { email, token, codeVerifier } ) ,
274+ ) . rejects . toThrow ( )
247275 } )
248276 } )
249277} )
0 commit comments