Files
zyt/server/tests/pharmacy/mapping_request_race.mjs
T
2026-07-22 14:50:34 +08:00

63 lines
3.0 KiB
JavaScript

import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import { createLatestRequestGuard } from '../../../admin/src/views/pharmacy/medicine_mapping/latest-request.mjs'
const list = createLatestRequestGuard()
const firstList = list.next({ page_no: 1, local_name: 'A' })
const secondList = list.next({ page_no: 2, local_name: 'B' })
assert.deepEqual(firstList.snapshot, { page_no: 1, local_name: 'A' })
assert.equal(list.isLatest(firstList), false)
assert.equal(list.isLatest(secondList), true)
const catalog = createLatestRequestGuard()
const rowA = catalog.next({ localMedicineId: 1, keyword: 'A' })
catalog.invalidate()
const rowB = catalog.next({ localMedicineId: 2, keyword: 'B' })
assert.equal(catalog.isLatest(rowA), false)
assert.equal(catalog.isLatest(rowB), true)
assert.deepEqual(rowB.snapshot, { localMedicineId: 2, keyword: 'B' })
const statusRequests = createLatestRequestGuard()
const mountedStatus = statusRequests.next({ source: 'mount' })
const syncedStatus = statusRequests.next({ source: 'sync' })
const savedStatus = statusRequests.next({ source: 'save' })
const unlinkedStatus = statusRequests.next({ source: 'unlink' })
assert.equal(statusRequests.isLatest(mountedStatus), false)
assert.equal(statusRequests.isLatest(syncedStatus), false)
assert.equal(statusRequests.isLatest(savedStatus), false)
assert.equal(statusRequests.isLatest(unlinkedStatus), true)
list.next({ page_no: 3, local_name: 'C' })
catalog.invalidate()
assert.equal(statusRequests.isLatest(unlinkedStatus), true)
const page = readFileSync(
new URL('../../../admin/src/views/pharmacy/medicine_mapping/index.vue', import.meta.url),
'utf8'
)
assert.match(page, /medicineMappingLists\(ticket\.snapshot\)/)
assert.match(page, /listRequests\.isLatest\(ticket\)/)
assert.match(page, /catalogRequests\.invalidate\(\)/)
assert.match(page, /catalogRequests\.isLatest\(ticket\)/)
assert.match(page, /localMedicineId/)
assert.match(page, /const initialTicket = await searchCatalogNow\(rowSnapshot\.local_name, localMedicineId\)/)
assert.match(page, /catalogRequests\.isLatest\(initialTicket\)/)
assert.match(page, /const statusRequests = createLatestRequestGuard/)
const loadStatusStart = page.indexOf('const loadStatus = async () => {')
const loadStatusEnd = page.indexOf('\nconst search =', loadStatusStart)
assert.ok(loadStatusStart >= 0 && loadStatusEnd > loadStatusStart)
const loadStatusSource = page.slice(loadStatusStart, loadStatusEnd)
assert.match(loadStatusSource, /const ticket = statusRequests\.next\(undefined\)/)
assert.match(loadStatusSource, /const nextStatus = await medicineMappingStatus\(\)/)
assert.match(
loadStatusSource,
/if \(statusRequests\.isLatest\(ticket\)\) \{\s*status\.value = nextStatus\s*\}/
)
assert.match(
loadStatusSource,
/finally\s*\{\s*if \(statusRequests\.isLatest\(ticket\)\) \{\s*statusLoading\.value = false\s*\}/
)
assert.equal(page.match(/loadStatus\(\)/g)?.length, 4)
console.log('zyt mapping latest-request behavior and production wiring passed: 25')