From fd1bf0dd5a4f6bc9f437902e1c6ea48c3aa0e794 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Fri, 21 Jun 2024 17:36:46 +0200 Subject: [PATCH] test: minor fix to how cookies are passed around (#55259) --- api/jest.utils.test.ts | 17 ++++++++++++++++- api/jest.utils.ts | 9 ++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) 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)) ?? '';