import { test, after } from 'node:test' import assert from 'node:assert/strict' import { startAppwriteMock } from './support/appwriteMock.js' import { startFakeStripe } from './support/fakeStripe.js' import { useTestEnv } from './support/testEnv.js' const aw = await startAppwriteMock() const st = await startFakeStripe() useTestEnv({ appwriteUrl: aw.url, stripeUrl: st.url }) const { startTestApp, get, sessionCookie } = await import('./support/testApp.js') const { default: projectsRouter } = await import('../server/routes/projects.js') const app = await startTestApp({ '/api/projects': projectsRouter }) after(() => Promise.all([aw.close(), st.close(), app.close()])) aw.seed('websiteProjects', { $id: 'p1', customerId: 'c1', ticketId: 'wo1', name: 'Website' }) aw.seed('workorders', { $id: 'wo1', woid: '100200', status: 'Open', type: 'Webpage', topic: 'Neue Website', customerId: 'c1' }) const andrej = { employeeId: 'andrej', name: 'Andrej Stevanovski', task: 'Farbkonzept' } const sheet = (id, extra) => ({ $id: id, workorderId: 'wo1', woid: '100200', serviceType: 'Remote', employeeName: 'Justin Klein', totalTime: 60, startDate: '30.09.2026', endDate: '30.09.2026', details: 'Arbeit', isComment: false, ...extra, }) // Neuestes Blatt, damit es auch in getCustomerActivity (max. 20 je Ticket) dabei ist aw.seed('worksheets', sheet('ws1', { supporters: JSON.stringify([andrej]), $createdAt: '2026-09-30T18:00:00.000Z' })) // Mehr als 50 Blaetter: die Gesamtzeit zaehlt trotzdem alle for (let i = 0; i < 55; i++) aw.seed('worksheets', sheet(`wsx${i}`, { totalTime: 15 })) test('GET /:id/work liefert totalMinutes inkl. Unterstützung über alle Blätter', async () => { const body = await get('/api/projects/p1/work', { cookie: sessionCookie({ customerId: 'c1', appwriteUserId: 'u1' }) }) assert.equal(body.totalMinutes, 60 + 30 + 55 * 15) const withSupport = body.entries.find((e) => e.supports) assert.deepEqual(withSupport.supports, [{ name: 'Andrej', task: 'Farbkonzept', minutes: 30 }]) }) test('getCustomerActivity reicht supporters und supportMinutes weiter (Fortschritt + Admin)', async () => { const { getCustomerActivity } = await import('../server/services/customerActivity.js') const [ticket] = await getCustomerActivity('c1') const ws1 = ticket.worksheets.find((w) => w.supporters) assert.equal(ws1.supportMinutes, 30) const { customerWorkEntries } = await import('../server/services/customerProjectView.js') const entry = customerWorkEntries(ticket.worksheets).find((e) => e.supports) assert.deepEqual(entry.supports, [{ name: 'Andrej', task: 'Farbkonzept', minutes: 30 }]) })