Files
ssessesse-ki-battle/tests/emotes.test.ts
T

28 lines
1.2 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { createEmotes } from '../src/shared/emotes.js';
import { EMOTE_COOLDOWN_MS, EMOTE_DURATION_MS } from '../constants/emotes.js';
test('emotes validate fixed choices, rate limit each player and expire without changing battle state', () => {
const emotes = createEmotes();
assert.equal(emotes.send(0, '<script>', 1000), false);
assert.equal(emotes.send(0, 'greet', 1000), true);
assert.equal(emotes.send(0, 'mistake', 1001), false);
assert.equal(emotes.send(1, 'thanks', 1001), true);
assert.equal(emotes.view(1001)[0]?.id, 'greet');
const snapshot = emotes.view(1001);
snapshot[0]!.id = 'threaten';
assert.equal(emotes.view(1001)[0]?.id, 'greet');
assert.equal(emotes.view(1000 + EMOTE_DURATION_MS)[0], null);
assert.equal(emotes.send(0, 'mistake', 1000 + EMOTE_COOLDOWN_MS), true);
});
test('emote variants are fixed when sent and invalid variants are rejected', () => {
const emotes = createEmotes();
assert.equal(emotes.send(0, 'greet', 0, 2), false);
assert.equal(emotes.send(0, 'greet', 0, 0), true);
assert.equal(emotes.send(1, 'greet', 0, 1), true);
assert.equal(emotes.view(1)[0]?.variant, 0);
assert.equal(emotes.view(2)[1]?.variant, 1);
});