Files
MyGoNavi/frontend/src/utils/driverProgress.test.ts
Syngnat 455813e53c 🐛 fix(driver): 修复驱动安装进度回退
驱动安装进度按单次会话做单调归一,避免旧下载事件覆盖新进度。

有单文件预编译资产时跳过驱动总包兜底,减少进度回退和安装失败面。

补充前端进度状态机与后端总包兜底回归测试。
2026-06-04 16:57:00 +08:00

83 lines
2.0 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { normalizeDriverProgressUpdate, type DriverProgressState } from './driverProgress';
describe('normalizeDriverProgressUpdate', () => {
it('keeps downloading progress monotonic within one install session', () => {
const previous: DriverProgressState = {
status: 'downloading',
message: '写入驱动元数据',
percent: 90,
};
const actual = normalizeDriverProgressUpdate(previous, {
status: 'downloading',
message: '下载驱动总包',
percent: 30,
});
expect(actual).toEqual({
status: 'downloading',
message: '下载驱动总包',
percent: 90,
});
});
it('allows start to reset progress for a new install session', () => {
const actual = normalizeDriverProgressUpdate({
status: 'error',
message: '安装失败',
percent: 90,
}, {
status: 'start',
message: '开始安装',
percent: 0,
});
expect(actual).toEqual({
status: 'start',
message: '开始安装',
percent: 0,
});
});
it('does not let stale downloading events overwrite terminal states', () => {
const done = normalizeDriverProgressUpdate({
status: 'downloading',
message: '写入驱动元数据',
percent: 95,
}, {
status: 'done',
message: '驱动代理安装完成',
percent: 100,
});
expect(normalizeDriverProgressUpdate(done, {
status: 'downloading',
message: '下载驱动总包',
percent: 40,
})).toBe(done);
const failed = normalizeDriverProgressUpdate({
status: 'downloading',
message: '写入驱动元数据',
percent: 95,
}, {
status: 'error',
message: '安装失败',
percent: 0,
});
expect(failed).toEqual({
status: 'error',
message: '安装失败',
percent: 95,
});
expect(normalizeDriverProgressUpdate(failed, {
status: 'downloading',
message: '下载驱动总包',
percent: 40,
})).toBe(failed);
});
});