fix: spectator board rendering
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
const test = require('node:test');
|
||||
|
||||
const app = fs.readFileSync(path.join(__dirname, '../../data/app.js'), 'utf8');
|
||||
const css = fs.readFileSync(path.join(__dirname, '../../data/styles.css'), 'utf8');
|
||||
|
||||
test('spectator state selects a public player board by default and retains only spectator board keys', () => {
|
||||
assert.match(app, /const boardKeys = Object\.freeze\(\{ own: 'own', opponent: 'opponent', player1: 'player1', player2: 'player2' \}\)/);
|
||||
assert.match(app, /const validBoardKeys = role === 'spectator' \? \[boardKeys\.player1, boardKeys\.player2\] : \[boardKeys\.own, boardKeys\.opponent\]/);
|
||||
assert.match(app, /if \(!validBoardKeys\.includes\(activeBoard\)\) activeBoard = validBoardKeys\[0\]/);
|
||||
assert.match(app, /key: boardKeys\.player1/);
|
||||
assert.match(app, /key: boardKeys\.player2/);
|
||||
});
|
||||
|
||||
test('spectator boards have working tabs and no player firing controls', () => {
|
||||
assert.match(app, /tab\.addEventListener\('click', \(\) => \{ activeBoard = definition\.key; renderGame\(\); \}\)/);
|
||||
assert.match(app, /ui\.shotControls\.hidden = !isPlayer\(\)/);
|
||||
assert.match(app, /const watching = role === 'spectator'/);
|
||||
assert.match(app, /Наблюдаем за боем · Ходит \$\{turnPlayer\}/);
|
||||
assert.match(app, /watching \? 'Наблюдаем за боем' : 'Ждём соперника…'/);
|
||||
assert.match(css, /\.board\[hidden\]\s*\{\s*display:\s*none;/);
|
||||
assert.match(css, /\.board\[hidden\]\s*\{\s*display:\s*block;/);
|
||||
});
|
||||
|
||||
test('WebSocket and HTTP state updates share spectator role and board-tab reconciliation', () => {
|
||||
assert.match(app, /async function pollState\(\)[\s\S]*?acceptState\(payload\);/);
|
||||
assert.match(app, /if \(message\.type === 'state'\) \{\s*acceptState\(message\);/);
|
||||
assert.match(app, /role = payload\.viewer;\s*const validBoardKeys = role === 'spectator'/);
|
||||
});
|
||||
Reference in New Issue
Block a user