This commit is contained in:
@@ -206,6 +206,54 @@ it('adds match report invalidation on upgrade without invalidating for score hea
|
||||
expect(upgraded.prepare('SELECT * FROM leaderboard_match_players').all()).toEqual([]);
|
||||
});
|
||||
|
||||
it('upgrades player report invalidation from version 15 for participation clocks and durable identities', async () => {
|
||||
const { db, closeDb } = await import('../../src/lib/server/db/index.js');
|
||||
const { installMetricsMatchRevisions } =
|
||||
await import('../../src/lib/server/reports/revisions.js');
|
||||
const handle = db();
|
||||
handle.exec(
|
||||
'DROP TRIGGER report_metrics_leaderboard_match_players_UPDATE; DROP INDEX idx_leaderboard_players_guid_first_seen'
|
||||
);
|
||||
for (const action of ['INSERT', 'UPDATE', 'DELETE'])
|
||||
handle.exec(`DROP TRIGGER report_metrics_leaderboard_players_${action}`);
|
||||
installMetricsMatchRevisions(handle);
|
||||
handle.pragma('user_version = 15');
|
||||
closeDb();
|
||||
const upgraded = db();
|
||||
const revision = () =>
|
||||
(
|
||||
upgraded
|
||||
.prepare("SELECT revision FROM report_revisions WHERE topic='metrics'")
|
||||
.get() as { revision: number }
|
||||
).revision;
|
||||
upgraded.exec(`INSERT INTO leaderboard_matches
|
||||
(id,server,game,map,map_key,map_name,started_at,last_received_at,last_event,last_fingerprint)
|
||||
VALUES(1,'removed','t5','moon','moon','Moon','2026-10-10T12:00:00.000Z','2026-10-10T12:00:00.000Z','game_start','test');
|
||||
INSERT INTO leaderboard_match_players(match_id,guid,first_seen_at,last_seen_at)
|
||||
VALUES(1,'player','2026-10-10T12:00:00.000Z','2026-10-10T12:00:00.000Z');`);
|
||||
let before = revision();
|
||||
upgraded.exec("UPDATE leaderboard_match_players SET last_seen_at='2026-10-10T13:00:00.000Z'");
|
||||
expect(revision()).toBeGreaterThan(before);
|
||||
before = revision();
|
||||
upgraded.exec(`INSERT INTO leaderboard_players(game,guid,name,first_seen_at,last_seen_at)
|
||||
VALUES('t5','player','Player','2026-10-10T12:00:00.000Z','2026-10-10T13:00:00.000Z')`);
|
||||
expect(revision()).toBeGreaterThan(before);
|
||||
before = revision();
|
||||
upgraded.exec(
|
||||
"UPDATE leaderboard_players SET name='Renamed',last_seen_at='2026-10-10T14:00:00.000Z'"
|
||||
);
|
||||
expect(revision()).toBe(before);
|
||||
upgraded.exec("UPDATE leaderboard_players SET first_seen_at='2026-10-09T12:00:00.000Z'");
|
||||
expect(revision()).toBeGreaterThan(before);
|
||||
expect(
|
||||
upgraded
|
||||
.prepare(
|
||||
"SELECT name FROM sqlite_master WHERE name='idx_leaderboard_players_guid_first_seen'"
|
||||
)
|
||||
.get()
|
||||
).toBeDefined();
|
||||
});
|
||||
|
||||
it('adds provisioning report invalidation at version 14 without invalidating for progress updates', async () => {
|
||||
const { db, closeDb } = await import('../../src/lib/server/db/index.js');
|
||||
const handle = db();
|
||||
|
||||
Reference in New Issue
Block a user