Admin: Suche, Filter und Archiv in der Matchliste, Fehler direkt in der Karte

This commit is contained in:
mregosar committed 2026-10-29 20:33:14 +01:00
1 parent c50741e49c
commit 7ae3efef60
9 files changed
+206 -12

No files matched your search

+37
View File
@@ -508,3 +508,40 @@ test('Neustart im laufenden Match: Map wird wieder geladen, Server läuft die vo
await close();
}
});
test('Archiv: nur abgeschlossene Matches, eigene Liste, automatisch nach Frist', async () => {
const { app, call, close } = await setup({ adminPassword: 'admin-geheim', archiveAfterDays: 3 });
try {
const token = (await call('POST', '/admin/login', { body: { password: 'admin-geheim' } })).body.token;
const mk = async (a, b) => (await call('POST', '/matches', { body: { teamA: a, teamB: b, mode: 'wingman', format: 'bo1' } })).body;
const open = await mk('Offen A', 'Offen B');
const done = await mk('Fertig A', 'Fertig B');
const old = await mk('Alt A', 'Alt B');
// Laufende Matches lassen sich nicht archivieren
assert.equal((await call('POST', `/admin/matches/${open.id}/archive`, { token })).status, 409);
await call('POST', `/admin/matches/${done.id}/finish`, { token });
assert.equal((await call('POST', `/admin/matches/${done.id}/archive`, { token })).status, 200);
let list = (await call('GET', '/admin/matches', { token })).body;
assert.ok(!list.matches.some((m) => m.id === done.id), 'archiviertes Match fehlt in der normalen Liste');
assert.equal(list.archivedCount, 1);
const archive = (await call('GET', '/admin/matches?archived=1', { token })).body;
assert.deepEqual(archive.matches.map((m) => m.id), [done.id]);
assert.ok(archive.matches[0].archivedAt > 0);
// Zurückholen
await call('POST', `/admin/matches/${done.id}/unarchive`, { token });
list = (await call('GET', '/admin/matches', { token })).body;
assert.ok(list.matches.some((m) => m.id === done.id));
// Automatisch: abgebrochenes Match, älter als 3 Tage
await call('POST', `/admin/matches/${old.id}/cancel`, { token });
assert.equal(app.service.archiveClosed(Date.now() + 2 * 86_400_000), 0, 'nach 2 Tagen noch nicht');
await app.manager.reap(Date.now() + 4 * 86_400_000);
assert.ok(app.service.getMatch(old.id).archived_at > 0, 'nach 4 Tagen archiviert');
assert.ok(app.service.getMatch(done.id).archived_at > 0, 'zurückgeholtes Match wird nach Ablauf der Frist wieder archiviert');
assert.equal(app.service.getMatch(open.id).archived_at, null, 'offene Matches bleiben');
} finally {
await close();
}
});