72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
const request = require('supertest');
|
|
const { app } = require('../../backend/server');
|
|
const { cleanDb, seedGame, seedSession, seedSessionGame } = require('../helpers/test-utils');
|
|
|
|
describe('GET /api/sessions (regression)', () => {
|
|
beforeEach(() => {
|
|
cleanDb();
|
|
});
|
|
|
|
test('GET /api/sessions/:id returns session object', async () => {
|
|
const session = seedSession({ is_active: 1, notes: 'Test session' });
|
|
|
|
const res = await request(app).get(`/api/sessions/${session.id}`);
|
|
|
|
expect(res.status).toBe(200);
|
|
expect(res.body).toEqual(
|
|
expect.objectContaining({
|
|
id: session.id,
|
|
is_active: 1,
|
|
notes: 'Test session',
|
|
})
|
|
);
|
|
expect(res.body).toHaveProperty('games_played');
|
|
});
|
|
|
|
test('GET /api/sessions/:id returns 404 for nonexistent session', async () => {
|
|
const res = await request(app).get('/api/sessions/99999');
|
|
|
|
expect(res.status).toBe(404);
|
|
expect(res.body.error).toBe('Session not found');
|
|
});
|
|
|
|
test('GET /api/sessions/:id/games returns games with expected shape', async () => {
|
|
const game = seedGame({
|
|
title: 'Quiplash 3',
|
|
pack_name: 'Party Pack 7',
|
|
min_players: 3,
|
|
max_players: 8,
|
|
});
|
|
const session = seedSession({ is_active: 1 });
|
|
seedSessionGame(session.id, game.id, { status: 'playing' });
|
|
|
|
const res = await request(app).get(`/api/sessions/${session.id}/games`);
|
|
|
|
expect(res.status).toBe(200);
|
|
expect(res.body).toHaveLength(1);
|
|
expect(res.body[0]).toEqual(
|
|
expect.objectContaining({
|
|
game_id: game.id,
|
|
session_id: session.id,
|
|
pack_name: 'Party Pack 7',
|
|
title: 'Quiplash 3',
|
|
min_players: 3,
|
|
max_players: 8,
|
|
status: 'playing',
|
|
})
|
|
);
|
|
expect(res.body[0]).toHaveProperty('upvotes');
|
|
expect(res.body[0]).toHaveProperty('downvotes');
|
|
expect(res.body[0]).toHaveProperty('popularity_score');
|
|
});
|
|
|
|
test('GET /api/sessions/:id/games returns empty array for session with no games', async () => {
|
|
const session = seedSession({ is_active: 1 });
|
|
|
|
const res = await request(app).get(`/api/sessions/${session.id}/games`);
|
|
|
|
expect(res.status).toBe(200);
|
|
expect(res.body).toEqual([]);
|
|
});
|
|
});
|