Öffnungszeiten: Tests und Belehrung nach dem Merge mit TP2

Zeiten nutzen die echte Widerrufsbelehrung wie der Terminplaner (der Platzhalter BELEHRUNG_PLATZHALTER ist
mit TP2 F7 entfallen). Gepinnte Listen als Vereinigung beider Seiten: K15-Blöcke, T16-Blöcke, legal-Schlüssel der
Projektliste, hindernis in der Team-Ansicht für alle Funktionen. Neue Tests: Abnahme (Freischalten) der Zeiten über den
Haken freischaltbar und mit Ersatz-Hash, abnahme gibt für Zeiten nie ab.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-05 04:43:20 +00:00
1 parent 1d5a565e9f
commit 019833d385
6 files changed
+71 -19

No files matched your search

+24 -2
View File
@@ -180,6 +180,27 @@ test('Team aktiviert eine abgeschaltete Funktion wieder: setup, Abschaltgrund ge
assert.match(doc.adminNote, / Andrej: activate \| alte Notiz$/)
})
// Merge mit TP2: die Aktionen abnahme und ticket gibt es fuer jede Funktion mit ticketFreischaltung; fuer die Zeiten darf
// abnahme weder abschalten noch den Gratis-Pfad nehmen, sondern gibt in setup frei (Haken freischaltbar, Ersatz-Hash)
test('Team „Freischalten (Abnahme)“ der Zeiten: ohne Zeiten 409 (bleibt setup), mit Zeiten active mit Ersatz-Hash, nie disabled', async () => {
const doc = featureDoc('p1', { ticketId: 't_offen', einbau: 'angestossen' })
aw.seed('workorders', { $id: 't_offen', woid: '10002', topic: 'Zeiten', status: 'Open', customerId: 'c1' })
aw.seed('portalFeatures', doc)
const zu = await aktion('abnahme')
assert.equal(zu.status, 409, JSON.stringify(zu.body))
assert.equal(zeitenDoc().state, 'setup')
assert.equal(sink.sent.length, 0)
await mitZeiten(doc, EIN_PLAN())
const ok = await aktion('abnahme')
assert.equal(ok.status, 200, JSON.stringify(ok.body))
assert.equal(ok.body.projects[0].features.zeiten.state, 'active')
assert.equal(zeitenDoc().state, 'active')
assert.match((await ladeZeiten(doc.$id)).ersatzHash, /^[0-9a-f]{16}$/)
assert.equal(sink.sent.length, 1, 'K16 an den Kunden')
assert.equal(ok.body.ersatzTicket, undefined, 'abnahme legt kein Ersatz-Ticket an')
})
test('Aktivieren: fremdes oder unbekanntes Projekt 403, unbekannte Aktion 400, ohne Anmeldung 401, nichts entsteht', async () => {
assert.equal((await aktion('activate', {}, { projectId: 'p3' })).status, 403)
assert.equal((await aktion('activate', {}, { projectId: 'gibtsnicht' })).status, 403)
@@ -527,9 +548,10 @@ test('adminView zeigt Pläne, team und hindernis (nur für zeiten)', async () =>
assert.equal(z2.teamVersion, 0)
assert.equal(z2.hindernis, 'zeiten_fehlen')
// andere Funktionen bekommen die Felder nicht
// andere Funktionen bekommen die Zeiten-Felder nicht; hindernis tragen seit TP2 alle (null ausser beim Terminplaner in setup)
for (const key of ['news', 'termine']) {
for (const feld of ['plaene', 'team', 'teamVersion', 'hindernis']) assert.equal(feld in projekte[0].features[key], false, `${key}.${feld}`)
for (const feld of ['plaene', 'team', 'teamVersion']) assert.equal(feld in projekte[0].features[key], false, `${key}.${feld}`)
assert.equal(projekte[0].features[key].hindernis, null, `${key}.hindernis`)
}
})