41 lines
2.4 KiB
JavaScript
41 lines
2.4 KiB
JavaScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { loadModule } from './load.mjs'
|
|
|
|
const { createWorksheetFlow, acquisitionOutcome } = await loadModule('src/lib/worksheetFlow.js')
|
|
async function run(ticket, newStatus, over = {}) {
|
|
const calls = { ticket: [], customer: [] }
|
|
const result = await createWorksheetFlow({
|
|
ticket, worksheetData: { newStatus }, user: { $id: 'u' },
|
|
createWorksheet: async () => over.result ?? { success: true },
|
|
updateTicket: async (id, data) => { calls.ticket.push([id, data]) },
|
|
updateCustomer: async (id, data) => { calls.customer.push([id, data]); if (over.customerFails) throw new Error('weg') },
|
|
now: () => new Date('2026-10-05T10:00:00Z'),
|
|
})
|
|
return { result, calls }
|
|
}
|
|
const akq = { $id: 't1', type: 'Akquise', status: 'In Kontakt', customerId: 'c1' }
|
|
test('Akquise + Zugesagt: Status zurückschreiben, Kunde fest', async () => {
|
|
const { calls } = await run(akq, 'Zugesagt')
|
|
assert.deepEqual(calls.ticket, [['t1', { status: 'Zugesagt' }]])
|
|
assert.deepEqual(calls.customer, [['c1', { customerStatus: 'customer', updatedAt: '2026-10-05T10:00:00.000Z' }]])
|
|
})
|
|
test('Akquise + Abgesagt: Kunde verloren', async () => {
|
|
assert.deepEqual((await run(akq, 'Abgesagt')).calls.customer, [['c1', { customerStatus: 'lost', updatedAt: '2026-10-05T10:00:00.000Z' }]])
|
|
})
|
|
test('Akquise + In Kontakt: keine Änderung', async () => {
|
|
assert.deepEqual((await run(akq, 'In Kontakt')).calls, { ticket: [], customer: [] })
|
|
assert.deepEqual((await run({ ...akq, status: 'Zugesagt' }, 'In Kontakt')).calls.customer, [])
|
|
})
|
|
test('Nicht-Akquise ändert nie den Kunden, Status nur bei Abweichung', async () => {
|
|
for (const status of ['Zugesagt', 'Abgesagt', 'Closed']) assert.deepEqual((await run({ ...akq, type: 'Webpage', status: 'Open' }, status)).calls.customer, [])
|
|
assert.deepEqual((await run({ ...akq, type: 'Webpage', status: 'Closed' }, 'Closed')).calls.ticket, [])
|
|
assert.deepEqual((await run({ ...akq, customerId: '' }, 'Zugesagt')).calls.customer, [])
|
|
})
|
|
test('Fehlschlag und Kundenfehler', async () => {
|
|
const failed = await run(akq, 'Zugesagt', { result: { success: false, error: 'x' } })
|
|
assert.deepEqual(failed, { result: { success: false, error: 'x' }, calls: { ticket: [], customer: [] } })
|
|
assert.equal((await run(akq, 'Zugesagt', { customerFails: true })).result.success, true)
|
|
assert.equal(acquisitionOutcome({ type: 'Akquise', customerId: 'c' }, 'Zugesagt'), 'customer')
|
|
})
|