Funktionen: Warnung der Aufbauphase, Abo-Beginn mit Datum, Texte für abgeschaltet und bereits eingeschaltet
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
06166221ec
commit
1742fb254d
4 files changed
+116
-10
No files matched your search
@@ -151,3 +151,17 @@ test('Der Grund einer Abo-Sperre bleibt am Fehler (409 abo_fehlt mit grund)', as
|
||||
assert.deepEqual([a.status, a.code, a.grund], [409, 'abo_fehlt', 'kein_abo'])
|
||||
assert.equal((await fails(api('/funktionen/c1/news', { method: 'POST', body: {} }))).grund, undefined)
|
||||
})
|
||||
|
||||
test('Das Datum eines späteren Abo-Beginns bleibt am Fehler (409 abo_fehlt, beginnt_spaeter mit ab)', async () => {
|
||||
const { api } = client({
|
||||
responses: [
|
||||
reply(409, { error: 'x', code: 'abo_fehlt', grund: 'beginnt_spaeter', ab: '2026-11-03T08:00:00.000Z' }),
|
||||
reply(409, { error: 'y', code: 'abo_fehlt', grund: 'beginnt_spaeter', ab: 5 }),
|
||||
reply(409, { error: 'z', code: 'abo_fehlt', grund: 'beginnt_spaeter' }),
|
||||
],
|
||||
})
|
||||
const a = await fails(api('/funktionen/c6/news', { method: 'POST', body: {} }))
|
||||
assert.deepEqual([a.status, a.code, a.grund, a.ab], [409, 'abo_fehlt', 'beginnt_spaeter', '2026-11-03T08:00:00.000Z'])
|
||||
assert.equal((await fails(api('/funktionen/c6/news', { method: 'POST', body: {} }))).ab, undefined) // kein Text
|
||||
assert.equal((await fails(api('/funktionen/c6/news', { method: 'POST', body: {} }))).ab, undefined) // fehlt
|
||||
})
|
||||
@@ -37,6 +37,7 @@ const {
|
||||
speicherStatus,
|
||||
K16_WARNUNG,
|
||||
K16_WARNUNG_OHNE_UNTERLAGEN,
|
||||
ABO_FEHLT_WARNUNG,
|
||||
warenartLabel,
|
||||
artikelzahlLabel,
|
||||
anfrageStatus,
|
||||
@@ -896,3 +897,59 @@ test('aboFehltText und featureFehlerText: jeder Grund, unbekannter Grund, andere
|
||||
assert.equal(featureFehlerText(fehler('kein_abo', 'andere'), 'news'), 'Text des Portals')
|
||||
assert.equal(featureFehlerText(null, 'news'), 'Speichern fehlgeschlagen.')
|
||||
})
|
||||
|
||||
test('aboFehltText: beginnt_spaeter nennt den Berliner Tag des Beginns, ohne brauchbares Datum bleibt der allgemeine Satz', () => {
|
||||
assert.equal(aboFehltText('beginnt_spaeter', 'termine', '2026-11-03T08:00:00.000Z'), 'Terminplaner: Das Abo beginnt am 03.11.2026. Ab dann kann die Funktion eingeschaltet werden.')
|
||||
// Berliner Kalendertag, nicht UTC: 23:30 UTC am 3.11. ist in Berlin schon der 4.11.
|
||||
assert.equal(aboFehltText('beginnt_spaeter', 'news', '2026-11-03T23:30:00.000Z'), 'News: Das Abo beginnt am 04.11.2026. Ab dann kann die Funktion eingeschaltet werden.')
|
||||
for (const ab of [undefined, null, '', 'kein Datum', 5, {}]) assert.equal(aboFehltText('beginnt_spaeter', 'news', ab), 'News: Das passende Abo fehlt.', String(ab))
|
||||
// das Datum gehört nur zu beginnt_spaeter
|
||||
for (const grund of ['kein_abo', 'falsches_abo', 'gekuendigt', 'nicht_aktiv', 'unbekannt']) {
|
||||
assert.equal(aboFehltText(grund, 'news', '2026-11-03T08:00:00.000Z'), aboFehltText(grund, 'news'), grund)
|
||||
}
|
||||
})
|
||||
|
||||
test('featureFehlerText: beginnt_spaeter trägt das Datum des Fehlers, abgeschaltet und bereits_eingeschaltet haben eigene Texte fürs Team', () => {
|
||||
const fehler = (code, extra = {}) => Object.assign(new Error('Text des Portals (in der Du-Form des Kunden)'), { status: 409, code, ...extra })
|
||||
assert.equal(
|
||||
featureFehlerText(fehler('abo_fehlt', { grund: 'beginnt_spaeter', ab: '2026-11-03T08:00:00.000Z' }), 'shop'),
|
||||
'Webshop: Das Abo beginnt am 03.11.2026. Ab dann kann die Funktion eingeschaltet werden.'
|
||||
)
|
||||
assert.equal(featureFehlerText(fehler('abo_fehlt', { grund: 'beginnt_spaeter' }), 'shop'), 'Webshop: Das passende Abo fehlt.')
|
||||
assert.equal(
|
||||
featureFehlerText(fehler('abgeschaltet'), 'news'),
|
||||
'News: Die Funktion wurde für dieses Projekt abgeschaltet (der Grund steht in der Zeile). Sie lässt sich hier nicht wieder einschalten.'
|
||||
)
|
||||
assert.equal(
|
||||
featureFehlerText(fehler('bereits_eingeschaltet'), 'zeiten'),
|
||||
'Öffnungszeiten live: Die Funktion ist für dieses Projekt schon eingeschaltet. Bitte die Seite neu laden.'
|
||||
)
|
||||
assert.equal(featureFehlerText(fehler('abgeschaltet'), 'unbekannt'), 'unbekannt: Die Funktion wurde für dieses Projekt abgeschaltet (der Grund steht in der Zeile). Sie lässt sich hier nicht wieder einschalten.')
|
||||
// nie der Kundentext des Portals ("du", "Schreib uns im Chat"), und kein Preis
|
||||
for (const code of ['abgeschaltet', 'bereits_eingeschaltet']) {
|
||||
const text = featureFehlerText(fehler(code), 'termine')
|
||||
assert.doesNotMatch(text, /\bdu\b|\bdein|Schreib|Portal|€/i, code)
|
||||
}
|
||||
// ein anderer Code oder ein Fehler ohne Code zeigt wie bisher die Meldung des Portals
|
||||
assert.equal(featureFehlerText(fehler('bestellung_laeuft'), 'news'), 'Text des Portals (in der Du-Form des Kunden)')
|
||||
assert.equal(featureFehlerText(Object.assign(new Error('Netz weg'), { status: 0 }), 'news'), 'Netz weg')
|
||||
})
|
||||
|
||||
test('speicherStatus: warnung "abo_fehlt" (Aufbauphase, noch kein Abo) ist eine eigene Warnung und wird nicht mit der K16-Warnung verwechselt', () => {
|
||||
const aufbau = { projects: [], warnung: 'abo_fehlt', grund: 'kein_abo' }
|
||||
for (const key of [undefined, 'news', 'termine', 'shop', 'zeiten', 'unterkunft']) {
|
||||
assert.deepEqual(speicherStatus(aufbau, key), { ok: false, text: ABO_FEHLT_WARNUNG }, String(key))
|
||||
}
|
||||
assert.equal(ABO_FEHLT_WARNUNG, 'Eingeschaltet. Achtung: Diese Funktion läuft nur mit Wartungs-Abo. Bitte das Abo vor dem Livegang vereinbaren.')
|
||||
assert.doesNotMatch(ABO_FEHLT_WARNUNG, /K16|AVV|Unterlagen|€/)
|
||||
assert.notEqual(ABO_FEHLT_WARNUNG, K16_WARNUNG)
|
||||
assert.notEqual(ABO_FEHLT_WARNUNG, K16_WARNUNG_OHNE_UNTERLAGEN)
|
||||
// die alte boolesche Warnung (K16 ging nicht raus) behält ihren Text, mit und ohne Grund
|
||||
assert.deepEqual(speicherStatus({ projects: [], warnung: true }, 'termine'), { ok: false, text: K16_WARNUNG })
|
||||
assert.deepEqual(speicherStatus({ projects: [], warnung: true }, 'zeiten'), { ok: false, text: K16_WARNUNG_OHNE_UNTERLAGEN })
|
||||
assert.deepEqual(speicherStatus({ projects: [], warnung: true, grund: 'kein_abo' }, 'shop'), { ok: false, text: K16_WARNUNG })
|
||||
// ohne Warnung (oder mit einem Wert, den es nicht gibt) bleibt es bei "Gespeichert."
|
||||
for (const antwort of [{ projects: [] }, { warnung: false }, { warnung: 'unbekannt' }, { warnung: 'abo_fehlt_nicht' }, undefined, null]) {
|
||||
assert.deepEqual(speicherStatus(antwort, 'news'), { ok: true, text: 'Gespeichert.' }, JSON.stringify(antwort))
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user