From e8ed876878c2a2e77de407a6cccabbea1b5dca95 Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Fri, 2 Jun 2023 23:35:17 +0800 Subject: [PATCH] test: add default resource integration test --- packages/core/src/__mocks__/index.ts | 3 +++ packages/core/src/routes/resource.test.ts | 3 ++- .../integration-tests/src/api/resource.ts | 5 +++++ .../src/tests/api/resource.test.ts | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/core/src/__mocks__/index.ts b/packages/core/src/__mocks__/index.ts index 26c207aba..c2e729995 100644 --- a/packages/core/src/__mocks__/index.ts +++ b/packages/core/src/__mocks__/index.ts @@ -40,6 +40,7 @@ export const mockResource: Resource = { name: 'management api', indicator: 'logto.dev/api', accessTokenTtl: 3600, + isDefault: false, }; export const mockResource2: Resource = { @@ -48,6 +49,7 @@ export const mockResource2: Resource = { name: 'management api', indicator: 'logto.dev/api', accessTokenTtl: 3600, + isDefault: false, }; export const mockResource3: Resource = { @@ -56,6 +58,7 @@ export const mockResource3: Resource = { name: 'management api', indicator: 'logto.dev/api', accessTokenTtl: 3600, + isDefault: false, }; export const mockScope: Scope = { diff --git a/packages/core/src/routes/resource.test.ts b/packages/core/src/routes/resource.test.ts index e3ae4dc64..ad9cc54cf 100644 --- a/packages/core/src/routes/resource.test.ts +++ b/packages/core/src/routes/resource.test.ts @@ -101,6 +101,7 @@ describe('resource routes', () => { id: 'randomId', name, indicator, + isDefault: false, accessTokenTtl, scopes: [], }); @@ -157,7 +158,7 @@ describe('resource routes', () => { }); }); - it('PATCH /resources/:id should throw with invalid propreties', async () => { + it('PATCH /resources/:id should throw with invalid properties', async () => { const response = await resourceRequest.patch('/resources/foo').send({ name: 12 }); expect(response.status).toEqual(400); }); diff --git a/packages/integration-tests/src/api/resource.ts b/packages/integration-tests/src/api/resource.ts index 4aaa44b25..fd47632d6 100644 --- a/packages/integration-tests/src/api/resource.ts +++ b/packages/integration-tests/src/api/resource.ts @@ -34,3 +34,8 @@ export const updateResource = async ( export const deleteResource = async (resourceId: string) => authedAdminApi.delete(`resources/${resourceId}`); + +export const setDefaultResource = async (resourceId: string, isDefault = true) => + authedAdminApi + .patch(`resources/${resourceId}/is-default`, { json: { isDefault } }) + .json(); diff --git a/packages/integration-tests/src/tests/api/resource.test.ts b/packages/integration-tests/src/tests/api/resource.test.ts index 3fc4f57e8..572d6cee1 100644 --- a/packages/integration-tests/src/tests/api/resource.test.ts +++ b/packages/integration-tests/src/tests/api/resource.test.ts @@ -7,6 +7,7 @@ import { getResources, updateResource, deleteResource, + setDefaultResource, } from '#src/api/index.js'; import { createResponseWithCode } from '#src/helpers/admin-tenant.js'; import { generateResourceIndicator, generateResourceName } from '#src/utils.js'; @@ -124,4 +125,22 @@ describe('admin console api resources', () => { const response = await deleteResource('dummy_id').catch((error: unknown) => error); expect(response instanceof HTTPError && response.response.statusCode === 404).toBe(true); }); + + it('be able to set only one default api resource', async () => { + const [resource1, resource2] = await Promise.all([ + createResource(generateResourceName(), generateResourceIndicator()), + createResource(generateResourceName(), generateResourceIndicator()), + ]); + + await setDefaultResource(resource1.id); + await setDefaultResource(resource2.id); + + const resources = await getResources(); + const defaultData = resources.filter(({ isDefault }) => isDefault); + + expect(defaultData).toHaveLength(1); + expect(defaultData[0]?.id).toBe(resource2.id); + + await Promise.all([deleteResource(resource1.id), deleteResource(resource2.id)]); + }); });