feat(documents): allow archiving inbox documents
This commit is contained in:
@@ -167,6 +167,84 @@ test('filing failure preserves the document and selected values for retry', asyn
|
||||
assert.equal(ui.run('canFile.value'), true)
|
||||
})
|
||||
|
||||
test('archiving needs no classification, waits for confirmation and updates the list, preview and badge', async t => {
|
||||
const pending = deferred()
|
||||
const staleList = deferred()
|
||||
const requests = []
|
||||
let listings = 0
|
||||
const ui = setup((url, options) => {
|
||||
requests.push({ url, options })
|
||||
if (url.endsWith('/archive')) return pending.promise
|
||||
if (url.endsWith('/filing-options')) return Promise.resolve({ folders: [], types: [] })
|
||||
if (url.endsWith('/suggestion')) return Promise.resolve({ status: 'pending', suggestion: null })
|
||||
if (++listings === 1) return staleList.promise
|
||||
return Promise.resolve({ documents: [{ id: 'remaining' }], total: 50 })
|
||||
})
|
||||
t.after(ui.close)
|
||||
ui.run('documents.value = [{ id: "scan", name: "scan.pdf" }]; total.value = 51; page.value = 2')
|
||||
await ui.run('openPreview(documents.value[0])')
|
||||
await settle()
|
||||
assert.equal(ui.run('canFile.value'), false)
|
||||
ui.run('openArchive(documents.value[0])')
|
||||
assert.equal(requests.some(request => request.url.endsWith('/archive')), false)
|
||||
const listing = ui.run('load(true)')
|
||||
const saving = ui.run('archiveDocument()')
|
||||
await ui.run('archiveDocument()')
|
||||
await ui.run('fileDocument()')
|
||||
assert.equal(requests.filter(request => request.url.endsWith('/archive')).length, 1)
|
||||
assert.equal(requests.some(request => request.url.endsWith('/file')), false)
|
||||
assert.equal(ui.run('documents.value.length'), 1)
|
||||
pending.resolve({ id: 'scan', archived: true })
|
||||
await saving
|
||||
staleList.resolve({ documents: [{ id: 'scan' }], total: 51 })
|
||||
await listing
|
||||
assert.equal(requests.find(request => request.url.endsWith('/archive')).options.method, 'POST')
|
||||
assert.equal(ui.run('archiveOpen.value'), false)
|
||||
assert.equal(ui.run('previewOpen.value'), false)
|
||||
assert.equal(ui.run('documents.value[0].id'), 'remaining')
|
||||
assert.equal(ui.run('total.value'), 50)
|
||||
assert.equal(ui.run('page.value'), 1)
|
||||
assert.equal(ui.countRefreshes(), 1)
|
||||
})
|
||||
|
||||
test('archive cancellation and failure preserve the document and allow a retry from the list', async t => {
|
||||
let calls = 0
|
||||
const ui = setup(async () => { calls++; throw { data: { message: 'Archivieren fehlgeschlagen' } } })
|
||||
t.after(ui.close)
|
||||
ui.run('documents.value = [{ id: "scan", name: "scan.pdf" }]; total.value = 1; openArchive(documents.value[0])')
|
||||
await settle()
|
||||
ui.run('archiveOpen.value = false')
|
||||
await settle()
|
||||
assert.equal(ui.run('archiveTarget.value'), null)
|
||||
assert.equal(calls, 0)
|
||||
ui.run('openArchive(documents.value[0])')
|
||||
await ui.run('archiveDocument()')
|
||||
assert.equal(ui.run('archiveError.value'), 'Archivieren fehlgeschlagen')
|
||||
assert.equal(ui.run('archiveOpen.value'), true)
|
||||
assert.equal(ui.run('archiveSaving.value'), false)
|
||||
assert.equal(ui.run('documents.value[0].id'), 'scan')
|
||||
assert.equal(ui.run('total.value'), 1)
|
||||
assert.equal(ui.countRefreshes(), 0)
|
||||
})
|
||||
|
||||
test('archive responses from a previous tenant or unmounted page cannot update the current view', async t => {
|
||||
for (const action of ['tenant', 'unmount']) {
|
||||
const pending = deferred()
|
||||
const ui = setup(url => url.endsWith('/archive') ? pending.promise : Promise.resolve({ documents: [{ id: 'tenant-2' }], total: 1 }))
|
||||
t.after(ui.close)
|
||||
ui.run('documents.value = [{ id: "scan", name: "scan.pdf" }]; total.value = 1; openArchive(documents.value[0])')
|
||||
const saving = ui.run('archiveDocument()')
|
||||
if (action === 'tenant') ui.auth.activeTenant = '2'
|
||||
else ui.close()
|
||||
await settle()
|
||||
pending.resolve({ id: 'scan', archived: true })
|
||||
await saving
|
||||
assert.equal(ui.run('documents.value[0].id'), action === 'tenant' ? 'tenant-2' : 'scan')
|
||||
assert.equal(ui.countRefreshes(), 0)
|
||||
if (action === 'tenant') assert.equal(ui.run('archiveOpen.value'), false)
|
||||
}
|
||||
})
|
||||
|
||||
test('tenant switching discards pending folder options and filing responses', async t => {
|
||||
for (const stage of ['options', 'save']) {
|
||||
const pending = deferred()
|
||||
|
||||
Reference in New Issue
Block a user