@@ -0,0 +1,30 @@
|
||||
import { describe, it, expect, beforeAll } from 'vitest';
|
||||
import { freshPlayer, loadArtifact, withReadRetry } from './_setup/harness.js';
|
||||
import type { SeedArtifact } from './_setup/types.js';
|
||||
|
||||
describe('e2e-prod: leaderboards', () => {
|
||||
let artifact: SeedArtifact;
|
||||
beforeAll(() => {
|
||||
artifact = loadArtifact();
|
||||
});
|
||||
|
||||
it('submits a score and sees it in the ranking', async () => {
|
||||
const client = await freshPlayer(artifact);
|
||||
const me = (await client.player.reload()).player?.id;
|
||||
expect(me).toBeTruthy();
|
||||
|
||||
const lb = client.leaderboards.findBySlug(artifact.leaderboard.slug);
|
||||
const score = 4242;
|
||||
await lb.submit(score);
|
||||
|
||||
const entries = await withReadRetry(
|
||||
() => lb.list(50),
|
||||
(list) => list.some((e) => e.playerId === me),
|
||||
);
|
||||
const mine = entries.find((e) => e.playerId === me);
|
||||
expect(mine).toBeDefined();
|
||||
// int64 fields (score, rank) serialize as JSON strings via protojson — coerce to number.
|
||||
expect(Number(mine?.score)).toBe(score);
|
||||
expect(Number(mine?.rank ?? 0)).toBeGreaterThanOrEqual(1);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user