fix
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
const assert = require('node:assert/strict')
|
||||
const { createServer } = require('node:http')
|
||||
const { nativeImage } = require('electron')
|
||||
const { soundCheckWav } = require('../dist-electron/electron/sound-check.js')
|
||||
|
||||
module.exports = async ({ evaluate, poll }) => {
|
||||
const requests = []
|
||||
let scenarioError = false
|
||||
const image = nativeImage.createFromBitmap(Buffer.alloc(4), { width: 1, height: 1 }).toPNG()
|
||||
const server = createServer((request, response) => {
|
||||
requests.push(request.url)
|
||||
request.resume()
|
||||
const send = (value, status = 200) => {
|
||||
response.writeHead(status, { 'Content-Type': 'application/json' })
|
||||
response.end(JSON.stringify(value))
|
||||
}
|
||||
const game = { ID: 7, name: 'Materials smoke', status: 'finish', scenario: { ID: 23, image: 'cover.png' } }
|
||||
if (request.url === '/api/auth/login') return send({ accessToken: 'TEST', refreshToken: 'REFRESH' })
|
||||
if (request.url === '/api/users/me') return send({ user: { roles: ['organizer'] } })
|
||||
if (request.url === '/api/playlists') return send({ playlists: [] })
|
||||
if (request.url === '/api/games') return send({ games: [game] })
|
||||
if (request.url === '/api/games/7') return send({ game })
|
||||
if (request.url === '/api/games/7/screen-plan') return send({ plan: { steps: [{ mode: 2 }] } })
|
||||
if (request.url === '/api/games/7/music') return send({ gamePlaylistId: 1, playlists: [{ ID: 1, name: 'Музыка', tracks:
|
||||
Array.from({ length: 13 }, (_, index) => ({ ID: index + 1, name: `Трек ${index}`, filename: `track-${index}.wav` })),
|
||||
}] })
|
||||
if (request.url === '/api/scenarios/23') return send({ scenario: { ID: 23, image: 'cover.png', story: { background: 'background.png', introduction: { audio: 'intro.wav' } } } }, scenarioError ? 403 : 200)
|
||||
if (request.url.startsWith('/api/files/')) {
|
||||
response.writeHead(200, { 'Content-Type': request.url.endsWith('.png') ? 'image/png' : 'audio/wav' })
|
||||
response.end(request.url.endsWith('.png') ? image : soundCheckWav)
|
||||
return
|
||||
}
|
||||
send({}, 404)
|
||||
})
|
||||
await new Promise((resolve, reject) => {
|
||||
server.once('error', reject)
|
||||
server.listen(0, '127.0.0.1', resolve)
|
||||
})
|
||||
try {
|
||||
const url = `http://127.0.0.1:${server.address().port}`
|
||||
await evaluate(`window.screenBridge.onlineAction(${JSON.stringify({ action: 'login', server: url, email: 'test@example.test', password: 'test-password' })})`)
|
||||
await evaluate('window.screenBridge.onlineAction({ action: "select-game", gameId: 7 })')
|
||||
const result = await evaluate('window.screenBridge.onlineState()')
|
||||
assert.equal(result.materials.length, 16)
|
||||
assert.ok(result.materials.every((m) => m.status === 'ready'))
|
||||
assert.ok(result.materials.some((m) => m.usages.some((u) => u.name === 'Фон')))
|
||||
assert.ok(result.materials.some((m) => m.usages.some((u) => u.name === 'Вступление')))
|
||||
assert.equal(result.screenId, null)
|
||||
assert.equal(result.materialsWarning, '')
|
||||
assert.ok(!requests.some((path) => path.startsWith('/api/screens')))
|
||||
await poll(() => evaluate('document.body.textContent.includes("Материалы — загружено 16 из 16")'), 'all materials before screen connection')
|
||||
scenarioError = true
|
||||
await assert.rejects(evaluate('window.screenBridge.onlineAction({ action: "download", gameId: 7 })'), /Сохранённые материалы/)
|
||||
const incomplete = await evaluate('window.screenBridge.onlineState()')
|
||||
assert.equal(incomplete.materials.length, 16)
|
||||
assert.equal(incomplete.notice, '')
|
||||
await poll(() => evaluate('document.querySelector("[data-testid=materials-warning]")?.textContent.includes("неполный список")'), 'incomplete materials warning')
|
||||
console.log('SCREEN_MATERIALS_PREPARE_PASS')
|
||||
} finally {
|
||||
server.closeAllConnections()
|
||||
await new Promise((resolve) => server.close(resolve))
|
||||
}
|
||||
}
|
||||
@@ -219,6 +219,11 @@ app.whenReady().then(async () => {
|
||||
(await evaluate('!!window.screenBridge && !!document.querySelector("main.control")')),
|
||||
'control UI',
|
||||
)
|
||||
if (process.argv.includes('--materials-prepare')) {
|
||||
await require('./materials-prepare-smoke.cjs')({ evaluate, poll })
|
||||
app.exit(0)
|
||||
return
|
||||
}
|
||||
if (process.argv.includes('--clear-games')) {
|
||||
await evaluate(`window.screenBridge.selectPackage(${JSON.stringify(offlinePackage.key)})`)
|
||||
await poll(() => evaluate('!!document.querySelector("[data-testid=clear-games]:not([disabled])")'), 'clear games button')
|
||||
|
||||
Reference in New Issue
Block a user