diff --git a/api/jest.utils.test.ts b/api/jest.utils.test.ts index 03e074b43de..bd72b1a9c0d 100644 --- a/api/jest.utils.test.ts +++ b/api/jest.utils.test.ts @@ -1,4 +1,4 @@ -import { getCsrfToken } from './jest.utils'; +import { getCsrfToken, getCookies } from './jest.utils'; const fakeCookies = [ '_csrf=123; Path=/; HttpOnly; SameSite=Strict', @@ -17,3 +17,18 @@ describe('getCsrfToken', () => { ).toBeUndefined(); }); }); + +describe('setCookiesToCookies', () => { + test('returns a string of cookies', () => { + expect(getCookies(fakeCookies)).toEqual( + '_csrf=123; csrf_token=abc-123; sessionId=CV-abc.123' + ); + }); + test('handles bare cookies', () => { + expect(getCookies(['_csrf=123'])).toEqual('_csrf=123'); + }); + + test('throws an error if the cookies are malformed', () => { + expect(() => getCookies(['_csrf'])).toThrow(); + }); +}); diff --git a/api/jest.utils.ts b/api/jest.utils.ts index 6f27ee97d65..29f9a90b1ce 100644 --- a/api/jest.utils.ts +++ b/api/jest.utils.ts @@ -34,6 +34,13 @@ export const getCsrfToken = (setCookies: string[]): string | undefined => { export const ORIGIN = 'https://www.freecodecamp.org'; +export const getCookies = (setCookies: string[]): string => { + for (const cookie of setCookies) { + expect(cookie).toMatch(/.*=.*/); + } + return setCookies.map(cookie => cookie.split(';')[0]).join('; '); +}; + export function superRequest( resource: string, config: { @@ -48,7 +55,7 @@ export function superRequest( const req = requests[method](resource).set('Origin', ORIGIN); if (setCookies) { - void req.set('Cookie', setCookies); + void req.set('Cookie', getCookies(setCookies)); } const csrfToken = (setCookies && getCsrfToken(setCookies)) ?? '';