47 lines
1.9 KiB
TypeScript
47 lines
1.9 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { createApp } from '../src/app';
|
|
import { authToken, bearer, seedActivity } from './helpers';
|
|
|
|
describe('admin session views', () => {
|
|
it('401s without a token', async () => {
|
|
const app = createApp();
|
|
expect((await app.request('/api/admin/sessions')).status).toBe(401);
|
|
expect((await app.request('/api/admin/sessions/active')).status).toBe(401);
|
|
});
|
|
|
|
it('403s for a worker', async () => {
|
|
const app = createApp();
|
|
const token = await authToken(app, 'admin-view-worker@example.com'); // worker
|
|
expect((await app.request('/api/admin/sessions', { headers: bearer(token) })).status).toBe(403);
|
|
});
|
|
|
|
it("returns ALL users' sessions for an admin, with user info", async () => {
|
|
const app = createApp();
|
|
const adminTok = await authToken(app, 'admin-view-admin@example.com', 'admin');
|
|
const workerTok = await authToken(app, 'admin-view-w2@example.com'); // worker
|
|
const activityId = await seedActivity('Frezen');
|
|
|
|
// Worker starts a session.
|
|
const started = await (
|
|
await app.request('/api/sessions/start', {
|
|
method: 'POST',
|
|
headers: bearer(workerTok),
|
|
body: JSON.stringify({ activity_id: activityId, insole_type: 'Kurk', pair_count: 2 }),
|
|
})
|
|
).json();
|
|
|
|
const res = await app.request('/api/admin/sessions', { headers: bearer(adminTok) });
|
|
expect(res.status).toBe(200);
|
|
const body = await res.json();
|
|
const found = body.find((s: { id: number }) => s.id === started.id);
|
|
expect(found).toBeTruthy();
|
|
expect(found.user_email).toBe('admin-view-w2@example.com');
|
|
expect(found.activity_name).toBe('Frezen');
|
|
|
|
const active = await app.request('/api/admin/sessions/active', { headers: bearer(adminTok) });
|
|
expect(active.status).toBe(200);
|
|
const activeBody = await active.json();
|
|
expect(activeBody.some((s: { id: number }) => s.id === started.id)).toBe(true);
|
|
});
|
|
});
|