test: add jest/supertest infrastructure and make server.js testable
Made-with: Cursor
This commit is contained in:
81
tests/helpers/test-utils.js
Normal file
81
tests/helpers/test-utils.js
Normal file
@@ -0,0 +1,81 @@
|
||||
const jwt = require('jsonwebtoken');
|
||||
const db = require('../../backend/database');
|
||||
|
||||
function getAuthToken() {
|
||||
return jwt.sign({ role: 'admin' }, process.env.JWT_SECRET, { expiresIn: '1h' });
|
||||
}
|
||||
|
||||
function getAuthHeader() {
|
||||
return `Bearer ${getAuthToken()}`;
|
||||
}
|
||||
|
||||
function cleanDb() {
|
||||
db.exec('DELETE FROM live_votes');
|
||||
db.exec('DELETE FROM chat_logs');
|
||||
db.exec('DELETE FROM session_games');
|
||||
db.exec('DELETE FROM sessions');
|
||||
db.exec('DELETE FROM webhook_logs');
|
||||
db.exec('DELETE FROM webhooks');
|
||||
db.exec('DELETE FROM games');
|
||||
db.exec('DELETE FROM packs');
|
||||
}
|
||||
|
||||
function seedGame(overrides = {}) {
|
||||
const defaults = {
|
||||
pack_name: 'Party Pack 7',
|
||||
title: 'Quiplash 3',
|
||||
min_players: 3,
|
||||
max_players: 8,
|
||||
length_minutes: 15,
|
||||
has_audience: 1,
|
||||
family_friendly: 1,
|
||||
game_type: 'Writing',
|
||||
enabled: 1,
|
||||
upvotes: 0,
|
||||
downvotes: 0,
|
||||
popularity_score: 0,
|
||||
};
|
||||
const g = { ...defaults, ...overrides };
|
||||
const result = db.prepare(`
|
||||
INSERT INTO games (pack_name, title, min_players, max_players, length_minutes, has_audience, family_friendly, game_type, enabled, upvotes, downvotes, popularity_score)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`).run(g.pack_name, g.title, g.min_players, g.max_players, g.length_minutes, g.has_audience, g.family_friendly, g.game_type, g.enabled, g.upvotes, g.downvotes, g.popularity_score);
|
||||
return db.prepare('SELECT * FROM games WHERE id = ?').get(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
function seedSession(overrides = {}) {
|
||||
const defaults = { is_active: 1, notes: null };
|
||||
const s = { ...defaults, ...overrides };
|
||||
const result = db.prepare('INSERT INTO sessions (is_active, notes) VALUES (?, ?)').run(s.is_active, s.notes);
|
||||
return db.prepare('SELECT * FROM sessions WHERE id = ?').get(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
function seedSessionGame(sessionId, gameId, overrides = {}) {
|
||||
const defaults = { status: 'playing', played_at: new Date().toISOString() };
|
||||
const sg = { ...defaults, ...overrides };
|
||||
const result = db.prepare(`
|
||||
INSERT INTO session_games (session_id, game_id, status, played_at)
|
||||
VALUES (?, ?, ?, ?)
|
||||
`).run(sessionId, gameId, sg.status, sg.played_at);
|
||||
return db.prepare('SELECT * FROM session_games WHERE id = ?').get(result.lastInsertRowid);
|
||||
}
|
||||
|
||||
function seedVote(sessionId, gameId, username, voteType, timestamp) {
|
||||
const vt = voteType === 'up' ? 1 : -1;
|
||||
const ts = timestamp || new Date().toISOString();
|
||||
db.prepare(`
|
||||
INSERT INTO live_votes (session_id, game_id, username, vote_type, timestamp)
|
||||
VALUES (?, ?, ?, ?, ?)
|
||||
`).run(sessionId, gameId, username, vt, ts);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getAuthToken,
|
||||
getAuthHeader,
|
||||
cleanDb,
|
||||
seedGame,
|
||||
seedSession,
|
||||
seedSessionGame,
|
||||
seedVote,
|
||||
db,
|
||||
};
|
||||
Reference in New Issue
Block a user