63 lines
2.7 KiB
JavaScript
63 lines
2.7 KiB
JavaScript
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/)
|
|
// Push-Zeitmail: Ticket und Arbeitsblatt kommen mit zurück (nicht doppelt laden)
|
|
assert.equal(r.ticket.woid, '100115')
|
|
assert.equal(r.worksheet.$id, r.worksheetId)
|
|
})
|
|
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)
|
|
})
|