Freischaltung ueber das Register mit Pruefung von Einstellung und Abo

activateClosedTickets oeffnet jetzt alle Funktionen mit ticketFreischaltung im Register
(ticketFreischaltungKeys) statt fest news und fragt unter der Sperre feature-activate:<id>
nach dem frischen Lesen den Haken freischaltbar(doc). Der Standard fuer termine verlangt eine
gespeicherte Einstellung und ein laufendes Wartungs-Abo. false oder Fehler (z. B. Abo nicht
lesbar) lassen das Dokument in setup: Log und genau ein adminNote-Eintrag "Freischaltung
wartet: <Grund>", keine Mail. News bleibt unveraendert.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-04 13:35:57 +00:00
1 parent f4754f573a
commit f57dad73ca
4 files changed
+541 -10

No files matched your search

+29 -7
View File
@@ -232,15 +232,37 @@ test('activate gilt fuer jede Funktion gleich: News verliert disabledAt ebenfall
assert.equal((await sf.activate(news.$id, {})).disabledAt, null)
})
test('activateClosedTickets bleibt bei News (TP2): ein termine-Dokument im Zustand setup wird nicht angefasst', async () => {
aw.seed('portalFeatures', { $id: 'f_setup_termine', customerId: 'c1', projectId: 'pt2', featureKey: 'termine', state: 'setup', enabled: false, siteKey: 'bbbbbbbbbbbbbbbb', ticketId: 't_closed' })
aw.seed('workorders', { $id: 't_closed', woid: 'WO-9', status: 'Closed' })
const done = await sf.activateClosedTickets({ customerId: 'c1' })
assert.deepEqual(done.map((d) => d.featureKey), [])
assert.equal(aw.docs('portalFeatures').get('f_setup_termine').state, 'setup')
test('activateClosedTickets: Funktionen mit ticketFreischaltung; News verhaelt sich unveraendert (TP2)', async () => {
const { deleteDocument } = await import('../server/services/appwriteAdmin.js')
const { config } = await import('../server/config.js')
await deleteDocument(config.collections.portalFeatures, 'f_setup_termine')
const seedSetup = (id, featureKey, siteKey, ticketId) => {
aw.seed('portalFeatures', { $id: id, customerId: 'c1', projectId: 'pt2', featureKey, state: 'setup', enabled: false, siteKey, ticketId })
aw.seed('workorders', { $id: ticketId, woid: 'WO-9', status: 'Closed' })
}
seedSetup('f_setup_termine', 'termine', 'bbbbbbbbbbbbbbbb', 't_closed_termine')
seedSetup('f_setup_news', 'news', 'cccccccccccccccc', 't_closed_news')
seedSetup('f_setup_analyse', 'analyse', 'dddddddddddddddd', 't_closed_analyse')
const ids = ['f_setup_termine', 'f_setup_news', 'f_setup_analyse']
const reg = await import('../server/services/featureRegistry.js')
try {
assert.deepEqual(reg.ticketFreischaltungKeys(), ['news', 'termine'])
// News wie bisher; Termine wartet auf Einstellung und Abo (Haken freischaltbar); Analyse hat keine ticketFreischaltung
const done = await sf.activateClosedTickets({ customerId: 'c1' })
assert.deepEqual(done.map((d) => d.featureKey), ['news'])
assert.equal(aw.docs('portalFeatures').get('f_setup_news').state, 'active')
assert.equal(aw.docs('portalFeatures').get('f_setup_termine').state, 'setup')
assert.match(aw.docs('portalFeatures').get('f_setup_termine').adminNote, /Freischaltung wartet/)
assert.equal(aw.docs('portalFeatures').get('f_setup_analyse').state, 'setup')
assert.ok(!aw.docs('portalFeatures').get('f_setup_analyse').adminNote)
// Sind die Voraussetzungen der Funktion erfuellt (Haken), oeffnet derselbe Lauf auch Termine - Analyse bleibt zu
config.features.termine.freischaltbar = async () => true
const spaeter = await sf.activateClosedTickets({ customerId: 'c1' })
assert.deepEqual(spaeter.map((d) => d.featureKey), ['termine'])
assert.equal(aw.docs('portalFeatures').get('f_setup_analyse').state, 'setup')
} finally {
delete config.features.termine.freischaltbar
for (const id of ids) await deleteDocument(config.collections.portalFeatures, id)
}
})
test('disableCustomerFeatures: schaltet nur die genannte Funktion des Kunden ab, mit Notiz', async () => {