Files
CASAN/AINative_OKR_CASAN5/backend/test/e2e.test.ts
T
2026-06-30 02:21:39 +09:00

84 lines
3.0 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import fs from 'node:fs/promises';
import path from 'node:path';
import request from 'supertest';
import { createTestApp, loginToken } from './helpers.js';
test('HTTP auth, role filtering, validation, and progress update are real', async () => {
const { app, prisma } = await createTestApp();
try {
await request(app.getHttpServer()).get('/api/v1/objectives').expect(401);
const employeeToken = await loginToken(app, 'employee');
const managerToken = await loginToken(app, 'manager');
const employeeObjectives = await request(app.getHttpServer())
.get('/api/v1/objectives')
.set('Authorization', `Bearer ${employeeToken}`)
.expect(200);
assert.equal(employeeObjectives.body.success, true);
assert.deepEqual(
employeeObjectives.body.data.map((objective: { ownerId: number }) => objective.ownerId),
[3],
);
const managerObjectives = await request(app.getHttpServer())
.get('/api/v1/objectives')
.set('Authorization', `Bearer ${managerToken}`)
.expect(200);
assert.equal(managerObjectives.body.data.length, 3);
await request(app.getHttpServer())
.post('/api/v1/objectives')
.set('Authorization', `Bearer ${employeeToken}`)
.send({ title: '', ownerId: 3, quarter: '2026-Q2' })
.expect(400);
const progressResponse = await request(app.getHttpServer())
.patch('/api/v1/key-results/2/progress')
.set('Authorization', `Bearer ${employeeToken}`)
.send({ progress: 70, comment: 'Updated in e2e test' })
.expect(200);
assert.equal(progressResponse.body.data.progress, 70);
await prisma.keyResult.update({ where: { id: 2 }, data: { progress: 60 } });
await prisma.progressUpdate.deleteMany({ where: { keyResultId: 2, progress: 70 } });
} finally {
await app.close();
}
});
test('golden objective list response does not drift', async () => {
const { app } = await createTestApp();
try {
const token = await loginToken(app, 'manager');
const response = await request(app.getHttpServer())
.get('/api/v1/objectives')
.set('Authorization', `Bearer ${token}`)
.expect(200);
const canonical = JSON.stringify(
{
success: response.body.success,
data: response.body.data.map((objective: { id: number; title: string; quarter: string; status: string; keyResults: { id: number; title: string; progress: number }[] }) => ({
id: objective.id,
title: objective.title,
quarter: objective.quarter,
status: objective.status,
keyResults: objective.keyResults.map((keyResult) => ({
id: keyResult.id,
title: keyResult.title,
progress: keyResult.progress,
})),
})),
meta: response.body.meta,
},
null,
2,
);
const fixture = await fs.readFile(path.resolve('test/golden/objectives.manager.json'), 'utf8');
assert.equal(`${canonical}\n`, fixture);
} finally {
await app.close();
}
});