新增隐藏的官网赛事信息后台路由和编辑页面。支持从 Excel 拖拽或选择导入草稿、下载完整示例及当前数据,维护中英文赛事信息、公告、当前/检录场次、赛程与发布状态;通过已有 /api/website-competition 接口加载和保存,失败时提供重试与提示。 新增 Excel 工作簿生成与解析:覆盖赛事设置、赛程、全能/挑战/Battle 成绩、选手和纪录,并校验表头、编号及淘汰赛数据;兼容旧模板和 Excel 时间单元格。新增接口响应解包及工作簿往返、错误场景测试。 验证:node scripts/website-competition-response-test.mjs、node scripts/website-competition-workbook-test.mjs、npm run build:local 与 git diff --cached --check 均通过。此提交只含前端;运行时依赖后端 /api/website-competition 及其服务端密钥配置。
23 lines
1.0 KiB
JavaScript
23 lines
1.0 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { isCompetitionState, unwrapCompetitionResponse } from '../src/views/website/competition/response.mjs';
|
|
|
|
const state = {
|
|
published: false,
|
|
competition: {},
|
|
notice: {},
|
|
schedule: { items: [] },
|
|
results: { overall: [], challenge: [], battle: [] },
|
|
players: [],
|
|
records: [],
|
|
};
|
|
|
|
assert.deepEqual(unwrapCompetitionResponse(state), state);
|
|
assert.deepEqual(unwrapCompetitionResponse({ statusCode: 200, data: state }), state);
|
|
assert.deepEqual(unwrapCompetitionResponse({ statusCode: 200, data: JSON.stringify(state) }), state);
|
|
assert.equal(isCompetitionState(unwrapCompetitionResponse({ statusCode: 200, data: JSON.stringify(state) })), true);
|
|
assert.equal(isCompetitionState({ statusCode: 200, data: state }), false);
|
|
assert.throws(() => unwrapCompetitionResponse({ statusCode: 401, errors: '401 Unauthorized' }), /401 Unauthorized/);
|
|
assert.throws(() => unwrapCompetitionResponse({ statusCode: 200, data: 'invalid JSON' }), /JSON 格式不正确/);
|
|
|
|
console.log('官网赛事接口响应解包与数据校验通过');
|