Files
RuoYi-Vue3-FastAPI/ruoyi-fastapi-frontend/tests/plugins/pluginDevMock.test.js
T
insistence 4bd83bc7cd feat: 支持 v2 插件、独立前端和签名制品发布 (#130)
* feat: 支持 v2 插件、原生扩展与签名发布

* fix: 修复测试

* feat: 增强宿主 SDK、运行观测与制品维护能力

* feat: 增强文件传输、配置观测与本地开发能力

* feat: 支持 SSE 实时事件流并完善开发脚手架

* feat: 完善长连接鉴权复核与关闭回收

* feat: 增强生命周期与任务关闭可靠性

* feat: 收紧健康检查契约并补齐前端与真实网络验收

* feat: 增加SDK溯源与离线更新工具并验证跨版本兼容

* feat: 增加持久化业务示例与受控 Python 交付

* feat: 增加统一运行诊断与多worker状态观测

* feat: 增加固定目标发布等待与自动验收

* fix: 修复多环境插件部署前缀与代理配置不一致

* fix: 修复测试
2026-10-09 23:49:45 +08:00

78 lines
2.7 KiB
JavaScript

import assert from 'node:assert/strict'
import {
createMockPluginRequest,
createMockPluginStream,
} from '../../../ruoyi-fastapi-backend/plugins/examples/python/bundle_demo/web/dev/mockRequest.js'
const request = createMockPluginRequest({ getDelay: () => 0 })
const config = (path, options = {}) => ({
url: '/apps/bundle_demo/api/' + path,
method: 'get',
...options,
})
assert.equal((await request(config('summary'))).userName, '本地模拟用户')
assert.equal(
(await request(config('echo', { method: 'post', data: { message: 'test' } }))).message,
'test'
)
const form = new FormData()
form.append('file', new Blob(['test']), 'test.txt')
const events = []
const file = await request(
config('files/inspect', {
method: 'post',
data: form,
onUploadProgress: (event) => events.push(event),
})
)
assert.deepEqual(file, {
filename: 'test.txt',
size: 4,
sha256: '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08',
})
assert.deepEqual(
events.map((event) => event.loaded),
[2, 4]
)
const report = await request(config('files/report'))
assert.match(await report.text(), /local-mock/)
await assert.rejects(request(config('unknown')), /未实现/)
await assert.rejects(request({ url: 'https://outside.test', method: 'get' }), /当前插件/)
const fail = createMockPluginRequest({ getDelay: () => 0, shouldFail: () => true })
await assert.rejects(fail(config('summary')), /模拟接口失败/)
const controller = new AbortController()
const slow = createMockPluginRequest({ getDelay: () => 5000 })
const pending = slow(config('summary', { signal: controller.signal }))
const rejected = assert.rejects(pending, /取消/)
controller.abort()
await rejected
await assert.rejects(slow(config('summary', { signal: controller.signal })), /取消/)
const streamController = new AbortController()
const stream = createMockPluginStream({ getDelay: () => 100 })
const streamConfig = config('events', {
params: { count: 3 },
lastEventId: '1',
signal: streamController.signal,
})
const received = []
for await (const event of stream(streamConfig)) received.push(event)
assert.deepEqual(
received.map((event) => event.id),
['2', '3']
)
assert.equal(JSON.parse(received[0].data).index, 2)
for (const invalid of [{ params: { count: 0 } }, { lastEventId: '1.0' }, { lastEventId: '001' }]) {
await assert.rejects(stream({ ...streamConfig, ...invalid }).next(), /参数无效/)
}
const interrupted = stream(streamConfig)
const next = interrupted.next()
const interruptedResult = assert.rejects(next, /取消/)
streamController.abort()
await interruptedResult
const failedStream = createMockPluginStream({ getDelay: () => 100, shouldFail: () => true })
await assert.rejects(
failedStream({ ...streamConfig, signal: new AbortController().signal }).next(),
/失败/
)