feat: 添加起始日期功能并更新相关组件与测试用例
- 在任务创建和编辑界面中新增起始日期字段,默认值为当天。 - 更新任务卡片展示逻辑,仅在起始日期不是当天时显示相关信息。 - 修改相关测试用例以覆盖起始日期的功能,包括批量创建和编辑任务的场景。 - 数据库模式版本更新至4,以支持起始日期字段的存储与迁移。
This commit is contained in:
+38
-2
@@ -21,6 +21,7 @@ function validTask(overrides: Record<string, unknown> = {}): Record<string, unkn
|
||||
priority: 2,
|
||||
tags: ['设计'],
|
||||
dueDate: '2026-10-20',
|
||||
startDate: null,
|
||||
sortOrder: 1024,
|
||||
createdAt: '2026-10-18T00:00:00.000Z',
|
||||
updatedAt: '2026-10-18T00:00:00.000Z',
|
||||
@@ -97,6 +98,12 @@ describe('coerceTask', () => {
|
||||
expect(result?.sortOrder).toBe(0)
|
||||
})
|
||||
|
||||
it('合法 startDate 保留,非法 startDate 收敛为 null', () => {
|
||||
expect(coerceTask(validTask({ startDate: '2026-10-01' }))?.startDate).toBe('2026-10-01')
|
||||
expect(coerceTask(validTask({ startDate: '2026-02-31' }))?.startDate).toBeNull()
|
||||
expect(coerceTask(validTask({ startDate: undefined }))?.startDate).toBeNull()
|
||||
})
|
||||
|
||||
it('tags 过滤掉非字符串与空白项', () => {
|
||||
const result = coerceTask(validTask({ tags: ['ok', 1, null, ' ', 'ok2'] }))
|
||||
expect(result?.tags).toEqual(['ok', 'ok2'])
|
||||
@@ -265,17 +272,46 @@ describe('版本迁移', () => {
|
||||
expect(state.tasks[0]?.archivedAt).toBe('2026-01-03T00:00:00.000Z')
|
||||
})
|
||||
|
||||
it('v0/v1/v2 都能一路迁移到 v3', () => {
|
||||
it('v3 数据迁移到 v4 时补上 startDate,其余字段不变', () => {
|
||||
const v3 = JSON.stringify({
|
||||
schemaVersion: 3,
|
||||
tasks: [
|
||||
{
|
||||
id: 'legacy',
|
||||
title: '旧任务',
|
||||
status: 'todo',
|
||||
priority: 2,
|
||||
sortOrder: 1024,
|
||||
createdAt: '2026-01-01T00:00:00.000Z',
|
||||
updatedAt: '2026-01-01T00:00:00.000Z',
|
||||
completedAt: null,
|
||||
archivedAt: null,
|
||||
deletedAt: null,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
const state = parsePersistedState(v3)
|
||||
|
||||
expect(state.schemaVersion).toBe(SCHEMA_VERSION)
|
||||
expect(state.tasks[0]?.startDate).toBeNull()
|
||||
expect(state.tasks[0]?.deletedAt).toBeNull()
|
||||
expect(state.tasks[0]?.title).toBe('旧任务')
|
||||
})
|
||||
|
||||
it('v0/v1/v2/v3 都能一路迁移到当前版本', () => {
|
||||
const builds = [
|
||||
() => ({ tasks: [{ id: 'a', title: 'A', status: 'todo', priority: 2 }] }),
|
||||
() => ({ schemaVersion: 1, tasks: [{ id: 'a', title: 'A', status: 'todo', priority: 2 }] }),
|
||||
() => ({ schemaVersion: 2, tasks: [{ id: 'a', title: 'A', status: 'todo', priority: 2 }] }),
|
||||
() => ({ schemaVersion: 3, tasks: [{ id: 'a', title: 'A', status: 'todo', priority: 2 }] }),
|
||||
]
|
||||
|
||||
for (const build of builds) {
|
||||
const state = parsePersistedState(JSON.stringify(build()))
|
||||
expect(state.schemaVersion).toBe(3)
|
||||
expect(state.schemaVersion).toBe(SCHEMA_VERSION)
|
||||
expect(state.tasks[0]?.deletedAt).toBeNull()
|
||||
expect(state.tasks[0]?.startDate).toBeNull()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user