Kundenansicht neu E-Fix M2: aboModellFuerKunde liest bei Modus off kein Kundendokument
aboModellFuerKunde las das Kundendokument auch bei KUNDENANSICHT_NEU=off, obwohl neueAnsichtFuerKunde dort sofort false liefert. Alt-Kunden bekamen so eine zusätzliche Lesung und einen neuen Fehlerpfad (ein 503 beim Widerruf des Wechsels ließ die Beenden-Mail der Analyse entfallen, die Team-Aktivierung und GET /api/admin/analyse/:id antworteten mit 500). Jetzt sofort false im Modus off; Pilot und on lesen wie bisher (kein Dokument: false). Test in analyseAboModell.test.js (eingeplanter 503 wird im Modus off nicht verbraucht). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
306c53871d
commit
ddaf2879c4
2 files changed
+25
-1
No files matched your search
@@ -2,7 +2,7 @@ import { config } from '../config.js'
|
|||||||
import { getDocument } from './appwriteAdmin.js'
|
import { getDocument } from './appwriteAdmin.js'
|
||||||
import { ACTIVE_STATUSES, getCurrentSubscription } from './stripeBilling.js'
|
import { ACTIVE_STATUSES, getCurrentSubscription } from './stripeBilling.js'
|
||||||
import { listContractEvents, openWithdrawals } from './contractEvents.js'
|
import { listContractEvents, openWithdrawals } from './contractEvents.js'
|
||||||
import { neueAnsichtFuerKunde } from './kundenansicht/schalter.js'
|
import { neueAnsichtFuerKunde, neueAnsichtModus } from './kundenansicht/schalter.js'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abo-Zuordnung der Funktionen (V5, Spec E3/E8): Welches Abo deckt welche Funktion? Ein Lesepfad (lies) fuer alle
|
* Abo-Zuordnung der Funktionen (V5, Spec E3/E8): Welches Abo deckt welche Funktion? Ein Lesepfad (lies) fuer alle
|
||||||
@@ -98,6 +98,9 @@ export async function aboLaeuftFuer(customerId, key) {
|
|||||||
*/
|
*/
|
||||||
export async function aboModellFuerKunde(customerId) {
|
export async function aboModellFuerKunde(customerId) {
|
||||||
if (typeof customerId !== 'string' || customerId === '') return false
|
if (typeof customerId !== 'string' || customerId === '') return false
|
||||||
|
// Modus off: sofort false, ohne das Kundendokument zu lesen (E-Fix M2). Alt-Kunden bekommen so keine zusätzliche Lesung und keinen neuen Fehlerpfad
|
||||||
|
// (ein transienter Lesefehler liess die Beenden-Mail beim Widerruf des Wechsels und die Team-Aktivierung scheitern).
|
||||||
|
if (neueAnsichtModus() === 'off') return false
|
||||||
let kunde
|
let kunde
|
||||||
try {
|
try {
|
||||||
kunde = await getDocument(config.collections.customers, customerId)
|
kunde = await getDocument(config.collections.customers, customerId)
|
||||||
|
|||||||
@@ -198,3 +198,24 @@ test('Tagesprüfung: Hosting-Analyse bleibt für Kunden der neuen Ansicht, sonst
|
|||||||
assert.equal(await aboModellFuerKunde('gibtEsNicht'), false) // kein Kundendokument: kein Abo-Modell
|
assert.equal(await aboModellFuerKunde('gibtEsNicht'), false) // kein Kundendokument: kein Abo-Modell
|
||||||
assert.equal(await aboModellFuerKunde(''), false)
|
assert.equal(await aboModellFuerKunde(''), false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('M2: aboModellFuerKunde liest bei Modus off kein Kundendokument (keine zusätzliche Lesung, kein neuer Fehlerpfad für Alt-Kunden)', async () => {
|
||||||
|
const vorher = { mode: config.kundenansichtNeu.mode, pilotEmails: [...config.kundenansichtNeu.pilotEmails] }
|
||||||
|
try {
|
||||||
|
Object.assign(config.kundenansichtNeu, { mode: 'off', pilotEmails: ['*'] })
|
||||||
|
// ein transienter Lesefehler (503) trifft im Modus off nie: es wird gar nicht gelesen, die Antwort ist sofort false
|
||||||
|
aw.failNext({ collection: 'customers', method: 'GET', status: 503 })
|
||||||
|
assert.equal(await aboModellFuerKunde('c1'), false)
|
||||||
|
// der eingeplante Fehler ist nicht verbraucht: die erste Lesung im Pilot trifft ihn (Lesefehler werden weitergereicht)
|
||||||
|
Object.assign(config.kundenansichtNeu, { mode: 'pilot', pilotEmails: ['k@example.invalid'] })
|
||||||
|
await assert.rejects(() => aboModellFuerKunde('c1'), (err) => err.status === 500 && err.code === 503) // adminFetch macht aus jedem 5xx den Status 500, code bleibt 503
|
||||||
|
// danach wie bisher: Pilot und on lesen das Kundendokument (kein Dokument: false)
|
||||||
|
assert.equal(await aboModellFuerKunde('c1'), true)
|
||||||
|
assert.equal(await aboModellFuerKunde('gibtEsNicht'), false)
|
||||||
|
Object.assign(config.kundenansichtNeu, { mode: 'on', pilotEmails: [] })
|
||||||
|
assert.equal(await aboModellFuerKunde('c1'), true)
|
||||||
|
assert.equal(await aboModellFuerKunde('gibtEsNicht'), false)
|
||||||
|
} finally {
|
||||||
|
Object.assign(config.kundenansichtNeu, vorher)
|
||||||
|
}
|
||||||
|
})
|
||||||
Reference in new issue
Block a user