import { test, before, after } from 'node:test' import assert from 'node:assert/strict' import { startFakeAppwrite } from './helpers/fakeAppwrite.js' let fake let createGitPushWorksheet before(async () => { fake = await startFakeAppwrite({ seed: { workorders: [{ $id: 't1', woid: '100115', status: 'Assigned' }], worksheets: [{ $id: 'w0', wsid: '100077', woid: '100001', details: '' }], }, }) Object.assign(process.env, { APPWRITE_ENDPOINT: fake.endpoint, APPWRITE_API_KEY: 'test-key', }) // config.js liest die Umgebung beim Import ;({ createGitPushWorksheet } = await import('../server/services/gitWorksheet.js')) }) after(async () => { await fake.close() }) const base = { ticketId: 't1', repoFullName: 'WEBklar/D-ner-Nation', branch: 'main', commits: [{ id: '26bc22ecf17e2e5a5a8794dcb4cf3892f802c51d', message: 'Döner Nation Website hinzufügen', author: { name: 'JUSN' } }], pusher: { login: 'JUSN', username: 'JUSN', full_name: '' }, commitSha: '26bc22ecf17e2e5a5a8794dcb4cf3892f802c51d', } test('Push-Zeit in deutscher Zeit', async () => { const r = await createGitPushWorksheet({ ...base, pushedAt: new Date('2026-09-27T14:46:34Z') }) assert.equal(r.created, true) const ws = fake.get('worksheets', r.worksheetId) assert.equal(ws.wsid, '100078') assert.equal(ws.employeeName, 'JUSN') assert.deepEqual([ws.startDate, ws.startTime, ws.endDate, ws.endTime], ['27.09.2026', '', '27.09.2026', '1646']) assert.equal(ws.totalTime, 0); assert.equal(ws.isComment, true); assert.equal(ws.serviceType, 'GIT') assert.match(ws.details, /Commit: 26bc22e/) }) test('zweiter Aufruf: Duplikat', async () => { assert.deepEqual(await createGitPushWorksheet({ ...base }), { skipped: true, reason: 'duplicate_commit' }) }) test('System-Konto erzeugt kein Arbeitsblatt', async () => { const before = fake.all('worksheets').length for (const name of ['webklar-system', 'WEBKLAR-SYSTEM']) { const r = await createGitPushWorksheet({ ...base, commitSha: 'aaaaaaa1', pusher: { login: name, username: name, full_name: '' } }) assert.deepEqual(r, { skipped: true, reason: 'system_pusher' }) } assert.equal(fake.all('worksheets').length, before) }) test('gleichzeitige Zustellung ergibt ein Arbeitsblatt', async () => { const args = { ...base, commitSha: 'bbbbbbb2' } const results = await Promise.all([createGitPushWorksheet(args), createGitPushWorksheet(args)]) assert.equal(results.filter((r) => r?.created).length, 1) assert.equal(fake.all('worksheets').filter((w) => w.details.includes('Commit: bbbbbbb')).length, 1) })