add:新增同一个工单同一人可以多次拼单
This commit is contained in:
@@ -188,3 +188,95 @@ test('非第 1 页不得插入,只做就地更新', () => {
|
||||
assert.equal(verdict.operation, 'upsert')
|
||||
assert.equal(verdict.shouldInsert, false)
|
||||
})
|
||||
|
||||
/**
|
||||
* 同一打手在同一个工单多次拼单:一张单可以同时属于「代练中」和「待验收」,
|
||||
* 但快照的 status 只能是一个值。前端若按单个 status 删行,另一个页签就会莫名其妙变空
|
||||
* (线上「待验收有时候没有数据」)。服务端现在带 workerStatuses,按集合判归属。
|
||||
*/
|
||||
test('多份额工单:快照 status 是进行中,但属于待验收时不得从待验收页签删行', () => {
|
||||
const snapshot = buildRow({
|
||||
status: 'in_progress',
|
||||
workerStatuses: ['in_progress', 'pending_acceptance'],
|
||||
})
|
||||
const verdict = resolveWorkerMyOrderRealtimeVerdict({
|
||||
item: snapshot,
|
||||
statusFilter: 'pending_acceptance',
|
||||
keyword: '',
|
||||
operation: 'upsert',
|
||||
page: 1,
|
||||
explicitOrderNo: false,
|
||||
})
|
||||
assert.equal(verdict.operation, 'upsert', '待验收页签必须保留这张多份额工单')
|
||||
assert.equal(verdict.shouldInsert, true)
|
||||
|
||||
const updated = patchWorkerWorkOrderListEnvelope(
|
||||
buildEnvelope([buildRow({ status: 'pending_acceptance' })]),
|
||||
{ operation: verdict.operation, data: snapshot },
|
||||
verdict.shouldInsert,
|
||||
)
|
||||
assert.equal(itemsOf(updated).length, 1)
|
||||
assert.equal((itemsOf(updated)[0] as { status?: string }).status, 'in_progress')
|
||||
})
|
||||
|
||||
test('多份额工单:workerStatuses 同时也是代练中页签的归属依据', () => {
|
||||
const verdict = resolveWorkerMyOrderRealtimeVerdict({
|
||||
item: buildRow({
|
||||
status: 'in_progress',
|
||||
workerStatuses: ['in_progress', 'pending_acceptance'],
|
||||
}),
|
||||
statusFilter: 'in_progress',
|
||||
keyword: '',
|
||||
operation: 'upsert',
|
||||
page: 1,
|
||||
explicitOrderNo: false,
|
||||
})
|
||||
assert.equal(verdict.operation, 'upsert')
|
||||
})
|
||||
|
||||
test('不在页签集合里时才允许删行(例如已验收后离开待验收页签)', () => {
|
||||
const verdict = resolveWorkerMyOrderRealtimeVerdict({
|
||||
item: buildRow({ status: 'accepted', workerStatuses: ['accepted'] }),
|
||||
statusFilter: 'pending_acceptance',
|
||||
keyword: '',
|
||||
operation: 'upsert',
|
||||
page: 1,
|
||||
explicitOrderNo: false,
|
||||
})
|
||||
assert.equal(verdict.operation, 'remove')
|
||||
assert.equal(verdict.shouldInsert, false)
|
||||
})
|
||||
|
||||
test('VIP 待补图页签也靠 workerStatuses 判定,不会被当成状态不符删掉', () => {
|
||||
const verdict = resolveWorkerMyOrderRealtimeVerdict({
|
||||
item: buildRow({ status: 'accepted', workerStatuses: ['accepted', 'vip_evidence_pending'] }),
|
||||
statusFilter: 'vip_evidence_pending',
|
||||
keyword: '',
|
||||
operation: 'upsert',
|
||||
page: 1,
|
||||
explicitOrderNo: false,
|
||||
})
|
||||
assert.equal(verdict.operation, 'upsert')
|
||||
})
|
||||
|
||||
test('没有 workerStatuses 的旧快照仍按单个 status 比对(保持既有行为)', () => {
|
||||
const mismatch = resolveWorkerMyOrderRealtimeVerdict({
|
||||
item: buildRow({ status: 'accepted' }),
|
||||
statusFilter: 'pending_acceptance',
|
||||
keyword: '',
|
||||
operation: 'upsert',
|
||||
page: 1,
|
||||
explicitOrderNo: false,
|
||||
})
|
||||
assert.equal(mismatch.operation, 'remove')
|
||||
|
||||
const match = resolveWorkerMyOrderRealtimeVerdict({
|
||||
item: buildRow({ status: 'pending_acceptance' }),
|
||||
statusFilter: 'pending_acceptance',
|
||||
keyword: '',
|
||||
operation: 'upsert',
|
||||
page: 1,
|
||||
explicitOrderNo: false,
|
||||
})
|
||||
assert.equal(match.operation, 'upsert')
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user