From c4bb0de7d426055b3634d8e4dace5cface7f2f0f Mon Sep 17 00:00:00 2001 From: "IceHe.xyz" Date: Wed, 25 May 2022 16:54:21 +0800 Subject: [PATCH] feat(core): get /dashboard/users/total (#936) * feat(core): get /dashboard/users/total * test(core): get /dashboard/users/total --- packages/core/src/routes/dashboard.test.ts | 30 ++++++++++++++++++++++ packages/core/src/routes/dashboard.ts | 12 +++++++++ packages/core/src/routes/init.ts | 2 ++ 3 files changed, 44 insertions(+) create mode 100644 packages/core/src/routes/dashboard.test.ts create mode 100644 packages/core/src/routes/dashboard.ts diff --git a/packages/core/src/routes/dashboard.test.ts b/packages/core/src/routes/dashboard.test.ts new file mode 100644 index 000000000..636689515 --- /dev/null +++ b/packages/core/src/routes/dashboard.test.ts @@ -0,0 +1,30 @@ +import dashboardRoutes from '@/routes/dashboard'; +import { createRequester } from '@/utils/test-utils'; + +const totalUserCount = 1000; +const countUsers = jest.fn(async () => ({ count: totalUserCount })); + +jest.mock('@/queries/user', () => ({ + countUsers: async () => countUsers(), +})); + +describe('dashboardRoutes', () => { + const logRequest = createRequester({ authedRoutes: dashboardRoutes }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('GET /dashboard/users/total', () => { + it('should call countUsers with no parameters', async () => { + await logRequest.get('/dashboard/users/total'); + expect(countUsers).toHaveBeenCalledWith(); + }); + + it('/dashboard/users/total should return correct response', async () => { + const response = await logRequest.get('/dashboard/users/total'); + expect(response.status).toEqual(200); + expect(response.body).toEqual({ totalUserCount }); + }); + }); +}); diff --git a/packages/core/src/routes/dashboard.ts b/packages/core/src/routes/dashboard.ts new file mode 100644 index 000000000..82fbf35ae --- /dev/null +++ b/packages/core/src/routes/dashboard.ts @@ -0,0 +1,12 @@ +import { countUsers } from '@/queries/user'; + +import { AuthedRouter } from './types'; + +export default function dashboardRoutes(router: T) { + router.get('/dashboard/users/total', async (ctx, next) => { + const { count: totalUserCount } = await countUsers(); + ctx.body = { totalUserCount }; + + return next(); + }); +} diff --git a/packages/core/src/routes/init.ts b/packages/core/src/routes/init.ts index 9ecf8cd47..f63dacd26 100644 --- a/packages/core/src/routes/init.ts +++ b/packages/core/src/routes/init.ts @@ -7,6 +7,7 @@ import koaAuth from '@/middleware/koa-auth'; import koaLogSession from '@/middleware/koa-log-session'; import applicationRoutes from '@/routes/application'; import connectorRoutes from '@/routes/connector'; +import dashboardRoutes from '@/routes/dashboard'; import resourceRoutes from '@/routes/resource'; import sessionRoutes from '@/routes/session'; import settingRoutes from '@/routes/setting'; @@ -40,6 +41,7 @@ const createRouters = (provider: Provider) => { adminUserRoutes(authedRouter); logRoutes(authedRouter); roleRoutes(authedRouter); + dashboardRoutes(authedRouter); return [sessionRouter, anonymousRouter, authedRouter]; };