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
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.
71 lines
2.4 KiB
TypeScript
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);
|
|
});
|
|
});
|