From c93200f4310704ae5f9d2fdadc04cb0c04b0e527 Mon Sep 17 00:00:00 2001 From: Darcy Ye Date: Thu, 24 Nov 2022 17:35:39 +0800 Subject: [PATCH] feat: add GET /connector-factories (#2480) --- packages/core/src/__mocks__/connector.ts | 8 +++++++- packages/core/src/routes/connector.test.ts | 23 ++++++++++++++++++++++ packages/core/src/routes/connector.ts | 7 +++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/core/src/__mocks__/connector.ts b/packages/core/src/__mocks__/connector.ts index d31bc94d5..703bd0f60 100644 --- a/packages/core/src/__mocks__/connector.ts +++ b/packages/core/src/__mocks__/connector.ts @@ -23,7 +23,13 @@ import { mockMetadata6, } from './connector-base-data.js'; -export { mockMetadata } from './connector-base-data.js'; +export { + mockMetadata, + mockMetadata0, + mockMetadata1, + mockMetadata2, + mockMetadata3, +} from './connector-base-data.js'; export const mockConnector: Connector = { id: 'id', diff --git a/packages/core/src/routes/connector.test.ts b/packages/core/src/routes/connector.test.ts index b9a05497d..16d73aa3c 100644 --- a/packages/core/src/routes/connector.test.ts +++ b/packages/core/src/routes/connector.test.ts @@ -5,6 +5,10 @@ import { any } from 'zod'; import { mockMetadata, + mockMetadata0, + mockMetadata1, + mockMetadata2, + mockMetadata3, mockConnector, mockConnectorFactory, mockLogtoConnectorList, @@ -81,6 +85,25 @@ describe('connector route', () => { }); }); + describe('GET /connector-factories', () => { + it('show all connector factories', async () => { + (loadConnectorFactoriesPlaceHolder as jest.Mock).mockResolvedValueOnce([ + { ...mockConnectorFactory, metadata: mockMetadata0, type: ConnectorType.Sms }, + { ...mockConnectorFactory, metadata: mockMetadata1, type: ConnectorType.Social }, + { ...mockConnectorFactory, metadata: mockMetadata2, type: ConnectorType.Email }, + { ...mockConnectorFactory, metadata: mockMetadata3, type: ConnectorType.Social }, + ]); + const response = await connectorRequest.get('/connector-factories').send({}); + expect(response.body).toMatchObject([ + { ...mockMetadata0, type: ConnectorType.Sms }, + { ...mockMetadata1, type: ConnectorType.Social }, + { ...mockMetadata2, type: ConnectorType.Email }, + { ...mockMetadata3, type: ConnectorType.Social }, + ]); + expect(response).toHaveProperty('statusCode', 200); + }); + }); + describe('GET /connectors/:id', () => { afterEach(() => { jest.clearAllMocks(); diff --git a/packages/core/src/routes/connector.ts b/packages/core/src/routes/connector.ts index 8847d3d88..05f94488e 100644 --- a/packages/core/src/routes/connector.ts +++ b/packages/core/src/routes/connector.ts @@ -71,6 +71,13 @@ export default function connectorRoutes(router: T) { } ); + router.get('/connector-factories', async (ctx, next) => { + const connectorFactories = await loadConnectorFactories(); + ctx.body = connectorFactories.map(({ metadata, type }) => ({ type, ...metadata })); + + return next(); + }); + router.get( '/connectors/:id', koaGuard({ params: object({ id: string().min(1) }) }),