| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import test from 'node:test'
- import assert from 'node:assert/strict'
- import { readFileSync } from 'node:fs'
- import { reactive, ref } from 'vue'
- import { parse } from '@vue/compiler-sfc'
- const read = path => readFileSync(new URL(path, import.meta.url), 'utf8')
- const script = parse(read('../src/views/subSystem/lifeCompany/components/WarningPublishAction.vue')).descriptor.scriptSetup.content
- .replace(/^import .*\r?\n/gm, '')
- const person = name => ({ userName: name, nickName: name, deptName: '设备所属公司' })
- function setup({ eligible = true, candidates } = {}) {
- const calls = [], published = [], events = []
- const props = reactive({ row: { warningId: 'w1', availableActions: ['PUBLISH'] } })
- const api = async query => {
- calls.push(query)
- if (candidates) return candidates(query)
- // 当前用户不在第一页;默认值也必须经过服务端 reviewer 候选校验。
- return { data: { records: query.keyword === 'current' ? (eligible ? [person('current')] : []) : [person('other')] } }
- }
- const factory = new Function('reactive', 'ref', 'ElMessage', 'useUserStore', 'getWarningParticipants',
- 'releaseYjxxData', 'defineProps', 'defineEmits',
- `${script}; return { visible, handler, reviewer, options, open, submit }`)
- const state = factory(reactive, ref, { warning() {}, error() {}, success() {} }, () => ({ name: 'current' }),
- api, async (id, data) => { published.push({ id, data }); return { code: 200 } },
- () => props, () => event => events.push(event))
- return { ...state, props, calls, published, events }
- }
- test('有核验资格才默认当前账户,处置人始终明确选择', async () => {
- for (const eligible of [true, false]) {
- const s = setup({ eligible })
- await s.open()
- assert.equal(s.handler.value, '')
- assert.equal(s.reviewer.value, eligible ? 'current' : '')
- if (eligible) assert.ok(s.options.reviewer.some(p => p.userName === 'current'))
- assert.ok(s.calls.every(q => q.warningId === 'w1'))
- }
- })
- test('默认核验人可改选,发布携带实际选择并通知列表刷新', async () => {
- const s = setup()
- await s.open()
- s.handler.value = 'handler'
- s.reviewer.value = 'other'
- await s.submit()
- assert.deepEqual(s.published, [{ id: 'w1', data: { handler: 'handler', reviewer: 'other' } }])
- assert.equal(s.visible.value, false)
- assert.deepEqual(s.events, ['changed'])
- })
- test('异步默认值不会覆盖手工选择,也不会跨预警或跨弹窗回填', async () => {
- let resolveDefault
- const s = setup({ candidates: query => query.keyword === 'current'
- ? new Promise(resolve => { resolveDefault = resolve }) : Promise.resolve({ data: { records: [person('other')] } }) })
- const first = s.open()
- await new Promise(resolve => setImmediate(resolve))
- s.reviewer.value = 'other'
- resolveDefault({ data: { records: [person('current')] } })
- await first
- assert.equal(s.reviewer.value, 'other')
- const oldSession = s.open()
- await new Promise(resolve => setImmediate(resolve))
- const finishOld = resolveDefault
- s.visible.value = false
- s.props.row.warningId = 'w2'
- const newSession = s.open()
- await new Promise(resolve => setImmediate(resolve))
- finishOld({ data: { records: [person('current')] } })
- await oldSession
- assert.equal(s.reviewer.value, '')
- resolveDefault({ data: { records: [] } })
- await newSession
- assert.equal(s.reviewer.value, '')
- })
- test('预警发布列表同样只根据服务端核验候选默认当前账户', async () => {
- const source = parse(read('../src/views/subSystem/lifeCompany/lAlertInformation/LRelease.vue')).descriptor.scriptSetup.content
- const code = source.slice(source.indexOf('async function handlePublish('), source.indexOf('async function submitPublish('))
- for (const eligible of [true, false]) {
- const form = reactive({ handler: 'old', reviewer: 'old' })
- const run = new Function('publishRow', 'publishForm', 'publishVisible', 'currentUser', 'getWarningParticipants', 'ElMessage',
- `let publishDialogVersion = 0; ${code}; return handlePublish`)(ref(null), form, ref(false), { name: 'current' },
- async query => { assert.equal(query.role, 'reviewer'); return { data: { records: eligible ? [person('current')] : [] } } }, { warning() {} })
- await run({ warningId: 'w1' })
- assert.equal(form.handler, '')
- assert.equal(form.reviewer, eligible ? 'current' : '')
- }
- })
|