| 1234567891011121314151617181920212223242526272829303132333435 |
- import test from 'node:test'
- import assert from 'node:assert/strict'
- import { createVideoApi } from '../../src/modules/cockpit/services/videoApi.js'
- const code = 'CAM/03 空格'
- const config = { dataSource: 'real', api: { baseUrl: 'http://fixture.invalid/api/cockpit/v1', token: 'never-send' } }
- const response = (data, status = 200) => Response.json({ code: 200, msg: '操作成功', data }, { status })
- test('prepare assigns an owned identity before any live request and later operations carry only its credential', async () => {
- const calls = []
- const api = createVideoApi({ config, fetchImpl: async (url, options) => {
- calls.push({ url: new URL(url), options, body: JSON.parse(options.body) })
- if (url.endsWith('/prepare')) return response({ deviceCode: code, deviceName: '摄像机03', sessionId: 'session-03', sessionToken: 'owner-03', mode: 'LIVE', status: 'PREPARED' }, 201)
- if (url.endsWith('/live')) return response({ deviceCode: code, sessionId: 'session-03', mode: 'LIVE', status: 'ACTIVE', media: { native: true, url: 'https://media.invalid/live.mp4' } })
- if (url.endsWith('/status')) return response({ sessionId: 'session-03', status: 'STOPPED' })
- return response({ sessionId: 'session-03', status: 'CLEANUP_PENDING', category: 'CLEANUP_UNCONFIRMED' }, 202)
- } })
- const identity = await api.prepare(code)
- assert.equal(calls.length, 1)
- assert.equal(calls[0].url.pathname, '/api/cockpit/v1/video/sessions/prepare')
- assert.deepEqual(calls[0].body, { deviceCode: code })
- assert.equal(identity.status, 'PREPARED')
- assert.equal(identity.media, undefined)
- const started = await api.start(identity)
- assert.equal(started.status, 'ACTIVE')
- assert.equal(started.sessionToken, undefined)
- assert.equal((await api.stop(identity)).status, 'CLEANUP_PENDING')
- assert.equal((await api.status(identity)).status, 'STOPPED')
- for (const call of calls) {
- assert.equal(call.options.headers.Authorization, undefined)
- assert.equal(call.options.credentials, 'omit')
- assert.equal(call.url.search, '')
- }
- for (const call of calls.slice(1)) assert.deepEqual(call.body, { sessionToken: 'owner-03' })
- })
|