63 lines
3.0 KiB
JavaScript
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')
|