76 lines
2.0 KiB
TypeScript
76 lines
2.0 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import {
|
|
buildProjectTimeBatchPayload,
|
|
mapCopiedProjectItems,
|
|
mapPersistedProjectItems,
|
|
shouldSyncPersistedProjectTimes
|
|
} from '../src/views/review/meeting/meetingEditHelpers'
|
|
|
|
const baseProject = {
|
|
id: 101,
|
|
seqNo: 1,
|
|
startTime: '09:00',
|
|
endTime: '09:15',
|
|
agendaCategory: '项目申报论证',
|
|
projectTitle: '项目A',
|
|
reporter: '张三',
|
|
reporterUnit: '软件学院',
|
|
reviewDate: '2026-04-01'
|
|
}
|
|
|
|
const persistedProjects = mapPersistedProjectItems([baseProject])
|
|
assert.equal(
|
|
persistedProjects[0].sourceProjectId,
|
|
undefined,
|
|
'编辑已有会议时,不应该把现有项目 id 回填到 sourceProjectId'
|
|
)
|
|
|
|
const copiedProjects = mapCopiedProjectItems([baseProject])
|
|
assert.equal(copiedProjects[0].sourceProjectId, 101, '复制会议时,应该保留源项目 id 用于首次复制资料')
|
|
|
|
assert.equal(
|
|
shouldSyncPersistedProjectTimes({
|
|
isEdit: true,
|
|
isProjectsModified: false,
|
|
originalMeetingStart: 1711942800000,
|
|
currentMeetingStart: 1711944600000,
|
|
projects: [baseProject]
|
|
}),
|
|
true,
|
|
'编辑已有会议且仅修改会议开始时间时,应该同步已落库项目时间'
|
|
)
|
|
|
|
assert.deepEqual(buildProjectTimeBatchPayload([baseProject]), {
|
|
items: [
|
|
{
|
|
id: 101,
|
|
startTime: '09:00',
|
|
endTime: '09:15'
|
|
}
|
|
]
|
|
})
|
|
|
|
const meetingEditSource = fs.readFileSync(
|
|
path.resolve(process.cwd(), 'src/views/review/meeting/MeetingEdit.vue'),
|
|
'utf8'
|
|
)
|
|
assert.match(
|
|
meetingEditSource,
|
|
/mapPersistedProjectItems/,
|
|
'MeetingEdit.vue 应该接入编辑态项目映射,避免把现有项目 id 回填到 sourceProjectId'
|
|
)
|
|
assert.match(
|
|
meetingEditSource,
|
|
/mapCopiedProjectItems/,
|
|
'MeetingEdit.vue 应该接入复制态项目映射,保留首次复制资料所需的 sourceProjectId'
|
|
)
|
|
assert.match(
|
|
meetingEditSource,
|
|
/updateReviewProjectTimeBatch/,
|
|
'MeetingEdit.vue 应该在会议起始时间变化后同步已落库项目时间'
|
|
)
|
|
|
|
console.log('reviewMeetingEditHelpers checks passed')
|