Files
X-Financial/web/tests/expense-application-decision-feedback.test.mjs

144 lines
3.8 KiB
JavaScript

import assert from 'node:assert/strict'
import { trackApplicationPreviewFieldEdit } from '../src/utils/expenseApplicationDecisionFeedback.js'
function testTracksFirstExplicitEdit() {
const previous = {
decisionId: 'decision-feedback-1',
fields: {
reason: '客户拜访',
location: '上海'
}
}
const next = {
...previous,
fields: {
...previous.fields,
reason: '客户现场实施'
}
}
const tracked = trackApplicationPreviewFieldEdit(previous, next, 'reason')
assert.deepEqual(tracked.aiDecisionFeedback.changedFields, [
{
fieldKey: 'reason',
suggestedValue: '客户拜访',
finalValue: '客户现场实施'
}
])
assert.equal(tracked.aiDecisionFeedback.revision, 1)
assert.equal(tracked.decisionId, 'decision-feedback-1')
}
function testKeepsOriginalSuggestionAcrossRepeatedEdits() {
const first = trackApplicationPreviewFieldEdit(
{ decisionId: 'decision-feedback-2', fields: { transportMode: '火车' } },
{ decisionId: 'decision-feedback-2', fields: { transportMode: '飞机' } },
'transportMode'
)
const second = trackApplicationPreviewFieldEdit(
first,
{ ...first, fields: { transportMode: '自驾' } },
'transportMode'
)
assert.deepEqual(second.aiDecisionFeedback.changedFields, [
{
fieldKey: 'transportMode',
suggestedValue: '火车',
finalValue: '自驾'
}
])
assert.equal(second.decisionId, 'decision-feedback-2')
}
function testRemovesDiffWhenUserRestoresSuggestion() {
const edited = trackApplicationPreviewFieldEdit(
{ fields: { location: '上海' } },
{ fields: { location: '北京' } },
'location'
)
const restored = trackApplicationPreviewFieldEdit(
edited,
{ ...edited, fields: { location: '上海' } },
'location'
)
assert.deepEqual(restored.aiDecisionFeedback.changedFields, [])
}
function testReturnDateUsesCanonicalTimeField() {
const tracked = trackApplicationPreviewFieldEdit(
{ fields: { time: '2026-07-20 至 2026-07-22' } },
{ fields: { time: '2026-07-20 至 2026-07-24' } },
'time_return'
)
assert.equal(tracked.aiDecisionFeedback.changedFields[0].fieldKey, 'time')
}
function testTracksDateAndDerivedDaysTogether() {
const previous = {
fields: {
time: '2026-02-20 至 2026-02-23',
days: '4天'
}
}
const next = {
fields: {
time: '2026-02-20 至 2026-02-24',
days: '5天'
}
}
const tracked = trackApplicationPreviewFieldEdit(
previous,
next,
['time_return', 'days']
)
assert.deepEqual(tracked.aiDecisionFeedback.changedFields, [
{ fieldKey: 'days', suggestedValue: '4天', finalValue: '5天' },
{
fieldKey: 'time',
suggestedValue: '2026-02-20 至 2026-02-23',
finalValue: '2026-02-20 至 2026-02-24'
}
])
assert.equal(tracked.aiDecisionFeedback.revision, 1)
const editedAgain = trackApplicationPreviewFieldEdit(
tracked,
{
...tracked,
fields: {
time: '2026-02-20 至 2026-02-25',
days: '6天'
}
},
['time', 'days']
)
assert.equal(editedAgain.aiDecisionFeedback.changedFields[0].suggestedValue, '4天')
assert.equal(
editedAgain.aiDecisionFeedback.changedFields[1].suggestedValue,
'2026-02-20 至 2026-02-23'
)
assert.equal(editedAgain.aiDecisionFeedback.revision, 2)
const restored = trackApplicationPreviewFieldEdit(
editedAgain,
{ ...editedAgain, fields: previous.fields },
['time', 'days']
)
assert.deepEqual(restored.aiDecisionFeedback.changedFields, [])
assert.equal(restored.aiDecisionFeedback.revision, 3)
}
testTracksFirstExplicitEdit()
testKeepsOriginalSuggestionAcrossRepeatedEdits()
testRemovesDiffWhenUserRestoresSuggestion()
testReturnDateUsesCanonicalTimeField()
testTracksDateAndDerivedDaysTogether()
console.log('expense-application-decision-feedback tests passed')