Files
scrabble-game/ui/src/lib/variants.test.ts
T
Ilia Denisov e3e4cedc77
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Has been skipped
CI / integration (pull_request) Has been skipped
CI / ui (pull_request) Successful in 54s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m17s
feat(ui): Erudit blank tiles carry the star (✻) mark
The Erudit variant's blank is the "звёздочка", so render it with a star.
An empty rack blank (and its drag ghost) shows ✻ centred; a placed blank
keeps its designated letter and carries ✻ where the (absent) point value
sits — on the board and in the Stats best-move tiles. The Scrabble variants
are unchanged. Gated by usesStarBlank() in lib/variants.ts.
2026-06-22 11:52:00 +02:00

71 lines
2.4 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import {
ALL_VARIANTS,
availableVariants,
supportsMultipleWordsToggle,
multipleWordsForRequest,
usesStarBlank,
BLANK_STAR,
} from './variants';
describe('ALL_VARIANTS', () => {
it('lists variants Erudit-first', () => {
expect(ALL_VARIANTS.map((v) => v.id)).toEqual(['erudit_ru', 'scrabble_ru', 'scrabble_en']);
});
});
describe('availableVariants', () => {
it('is ungated (all variants) for an empty or absent preference set', () => {
expect(availableVariants([])).toEqual(ALL_VARIANTS);
expect(availableVariants(undefined)).toEqual(ALL_VARIANTS);
});
it('offers only the preferred variants', () => {
expect(availableVariants(['scrabble_en']).map((v) => v.id)).toEqual(['scrabble_en']);
expect(availableVariants(['erudit_ru', 'scrabble_en']).map((v) => v.id)).toEqual(['erudit_ru', 'scrabble_en']);
});
it('keeps the Erudit-first catalogue order regardless of preference order', () => {
expect(availableVariants(['scrabble_en', 'erudit_ru', 'scrabble_ru']).map((v) => v.id)).toEqual([
'erudit_ru',
'scrabble_ru',
'scrabble_en',
]);
});
});
describe('supportsMultipleWordsToggle', () => {
it('is true for Russian variants only', () => {
expect(supportsMultipleWordsToggle('scrabble_ru')).toBe(true);
expect(supportsMultipleWordsToggle('erudit_ru')).toBe(true);
expect(supportsMultipleWordsToggle('scrabble_en')).toBe(false);
});
});
describe('multipleWordsForRequest', () => {
it('carries the toggle for Russian games', () => {
expect(multipleWordsForRequest('scrabble_ru', false)).toBe(false);
expect(multipleWordsForRequest('scrabble_ru', true)).toBe(true);
expect(multipleWordsForRequest('erudit_ru', false)).toBe(false);
});
it('forces standard (true) for English whatever the toggle', () => {
expect(multipleWordsForRequest('scrabble_en', false)).toBe(true);
expect(multipleWordsForRequest('scrabble_en', true)).toBe(true);
});
});
describe('usesStarBlank', () => {
it('marks the blank with a star for Erudit only', () => {
expect(usesStarBlank('erudit_ru')).toBe(true);
expect(usesStarBlank('scrabble_ru')).toBe(false);
expect(usesStarBlank('scrabble_en')).toBe(false);
});
it('BLANK_STAR is the heavy teardrop-spoked asterisk (U+273B)', () => {
expect(BLANK_STAR).toBe('✻');
expect(BLANK_STAR.codePointAt(0)).toBe(0x273b);
});
});