Shop Review B I-5: Bestaetigen nur ohne Platzhalter, Musterkopf und mit Adresse der Widerrufsfunktion
pruefeBestaetigbar listet die Probleme in Du-Form; POST /api/shop/rechtstexte/bestaetigen antwortet 400 nicht_bestaetigbar mit der Liste, GET und PUT liefern sie als probleme mit. Der Reiter Rechtliches zeigt die Punkte im Bestaetigungsblock und sperrt den Knopf. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1f56b86791
commit
2f4f360a21
6 files changed
+169
-15
No files matched your search
@@ -12,6 +12,8 @@ import {
|
||||
vollstaendig,
|
||||
rechtstexteHash,
|
||||
BESTAETIGUNG_TEXT,
|
||||
pruefeBestaetigbar,
|
||||
MUSTER_KOPFZEILE,
|
||||
} from '../server/services/shop/rechtstexte.js'
|
||||
import { STANDARD_EINSTELLUNGEN } from '../server/services/shop/einstellungen.js'
|
||||
|
||||
@@ -340,3 +342,35 @@ test('Markdown-Muster und Code teilen die Kernsaetze', () => {
|
||||
assert.ok(md.includes('Wir tragen die Kosten der Rücksendung der Waren.'))
|
||||
assert.doesNotMatch(md, /ec\.europa\.eu\/consumers\/odr/)
|
||||
})
|
||||
|
||||
test('pruefeBestaetigbar I-5: Muster mit Platzhaltern, Kopfzeile oder ohne Adresse der Widerrufsfunktion lässt sich nicht bestätigen', () => {
|
||||
const leer = JSON.parse(JSON.stringify(STANDARD_EINSTELLUNGEN))
|
||||
const roh = { agb: musterAgb(leer), widerrufsbelehrung: musterWiderrufsbelehrung(leer, {}), widerrufsformular: musterWiderrufsformular(leer) }
|
||||
const p = pruefeBestaetigbar(roh, { widerrufUrl: WIDERRUF_URL })
|
||||
const alle = p.join('\n')
|
||||
for (const s of ['[Name]', '[Anschrift]', '[E-Mail-Adresse]', '[Internetadresse der Widerrufsfunktion]', '[Lieferzeit]', MUSTER_KOPFZEILE, WIDERRUF_URL]) assert.ok(alle.includes(s), s)
|
||||
assert.match(alle, /^In den AGB stehen noch Platzhalter/m)
|
||||
assert.match(alle, /dem Muster-Widerrufsformular/)
|
||||
|
||||
// ausgefuellt, ohne Kopfzeile, mit Adresse: keine Probleme
|
||||
const e = basis()
|
||||
const gut = {
|
||||
agb: musterAgb(e).replace(`${MUSTER_KOPFZEILE}\n\n`, ''),
|
||||
widerrufsbelehrung: musterWiderrufsbelehrung(e, { widerrufUrl: WIDERRUF_URL }),
|
||||
widerrufsformular: musterWiderrufsformular(e),
|
||||
}
|
||||
assert.deepEqual(pruefeBestaetigbar(gut, { widerrufUrl: WIDERRUF_URL }), [])
|
||||
// nur die Kopfzeile
|
||||
assert.equal(pruefeBestaetigbar({ ...gut, agb: musterAgb(e) }, { widerrufUrl: WIDERRUF_URL }).length, 1)
|
||||
// Belehrung ohne die Adresse
|
||||
const ohneUrl = pruefeBestaetigbar({ ...gut, widerrufsbelehrung: gut.widerrufsbelehrung.replace(WIDERRUF_URL, 'https://anders.example/') }, { widerrufUrl: WIDERRUF_URL })
|
||||
assert.equal(ohneUrl.length, 1)
|
||||
assert.match(ohneUrl[0], /Adresse deiner Widerrufsfunktion enthalten: https:\/\/brot\.example\/shop#widerruf/)
|
||||
// ohne bekannte Adresse wird sie nicht verlangt; beliebige Angabe in eckigen Klammern zaehlt, einzelne Zeichen nicht
|
||||
assert.deepEqual(pruefeBestaetigbar(gut, {}), [])
|
||||
assert.equal(pruefeBestaetigbar({ ...gut, agb: `${gut.agb}\n[Zahlungsarten]` }, { widerrufUrl: WIDERRUF_URL }).length, 1)
|
||||
assert.deepEqual(pruefeBestaetigbar({ ...gut, agb: `${gut.agb}\nSiehe Anlage [1]` }, { widerrufUrl: WIDERRUF_URL }), [])
|
||||
// fehlende Texte stoeren hier nicht (das prueft vollstaendig)
|
||||
assert.doesNotThrow(() => pruefeBestaetigbar(null))
|
||||
assert.deepEqual(pruefeBestaetigbar({}, { widerrufUrl: WIDERRUF_URL }), [])
|
||||
})
|
||||
Reference in new issue
Block a user