From 3241d14a050f8df298a2eb4bd8200be288531ae2 Mon Sep 17 00:00:00 2001 From: Mateusz Kwasniewski Date: Thu, 21 Mar 2024 12:09:13 +0100 Subject: [PATCH] test: project insights read model test (#6657) --- .../project-insights-read-model.test.ts | 66 +++++++++++++++++++ .../project-insights-read-model.ts | 2 + 2 files changed, 68 insertions(+) create mode 100644 src/lib/features/project-insights/project-insights-read-model.test.ts diff --git a/src/lib/features/project-insights/project-insights-read-model.test.ts b/src/lib/features/project-insights/project-insights-read-model.test.ts new file mode 100644 index 00000000000..ff8fdd20b19 --- /dev/null +++ b/src/lib/features/project-insights/project-insights-read-model.test.ts @@ -0,0 +1,66 @@ +import dbInit, { type ITestDb } from '../../../test/e2e/helpers/database-init'; +import getLogger from '../../../test/fixtures/no-logger'; +import type { IUser } from '../../types'; +import type { IProjectInsightsReadModel } from './project-insights-read-model-type'; +import { + type ChangeRequestDBState, + ProjectInsightsReadModel, +} from './project-insights-read-model'; + +let projectInsightsReadModel: IProjectInsightsReadModel; +let user: IUser; +let db: ITestDb; +const projectId = 'default'; + +beforeAll(async () => { + db = await dbInit('project_insights_read_model', getLogger); + projectInsightsReadModel = new ProjectInsightsReadModel(db.rawDatabase); + user = await db.stores.userStore.insert({ + username: 'test', + }); +}); + +afterAll(async () => { + await db.destroy(); +}); + +beforeEach(async () => { + await db.rawDatabase.table('change_requests').delete(); +}); + +const createChangeRequest = (id: number, state: string) => + db.rawDatabase.table('change_requests').insert({ + id, + state, + environment: 'default', + project: projectId, + created_by: user.id, + }); + +test('can read change request status counts', async () => { + const states: ChangeRequestDBState[] = [ + 'Approved', + 'Approved', + 'Applied', + 'Rejected', + 'Scheduled', + 'In review', + 'Draft', + 'Cancelled', + ]; + await Promise.all( + states.map((state, id) => createChangeRequest(id, state)), + ); + + const changeRequests = + await projectInsightsReadModel.getChangeRequests(projectId); + + expect(changeRequests).toEqual({ + total: 6, + approved: 2, + applied: 1, + rejected: 1, + reviewRequired: 1, + scheduled: 1, + }); +}); diff --git a/src/lib/features/project-insights/project-insights-read-model.ts b/src/lib/features/project-insights/project-insights-read-model.ts index 122ce20c7c4..e3fbf8e3a33 100644 --- a/src/lib/features/project-insights/project-insights-read-model.ts +++ b/src/lib/features/project-insights/project-insights-read-model.ts @@ -5,6 +5,8 @@ import type { import type { Db } from '../../db/db'; export type ChangeRequestDBState = + | 'Draft' + | 'Cancelled' | 'Approved' | 'In review' | 'Applied'