From 67e53eb38feb6c640acb7463bec84935cf368926 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 16 Feb 2024 14:13:10 +0100 Subject: [PATCH] backend-test-utils: added header utils to mockCredentials Signed-off-by: Patrik Oldsberg --- packages/backend-test-utils/api-report.md | 4 +++- .../src/next/services/mockCredentials.ts | 18 ++++++++++++++++++ .../src/next/wiring/TestBackend.test.ts | 9 +++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index 05074c7f60..5c22cfb149 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -53,6 +53,7 @@ export namespace mockCredentials { subject?: string, ): BackstageCredentials; export namespace service { + export function header(payload?: TokenPayload): string; export function token(payload?: TokenPayload): string; export type TokenPayload = { subject?: string; @@ -63,9 +64,10 @@ export namespace mockCredentials { userEntityRef?: string, ): BackstageCredentials; export namespace user { + export function header(payload?: TokenPayload): string; export function token(payload?: TokenPayload): string; export type TokenPayload = { - userEntityRef: string; + userEntityRef?: string; }; } } diff --git a/packages/backend-test-utils/src/next/services/mockCredentials.ts b/packages/backend-test-utils/src/next/services/mockCredentials.ts index 2e7a4933a6..7eda645150 100644 --- a/packages/backend-test-utils/src/next/services/mockCredentials.ts +++ b/packages/backend-test-utils/src/next/services/mockCredentials.ts @@ -78,6 +78,15 @@ export namespace mockCredentials { } return MOCK_USER_TOKEN; } + + /** + * Returns an authorization header with a mocked user token. If a payload is + * provided it will be encoded into the token and forwarded to the + * credentials object when authenticated by the mock auth service. + */ + export function header(payload?: TokenPayload): string { + return `Bearer ${token(payload)}`; + } } /** @@ -121,5 +130,14 @@ export namespace mockCredentials { } return MOCK_SERVICE_TOKEN; } + + /** + * Returns an authorization header with a mocked service token. If a + * payload is provided it will be encoded into the token and forwarded to + * the credentials object when authenticated by the mock auth service. + */ + export function header(payload?: TokenPayload): string { + return `Bearer ${token(payload)}`; + } } } diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts index 968237f11d..a4b74b5ffa 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts @@ -26,6 +26,7 @@ import { Router } from 'express'; import request from 'supertest'; import { startTestBackend } from './TestBackend'; +import { mockCredentials } from '../services'; // This bit makes sure that test backends are cleaned up properly let globalTestBackendHasBeenStopped = false; @@ -199,9 +200,11 @@ describe('TestBackend', () => { scheduler: coreServices.scheduler, tokenManager: coreServices.tokenManager, urlReader: coreServices.urlReader, + auth: coreServices.auth, + httpAuth: coreServices.httpAuth, }, async init(deps) { - expect(Object.keys(deps)).toHaveLength(15); + expect(Object.keys(deps)).toHaveLength(17); expect(Object.values(deps)).not.toContain(undefined); }, }); @@ -232,7 +235,9 @@ describe('TestBackend', () => { const { server } = await startTestBackend({ features: [testPlugin()] }); - const res = await request(server).get('/api/test/ping-me'); + const res = await request(server) + .get('/api/test/ping-me') + .set('authorization', mockCredentials.user.header()); expect(res.status).toEqual(200); expect(res.body).toEqual({ message: 'pong' }); });