workOrderAssignment.test.mjs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import test from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import { readFileSync } from 'node:fs'
  4. import { reactive, ref, computed } from 'vue'
  5. import { parse } from '@vue/compiler-sfc'
  6. const source = parse(readFileSync(new URL('../src/views/subSystem/pipeNetwork/ops/workOrder/dispose.vue', import.meta.url), 'utf8')).descriptor.scriptSetup.content
  7. const code = source.slice(source.indexOf('const dispatchVisible = ref(false)'), source.indexOf('/* ============ 通用操作'))
  8. function setup(users = async () => ({ data: [] }), tree = async () => ({ data: [] })) {
  9. return new Function('ref', 'reactive', 'computed', 'userStore', 'workOrderUsers', 'workOrderDeptTree',
  10. `${code}; return { openDispatch, dispatchVisible, dispatchForm, openUserSelect, clearVerifier, deptTree, deptUserList, loadDeptUsers }`)(
  11. ref, reactive, computed, { id: 66 }, users, tree)
  12. }
  13. const user = id => ({ userId: id, nickName: `昵称${id}` })
  14. test('工单核验人只在服务端合格候选中默认当前用户', async () => {
  15. for (const eligible of [true, false]) {
  16. const s = setup(async params => {
  17. assert.deepEqual(params, { orderId: 1, type: 'reviewer' })
  18. return { data: eligible ? [user(66)] : [user(77)] }
  19. })
  20. await s.openDispatch({ orderId: 1 })
  21. assert.equal(s.dispatchForm.verifyUser, eligible ? 66 : null)
  22. }
  23. })
  24. test('迟到的默认核验结果不覆盖改选、清除及新工单', async () => {
  25. const pending = []
  26. const s = setup(() => new Promise(resolve => pending.push(resolve)))
  27. const first = s.openDispatch({ orderId: 1 })
  28. s.clearVerifier()
  29. pending.shift()({ data: [user(66)] })
  30. await first
  31. assert.equal(s.dispatchForm.verifyUser, null)
  32. const old = s.openDispatch({ orderId: 1 })
  33. const next = s.openDispatch({ orderId: 2 })
  34. pending.shift()({ data: [user(66)] })
  35. await old
  36. assert.equal(s.dispatchForm.verifyUser, null)
  37. pending.shift()({ data: [] })
  38. await next
  39. })
  40. test('选人携带工单及角色,部门切换迟到结果不能覆盖新列表', async () => {
  41. const pending = []
  42. const s = setup(params => params.type === 'reviewer'
  43. ? Promise.resolve({ data: [] }) : new Promise(resolve => pending.push({ params, resolve })))
  44. await s.openDispatch({ orderId: 2 })
  45. const open = s.openUserSelect('handler')
  46. const all = pending.shift()
  47. assert.deepEqual(all.params, { orderId: 2, type: 'handler', deptId: undefined })
  48. const dept = s.loadDeptUsers(101)
  49. const filtered = pending.shift()
  50. assert.equal(filtered.params.deptId, 101)
  51. filtered.resolve({ data: [user(88)] })
  52. await dept
  53. all.resolve({ data: [user(99)] })
  54. await open
  55. assert.equal(s.deptUserList.value[0].userId, 88)
  56. })