63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
const request = require('supertest');
|
|
const { app } = require('../../backend/server');
|
|
const { cleanDb, seedGame } = require('../helpers/test-utils');
|
|
const db = require('../../backend/database');
|
|
|
|
describe('GET /api/games (regression)', () => {
|
|
beforeEach(() => {
|
|
cleanDb();
|
|
});
|
|
|
|
test('returns games with vote fields', async () => {
|
|
seedGame({
|
|
title: 'Quiplash 3',
|
|
upvotes: 10,
|
|
downvotes: 3,
|
|
popularity_score: 7,
|
|
});
|
|
|
|
const res = await request(app).get('/api/games');
|
|
|
|
expect(res.status).toBe(200);
|
|
expect(res.body).toHaveLength(1);
|
|
expect(res.body[0]).toEqual(
|
|
expect.objectContaining({
|
|
title: 'Quiplash 3',
|
|
upvotes: 10,
|
|
downvotes: 3,
|
|
popularity_score: 7,
|
|
})
|
|
);
|
|
});
|
|
|
|
test('GET /api/games/:id returns vote fields', async () => {
|
|
const game = seedGame({
|
|
title: 'Drawful 2',
|
|
upvotes: 5,
|
|
downvotes: 2,
|
|
popularity_score: 3,
|
|
});
|
|
|
|
const res = await request(app).get(`/api/games/${game.id}`);
|
|
|
|
expect(res.status).toBe(200);
|
|
expect(res.body.upvotes).toBe(5);
|
|
expect(res.body.downvotes).toBe(2);
|
|
expect(res.body.popularity_score).toBe(3);
|
|
});
|
|
|
|
test('vote aggregates update correctly after recording votes', async () => {
|
|
const game = seedGame({ title: 'Fibbage 4' });
|
|
|
|
db.prepare('UPDATE games SET upvotes = upvotes + 1, popularity_score = popularity_score + 1 WHERE id = ?').run(game.id);
|
|
db.prepare('UPDATE games SET upvotes = upvotes + 1, popularity_score = popularity_score + 1 WHERE id = ?').run(game.id);
|
|
db.prepare('UPDATE games SET downvotes = downvotes + 1, popularity_score = popularity_score - 1 WHERE id = ?').run(game.id);
|
|
|
|
const res = await request(app).get(`/api/games/${game.id}`);
|
|
|
|
expect(res.body.upvotes).toBe(2);
|
|
expect(res.body.downvotes).toBe(1);
|
|
expect(res.body.popularity_score).toBe(1);
|
|
});
|
|
});
|