From 7148aa4e19084d8a72366c28d1f5d0c32daf7518 Mon Sep 17 00:00:00 2001 From: JamieGunnCO Date: Fri, 5 Apr 2024 16:04:29 +0100 Subject: [PATCH] update middleware tests --- packages/admin/src/middleware.page.ts | 7 ++-- packages/admin/src/middleware.test.ts | 41 +++++++++++++++++------ packages/admin/tsconfig.json | 2 +- packages/applicant/src/middleware.page.ts | 2 +- 4 files changed, 37 insertions(+), 15 deletions(-) diff --git a/packages/admin/src/middleware.page.ts b/packages/admin/src/middleware.page.ts index 88710453b..4a56d3601 100644 --- a/packages/admin/src/middleware.page.ts +++ b/packages/admin/src/middleware.page.ts @@ -90,7 +90,7 @@ const authenticatedPaths = [ '/scheme/:path*', '/scheme-list/:path*', '/super-admin-dashboard/:path*', -].map((path) => new URLPattern({ pathname: path })); +].map((pathname) => new URLPattern({ pathname })); const isAuthenticatedPath = (pathname: string) => authenticatedPaths.some((authenticatedPath) => @@ -103,7 +103,10 @@ export async function middleware(req: NextRequest) { const rewriteUrl = req.url; let res = NextResponse.rewrite(rewriteUrl); logRequest(req, res); - + console.log({ + pathname: req.nextUrl.pathname, + isAuthenticatedPath: isAuthenticatedPath(req.nextUrl.pathname), + }); if (isAuthenticatedPath(req.nextUrl.pathname)) { await csrfMiddleware(req, res); res = await authenticateRequest(req, res); diff --git a/packages/admin/src/middleware.test.ts b/packages/admin/src/middleware.test.ts index 29a29298c..d1d9917bc 100644 --- a/packages/admin/src/middleware.test.ts +++ b/packages/admin/src/middleware.test.ts @@ -2,6 +2,7 @@ import '@testing-library/jest-dom'; import { ResponseCookie } from 'next/dist/compiled/@edge-runtime/cookies'; // eslint-disable-next-line @next/next/no-server-import-in-page import { NextRequest, NextResponse } from 'next/server'; +import { NextURL } from 'next/dist/server/web/next-url'; import { middleware } from './middleware.page'; import { isAdminSessionValid } from './services/UserService'; import { getLoginUrl } from './utils/general'; @@ -12,15 +13,29 @@ jest.mock('./services/UserService', () => ({ isAdminSessionValid: jest.fn(), })); -jest.mock('next/server', () => ({ - ...jest.requireActual('next/server'), - URLPattern: jest.fn().mockImplementation(() => ({ - test: jest.fn(), - })), -})); +let cookieStore = {}, + headerStore = {}; + +const getMockRequest = (url: string) => + ({ + cookies: { + get: (key) => cookieStore[key], + getAll: () => + Object.entries(cookieStore).map(([name, value]) => ({ name, value })), + set: (name, value) => (cookieStore[name] = { name, value }), + }, + headers: { + get: (key) => headerStore[key], + entries: () => [], + set: (key, value) => (headerStore[key] = value), + }, + url, + nextUrl: new NextURL(url), + method: 'GET', + } as unknown as NextRequest); describe('middleware', () => { - const req = new NextRequest('http://localhost:3000/dashboard'); + const req = getMockRequest('http://localhost:3000/dashboard'); beforeEach(() => { process.env.MAX_COOKIE_AGE = '21600'; @@ -29,6 +44,9 @@ describe('middleware', () => { process.env.V2_LOGIN_URL = 'http://localhost:8082/login'; process.env.FEATURE_ADVERT_BUILDER = 'enabled'; process.env.VALIDATE_USER_ROLES_IN_MIDDLEWARE = 'true'; + jest.clearAllMocks(); + cookieStore = {}; + headerStore = {}; }); it('Should redirect to the logout page when the user is not authorized', async () => { @@ -37,6 +55,7 @@ describe('middleware', () => { const result = await middleware(req); expect(result).toBeInstanceOf(NextResponse); + console.log(result); // basePath from nextjs config does not apply to jest tests, thus no subpaths expect(result.headers.get('Location')).toStrictEqual(expectedUrl); @@ -76,14 +95,14 @@ describe('middleware', () => { const result = await middleware(req); expect(result.headers.get('x-middleware-rewrite')).toStrictEqual( - 'http://localhost:3000/apply/test/destination' + 'http://localhost:3000/dashboard' ); }); }); describe('middleware', () => { - const req = new NextRequest( - 'http://localhost:3000/apply/admin/scheme/1/advert/129744d5-0746-403f-8a5f-a8c9558bc4e3/grantDetails/1' + const req = getMockRequest( + 'http://localhost:3000/scheme/1/advert/129744d5-0746-403f-8a5f-a8c9558bc4e3/grantDetails/1' ); it('Should allow the user to access the advert builder pages if the feature is enabled', async () => { @@ -94,7 +113,7 @@ describe('middleware', () => { expect(result).toBeInstanceOf(NextResponse); expect(result.headers.get('x-middleware-rewrite')).toStrictEqual( - 'http://localhost:3000/apply/admin/scheme/1/advert/129744d5-0746-403f-8a5f-a8c9558bc4e3/grantDetails/1' + 'http://localhost:3000/scheme/1/advert/129744d5-0746-403f-8a5f-a8c9558bc4e3/grantDetails/1' ); }); diff --git a/packages/admin/tsconfig.json b/packages/admin/tsconfig.json index 5b1a062ca..44d964a3e 100644 --- a/packages/admin/tsconfig.json +++ b/packages/admin/tsconfig.json @@ -4,7 +4,7 @@ "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, - "strict": true, + "strict": false, "forceConsistentCasingInFileNames": true, "noEmit": true, "incremental": true, diff --git a/packages/applicant/src/middleware.page.ts b/packages/applicant/src/middleware.page.ts index c1f0294ee..01b18ed97 100644 --- a/packages/applicant/src/middleware.page.ts +++ b/packages/applicant/src/middleware.page.ts @@ -232,7 +232,7 @@ const authenticatedPaths = [ '/sign-in-details', '/api/redirect-from-find', '/mandatory-questions/:path*', -].map((path) => new URLPattern({ pathname: path })); +].map((pathname) => new URLPattern({ pathname })); const isAuthenticatedPath = (pathname: string) => authenticatedPaths.some((authenticatedPath) =>