import test from 'node:test' import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import { reactive, ref, computed } from 'vue' import { parse } from '@vue/compiler-sfc' const source = parse(readFileSync(new URL('../src/views/subSystem/pipeNetwork/ops/workOrder/dispose.vue', import.meta.url), 'utf8')).descriptor.scriptSetup.content const code = source.slice(source.indexOf('const dispatchVisible = ref(false)'), source.indexOf('/* ============ 通用操作')) function setup(users = async () => ({ data: [] }), tree = async () => ({ data: [] })) { return new Function('ref', 'reactive', 'computed', 'userStore', 'workOrderUsers', 'workOrderDeptTree', `${code}; return { openDispatch, dispatchVisible, dispatchForm, openUserSelect, clearVerifier, deptTree, deptUserList, loadDeptUsers }`)( ref, reactive, computed, { id: 66 }, users, tree) } const user = id => ({ userId: id, nickName: `昵称${id}` }) test('工单核验人只在服务端合格候选中默认当前用户', async () => { for (const eligible of [true, false]) { const s = setup(async params => { assert.deepEqual(params, { orderId: 1, type: 'reviewer' }) return { data: eligible ? [user(66)] : [user(77)] } }) await s.openDispatch({ orderId: 1 }) assert.equal(s.dispatchForm.verifyUser, eligible ? 66 : null) } }) test('迟到的默认核验结果不覆盖改选、清除及新工单', async () => { const pending = [] const s = setup(() => new Promise(resolve => pending.push(resolve))) const first = s.openDispatch({ orderId: 1 }) s.clearVerifier() pending.shift()({ data: [user(66)] }) await first assert.equal(s.dispatchForm.verifyUser, null) const old = s.openDispatch({ orderId: 1 }) const next = s.openDispatch({ orderId: 2 }) pending.shift()({ data: [user(66)] }) await old assert.equal(s.dispatchForm.verifyUser, null) pending.shift()({ data: [] }) await next }) test('选人携带工单及角色,部门切换迟到结果不能覆盖新列表', async () => { const pending = [] const s = setup(params => params.type === 'reviewer' ? Promise.resolve({ data: [] }) : new Promise(resolve => pending.push({ params, resolve }))) await s.openDispatch({ orderId: 2 }) const open = s.openUserSelect('handler') const all = pending.shift() assert.deepEqual(all.params, { orderId: 2, type: 'handler', deptId: undefined }) const dept = s.loadDeptUsers(101) const filtered = pending.shift() assert.equal(filtered.params.deptId, 101) filtered.resolve({ data: [user(88)] }) await dept all.resolve({ data: [user(99)] }) await open assert.equal(s.deptUserList.value[0].userId, 88) })