Fix telemetry delivery and report loaded island names; record Workshop 0.0.130
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-10-30 17:13:11 +01:00
parent 08e5cbf5ea
commit 3ec882dc4e
8 changed files with 114 additions and 17 deletions
@@ -92,6 +92,24 @@ test('concurrent retries store once; reordered JSON is equivalent; conflicting c
assert.equal((await ingest({...e, serverId: otherServer}, otherToken)).status, 201);
});
test('published fractional-duration defeats are accepted, counted and retry idempotently', async () => {
const terrain = '{1234567890ABCDEF}Worlds/FractionalDuration.ent';
const e = event({terrain, outcome: 'defeat', phase: 6, players: [], elapsedSeconds: 261.593994140625});
const first = await ingest(e);
assert.equal(first.status, 201, await first.clone().text());
assert.equal((await first.json()).accepted, true);
assert.equal((await detail(e)).elapsedSeconds, 261);
assert.equal((await ingest(e)).status, 200);
assert.equal((await ingest({...e, elapsedSeconds: 261})).status, 200);
const summary = await (await call(`/api/summary?terrain=${encodeURIComponent(terrain)}`)).json();
assert.equal(summary.allServers.losses, 1);
assert.equal(summary.allServers.completed, 1);
for (const elapsedSeconds of [-0.1, 2147483647.1, '261.594', null]) {
assert.equal((await ingest(event({elapsedSeconds}))).status, 400);
}
assert.equal((await ingest(event({connectedPlayers: 0.5}))).status, 400);
});
test('out-of-order snapshots and second terminal reports cannot reopen or double count a mission', async () => {
const e = event({players: []});
const heartbeat = {...e, type: 'heartbeat', phase: 4, outcome: '', elapsedSeconds: 100};