84 lines
3.0 KiB
TypeScript
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();
|
|
}
|
|
});
|