Files
jackboxpartypack-gamepicker/tests/api/session-archive.test.js
2026-03-23 01:42:51 -04:00

96 lines
3.2 KiB
JavaScript

const request = require('supertest');
const { app } = require('../../backend/server');
const { cleanDb, getAuthHeader, seedSession } = require('../helpers/test-utils');
describe('GET /api/sessions — filter and limit', () => {
beforeEach(() => {
cleanDb();
});
test('default filter excludes archived sessions', async () => {
seedSession({ is_active: 0, notes: null });
const archived = seedSession({ is_active: 0, notes: null });
require('../helpers/test-utils').db.prepare(
'UPDATE sessions SET archived = 1 WHERE id = ?'
).run(archived.id);
const res = await request(app).get('/api/sessions');
expect(res.status).toBe(200);
expect(res.body).toHaveLength(1);
expect(res.body[0].archived).toBe(0);
});
test('filter=archived returns only archived sessions', async () => {
seedSession({ is_active: 0, notes: null });
const archived = seedSession({ is_active: 0, notes: null });
require('../helpers/test-utils').db.prepare(
'UPDATE sessions SET archived = 1 WHERE id = ?'
).run(archived.id);
const res = await request(app).get('/api/sessions?filter=archived');
expect(res.status).toBe(200);
expect(res.body).toHaveLength(1);
expect(res.body[0].archived).toBe(1);
});
test('filter=all returns all sessions', async () => {
seedSession({ is_active: 0, notes: null });
const archived = seedSession({ is_active: 0, notes: null });
require('../helpers/test-utils').db.prepare(
'UPDATE sessions SET archived = 1 WHERE id = ?'
).run(archived.id);
const res = await request(app).get('/api/sessions?filter=all');
expect(res.status).toBe(200);
expect(res.body).toHaveLength(2);
});
test('limit restricts number of sessions returned', async () => {
for (let i = 0; i < 10; i++) {
seedSession({ is_active: 0, notes: null });
}
const res = await request(app).get('/api/sessions?filter=all&limit=3');
expect(res.status).toBe(200);
expect(res.body).toHaveLength(3);
});
test('limit=all returns all sessions', async () => {
for (let i = 0; i < 10; i++) {
seedSession({ is_active: 0, notes: null });
}
const res = await request(app).get('/api/sessions?filter=all&limit=all');
expect(res.status).toBe(200);
expect(res.body).toHaveLength(10);
});
test('X-Total-Count header reflects total matching sessions before limit', async () => {
for (let i = 0; i < 10; i++) {
seedSession({ is_active: 0, notes: null });
}
const res = await request(app).get('/api/sessions?filter=all&limit=3');
expect(res.headers['x-total-count']).toBe('10');
expect(res.body).toHaveLength(3);
});
test('response includes archived field on each session', async () => {
seedSession({ is_active: 0, notes: null });
const res = await request(app).get('/api/sessions?filter=all');
expect(res.status).toBe(200);
expect(res.body[0]).toHaveProperty('archived', 0);
});
test('default limit is all when no limit param provided', async () => {
for (let i = 0; i < 8; i++) {
seedSession({ is_active: 0, notes: null });
}
const res = await request(app).get('/api/sessions?filter=all');
expect(res.status).toBe(200);
expect(res.body).toHaveLength(8);
});
});