| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import assert from 'node:assert/strict'
- import test from 'node:test'
- import { existsSync } from 'node:fs'
- const modulePath = new URL('../src/views/m/crm/contract/mobileFormState.ts', import.meta.url)
- const deferred = () => {
- let resolve: any
- let reject: any
- const promise = new Promise((a, b) => {
- resolve = a
- reject = b
- })
- return { promise, resolve, reject }
- }
- async function harness() {
- assert.ok(existsSync(modulePath), 'production mobile state helper exists')
- const { createContractPicker } = await import(modulePath.href)
- const calls: any[] = []
- const picker = createContractPicker(async (query: any) => {
- const request = deferred()
- calls.push({ query, ...request })
- return request.promise
- })
- return { picker, calls }
- }
- test('pagination errors retry the same page and preserve selected objects across searches', async () => {
- const { picker: p, calls } = await harness()
- const first = p.search('A')
- calls[0].resolve({ data: { list: [{ id: 'A' }], total: 3 } })
- await first
- p.toggle({ id: 'A' })
- const more = p.more()
- calls[1].reject(new Error('offline'))
- await more
- const retry = p.more()
- assert.equal(calls[2].query.page, 2)
- calls[2].resolve({ rows: [{ id: 'B' }], total: 3 })
- await retry
- const search = p.search('C')
- calls[3].resolve({ rows: [{ id: 'C' }], total: 1 })
- await search
- p.toggle({ id: 'C' })
- assert.deepEqual(
- p.selected.value.map((x: any) => x.id),
- ['A', 'C']
- )
- assert.equal(p.rows.value[0].id, 'C')
- })
- test('invalidating a search or closing prevents stale success and finally writes', async () => {
- const { picker: p, calls } = await harness()
- const first = p.search('A')
- p.invalidate()
- const second = p.search('B')
- calls[0].resolve({ rows: [{ id: 'old' }] })
- await first
- assert.equal(p.loading.value, true)
- assert.deepEqual(p.rows.value, [])
- calls[1].resolve({ rows: [{ id: 'new' }] })
- await second
- assert.equal(p.rows.value[0].id, 'new')
- p.close()
- assert.deepEqual(p.selected.value, [])
- })
|