Invalidate leaderboard reports only for visible data changes
This commit is contained in:
@@ -34,6 +34,31 @@ async function matches() {
|
||||
}>;
|
||||
}
|
||||
|
||||
it('keeps report revisions stable during a match and invalidates completed data and renamed players', async () => {
|
||||
const { db, closeDb } = await import('../../src/lib/server/db/index.js');
|
||||
const revision = () => (db().prepare("SELECT revision FROM report_revisions WHERE topic='leaderboard'").get() as { revision: number }).revision;
|
||||
await report('game_start');
|
||||
const started = revision();
|
||||
for (let round = 1; round <= 30; round++) {
|
||||
await report('round_change', round, [player(undefined, { kills: round * 10 })]);
|
||||
await report('heartbeat', round);
|
||||
}
|
||||
expect(revision()).toBe(started);
|
||||
await report('game_end', 30);
|
||||
expect(revision()).toBeGreaterThan(started);
|
||||
const completed = revision();
|
||||
db().prepare('UPDATE leaderboard_players SET last_seen_at=?').run('2026-10-06T12:00:00.000Z');
|
||||
expect(revision()).toBe(completed);
|
||||
db().prepare("UPDATE leaderboard_players SET name='Renamed'").run();
|
||||
expect(revision()).toBe(completed + 1);
|
||||
db().prepare('UPDATE leaderboard_match_players SET kills=kills+1').run();
|
||||
expect(revision()).toBe(completed + 2);
|
||||
closeDb();
|
||||
const reopened = revision();
|
||||
db().prepare('DELETE FROM leaderboard_matches').run();
|
||||
expect(revision()).toBeGreaterThan(reopened);
|
||||
});
|
||||
|
||||
it('publishes round 2 or higher games only after game end, preserving early stats and excluding round 1 departures', async () => {
|
||||
const { getLeaderboard } = await import('../../src/lib/server/fleet/leaderboard.js');
|
||||
const { getPlayerProfile } = await import('../../src/lib/server/fleet/player-profile.js');
|
||||
|
||||
Reference in New Issue
Block a user