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, []) })