generated from VLADIMIR/template_frontend
up
This commit is contained in:
@@ -7,13 +7,15 @@ import ts from 'typescript'
|
||||
import * as vue from 'vue'
|
||||
import { compileScript, parse } from 'vue/compiler-sfc'
|
||||
|
||||
const presentationModule = { exports: {} }
|
||||
runInNewContext(ts.transpile(readFileSync(new URL('../src/utils/screenPresentation.ts', import.meta.url), 'utf8'), { module: ts.ModuleKind.CommonJS }), { exports: presentationModule.exports, URL, TextEncoder })
|
||||
function source(name) {
|
||||
return parse(readFileSync(new URL(`../src/components/${name}.vue`, import.meta.url), 'utf8'))
|
||||
.descriptor
|
||||
}
|
||||
function setup(name, props) {
|
||||
const script = compileScript(source(name), { id: name })
|
||||
const context = { exports: {}, require: (name) => (name === 'vue' ? vue : {}) }
|
||||
const context = { exports: {}, require: (name) => (name === 'vue' ? vue : name === '@/utils/screenPresentation' ? presentationModule.exports : {}) }
|
||||
runInNewContext(ts.transpile(script.content, { module: ts.ModuleKind.CommonJS }), context)
|
||||
const events = []
|
||||
const scope = vue.effectScope()
|
||||
@@ -110,6 +112,14 @@ assert.equal(
|
||||
screens.state.thumbnail({ mode: 'SCREEN_MODE_TEXT', text: 'Offline draft' }).text,
|
||||
'Offline draft',
|
||||
)
|
||||
const timerStep = { timerLabel: 'Перерыв', timerType: 'SCREEN_TIMER_TYPE_BREAK' }
|
||||
screens.state.setTimerType(timerStep, 'SCREEN_TIMER_TYPE_BEFORE_GAME')
|
||||
assert.equal(timerStep.timerLabel, 'До начала игры')
|
||||
timerStep.timerLabel = 'Обсуждение'
|
||||
screens.state.setTimerType(timerStep, 'SCREEN_TIMER_TYPE_UNTIL_END')
|
||||
assert.equal(timerStep.timerLabel, 'Обсуждение')
|
||||
assert.equal(presentationModule.exports.validScreenQR('https://example.org'), true)
|
||||
assert.equal(presentationModule.exports.validScreenQR('javascript:alert(1)'), false)
|
||||
screens.stop()
|
||||
|
||||
function functions(name, names) {
|
||||
@@ -320,3 +330,26 @@ assert.equal(media.currentTime, 23, 'Polling must not seek the player')
|
||||
console.log(
|
||||
'Screen controls: drafts, conflicts, explicit playlist IDs, timer/music controls, errors, stale polls and playback positions passed',
|
||||
)
|
||||
|
||||
const browserTeams = {
|
||||
state: vue.ref({ gameID: 7 }),
|
||||
screenId: vue.ref('12'),
|
||||
accessToken: vue.ref('test-token'),
|
||||
screenTeamNames: vue.ref(),
|
||||
lastTeamsLoaded: -Infinity,
|
||||
screenClient: { GetScreenTeams: async () => ({ teams: [{ name: 'Ястребы' }, { name: 'Агенты' }] }) },
|
||||
}
|
||||
runInNewContext(ts.transpile(functions('ScreenPage', ['loadScreenTeams']), { target: ts.ScriptTarget.ES2022 }), browserTeams)
|
||||
await browserTeams.loadScreenTeams()
|
||||
assert.deepEqual(Array.from(browserTeams.screenTeamNames.value), ['Агенты', 'Ястребы'])
|
||||
browserTeams.screenClient.GetScreenTeams = async () => { throw new Error('offline') }
|
||||
await assert.rejects(browserTeams.loadScreenTeams(), /offline/)
|
||||
assert.equal(browserTeams.screenTeamNames.value.length, 2)
|
||||
let resolveTeams
|
||||
browserTeams.screenClient.GetScreenTeams = () => new Promise(resolve => { resolveTeams = resolve })
|
||||
const pendingTeams = browserTeams.loadScreenTeams()
|
||||
browserTeams.state.value.gameID = 8
|
||||
browserTeams.screenTeamNames.value = undefined
|
||||
resolveTeams({ teams: [{ name: 'Из прошлой игры' }] })
|
||||
await pendingTeams
|
||||
assert.equal(browserTeams.screenTeamNames.value, undefined)
|
||||
|
||||
Reference in New Issue
Block a user