From 671bf72ed6690e852538ff302fced84310d256f2 Mon Sep 17 00:00:00 2001 From: Mike Lewis Date: Mon, 22 Nov 2021 12:02:49 +0000 Subject: [PATCH] permission-backend: fix initial test suite Signed-off-by: Mike Lewis --- plugins/permission-backend/api-report.md | 3 -- .../src/service/router.test.ts | 34 ++++++++++++++----- .../permission-backend/src/service/router.ts | 11 +++--- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/plugins/permission-backend/api-report.md b/plugins/permission-backend/api-report.md index 66e0dabd3b..1450382881 100644 --- a/plugins/permission-backend/api-report.md +++ b/plugins/permission-backend/api-report.md @@ -5,7 +5,6 @@ ```ts import { Config } from '@backstage/config'; import express from 'express'; -import { IdentityClient } from '@backstage/plugin-auth-backend'; import { Logger as Logger_2 } from 'winston'; import { PermissionPolicy } from '@backstage/plugin-permission-node'; @@ -21,8 +20,6 @@ export interface RouterOptions { // (undocumented) config: Config; // (undocumented) - identity?: IdentityClient; - // (undocumented) logger: Logger_2; // (undocumented) policy: PermissionPolicy; diff --git a/plugins/permission-backend/src/service/router.test.ts b/plugins/permission-backend/src/service/router.test.ts index f0fc889e8b..73b816f752 100644 --- a/plugins/permission-backend/src/service/router.test.ts +++ b/plugins/permission-backend/src/service/router.test.ts @@ -18,7 +18,6 @@ import express from 'express'; import request from 'supertest'; import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; -import { IdentityClient } from '@backstage/plugin-auth-backend'; import { AuthorizeResult, Permission, @@ -27,9 +26,26 @@ import { PermissionPolicy } from '@backstage/plugin-permission-node'; import { createRouter } from './router'; -const identityApi: Partial = { - authenticate: jest.fn().mockImplementation(_ => ({ id: 'test-user' })), -}; +jest.mock('@backstage/plugin-auth-backend', () => { + class MockIdentityClient { + authenticate = jest.fn(token => + Promise.resolve( + token + ? { + id: 'test-user', + token, + } + : undefined, + ), + ); + + static getBearerToken = jest.fn(authHeader => + authHeader ? `` : undefined, + ); + } + + return { IdentityClient: MockIdentityClient }; +}); const policy: PermissionPolicy = { handle: jest.fn().mockImplementation((_req, identity) => { @@ -58,8 +74,8 @@ describe('createRouter', () => { }, }), policy, - identity: identityApi as IdentityClient, }); + app = express().use(router); }); @@ -86,18 +102,20 @@ describe('createRouter', () => { }); it('resolves identity from the Authorization header', async () => { - const token = 'token'; + const token = 'test-token'; const response = await request(app) .post('/authorize') .auth(token, { type: 'bearer' }) .send([{ id: 123, permission }]); expect(response.status).toEqual(200); - expect(identityApi.authenticate).toHaveBeenCalledWith('token'); expect(policy.handle).toHaveBeenCalledWith( { permission }, - { id: 'test-user' }, + { id: 'test-user', token: '' }, ); + expect(response.body).toEqual([ + { id: 123, result: AuthorizeResult.ALLOW }, + ]); }); }); }); diff --git a/plugins/permission-backend/src/service/router.ts b/plugins/permission-backend/src/service/router.ts index 2019d13d2a..e52f3d14ee 100644 --- a/plugins/permission-backend/src/service/router.ts +++ b/plugins/permission-backend/src/service/router.ts @@ -46,7 +46,6 @@ export interface RouterOptions { logger: Logger; config: Config; policy: PermissionPolicy; - identity?: IdentityClient; } // TODO(permission-backend): probably move this to a separate client @@ -131,12 +130,10 @@ export async function createRouter( ): Promise { const { config, policy } = options; const discovery = SingleHostDiscovery.fromConfig(config); - const identity = - options.identity ?? - new IdentityClient({ - discovery, - issuer: await discovery.getExternalBaseUrl('auth'), - }); + const identity = new IdentityClient({ + discovery, + issuer: await discovery.getExternalBaseUrl('auth'), + }); const router = Router(); router.use(express.json());