28 lines
1.2 KiB
TypeScript
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);
|
|
});
|