Terminplaner: Widerrufsfunktion im Satzrahmen des Musters, Belehrung nur mit Anschrift und Telefon

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-03 08:17:43 +00:00
1 parent 459efff10a
commit 0c033ab1d2
3 files changed
+56 -42

No files matched your search

+28 -25
View File
@@ -64,18 +64,19 @@ test('Belehrung: alle Muster-Absaetze der Anlage 1 stehen wörtlich darin, nur d
}
})
test('Belehrung: Widerrufsfunktion als „anderer geeigneter Hinweis“, Rest des Gesetzeswortlauts unverändert', () => {
test('Belehrung: Satzrahmen der Widerrufsfunktion wörtlich aus der Anlage, nur die Lücke „…“ ist mit einem geeigneten Hinweis gefüllt', () => {
const text = belehrung()
const m = /Wenn Sie diese Online-Funktion nutzen, ([^“]+?)\s*“/.exec(ANLAGE_1)
assert.ok(m, 'Gestaltungshinweis zur Widerrufsfunktion fehlt in anlage-1.txt')
assert.ok(m[1].includes('Eingangsbestätigung') && m[1].includes('Uhrzeit ihres Eingangs'))
const absatz = 'Sie können Ihr Widerrufsrecht auch online über die Schaltfläche „Vertrag widerrufen“ ausüben, '
+ 'die Sie im Terminbereich auf unserer Website und über den Link „Termin verwalten“ in Ihrer Bestätigungs-E-Mail finden. '
+ `Wenn Sie diese Online-Funktion nutzen, ${m[1]}`
assert.ok(text.includes(absatz), 'Absatz zur Widerrufsfunktion fehlt oder weicht ab')
assert.ok(text.includes('Vertrag widerrufen'))
assert.ok(!text.includes('online unter'), 'keine Internetadresse, kein Parameter')
assert.ok(!/https?:\/\//.test(text))
// Rahmen und Gesetzesteil kommen aus anlage-1.txt, nichts davon ist hier abgeschrieben:
// „Sie können Ihr Widerrufsrecht auch online unter … [Internetadresse oder anderen geeigneten Hinweis …] ausüben. Wenn Sie diese Online-Funktion nutzen, …“
const m = /„(Sie können Ihr Widerrufsrecht auch online unter) … \[[^\]]+\] (ausüben\.) (Wenn Sie diese Online-Funktion nutzen, [^“]+?)\s*“/.exec(ANLAGE_1)
assert.ok(m, 'Gestaltungshinweis zur Widerrufsfunktion fehlt oder hat sich geändert in anlage-1.txt')
assert.ok(m[3].includes('Eingangsbestätigung') && m[3].includes('Uhrzeit ihres Eingangs'))
const hinweis = '„Vertrag widerrufen“ (Schaltfläche im Terminbereich auf unserer Website sowie Link „Termin verwalten“ in Ihrer Bestätigungs-E-Mail)'
const absatz = `${m[1]} ${hinweis} ${m[2]} ${m[3]}`
assert.ok(text.includes(absatz), 'Absatz zur Widerrufsfunktion fehlt oder weicht vom Satzrahmen der Anlage ab')
assert.ok(text.includes('Vertrag widerrufen') && text.includes('Termin verwalten'))
assert.ok(!/https?:\/\/|www\./.test(text), 'keine Internetadresse, kein Parameter')
assert.ok(!text.includes('über die Schaltfläche'), 'kein umformulierter Satzrahmen')
})
test('Belehrung: Wertersatz für Dienstleistungen, Unzutreffendes (Wasser/Gas/Strom/Fernwärme) gestrichen', () => {
@@ -130,23 +131,25 @@ test('Belehrung: reiner Text mit Zeilenumbrüchen, nicht HTML-maskiert (die Mail
assert.equal(belehrung(), belehrung(), 'deterministisch')
})
test('Belehrung: fehlende Telefonnummer oder Anschrift hinterlässt keine leeren Klammern oder Kommas', () => {
const ohneTel = belehrung({ ...BETRIEB, telefon: '' })
assert.ok(ohneTel.includes('uns (Salon Müller & Söhne, Hauptstraße 1, 67722 Winnweiler, E-Mail: info@salon-mueller.de)'))
assert.ok(!ohneTel.includes('Telefon:'))
const ohneAdresse = belehrung({ ...BETRIEB, adresse: '', telefon: undefined })
assert.ok(ohneAdresse.includes('uns (Salon Müller & Söhne, E-Mail: info@salon-mueller.de)'))
assert.ok(ohneAdresse.includes('An Salon Müller & Söhne, info@salon-mueller.de:'))
assert.ok(!/,\s*,|\(\s*,|,\s*\)|:\s*,/.test(ohneAdresse))
})
test('Belehrung: Betriebsname und E-Mail sind Pflicht, Leerraum in Angaben wird zu einem Leerzeichen', () => {
assert.throws(() => widerrufsbelehrung({ ...BETRIEB, name: '' }), TypeError)
assert.throws(() => widerrufsbelehrung({ ...BETRIEB, email: undefined }), TypeError)
test('Belehrung: Name, Anschrift, Telefon und E-Mail sind Pflicht, eine unvollständige Belehrung entsteht nie (TypeError)', () => {
for (const feld of ['name', 'adresse', 'telefon', 'email']) {
for (const leer of [undefined, null, '', ' ', ' \n\t ', 42, {}]) {
assert.throws(() => widerrufsbelehrung({ ...BETRIEB, [feld]: leer }), TypeError, `${feld}=${JSON.stringify(leer)}`)
}
const ohne = { ...BETRIEB }
delete ohne[feld]
assert.throws(() => widerrufsbelehrung(ohne), TypeError, `${feld} fehlt`)
}
assert.throws(() => widerrufsbelehrung({ name: 'Salon Müller', email: 'info@salon.de' }), TypeError)
assert.throws(() => widerrufsbelehrung(undefined), TypeError)
assert.throws(() => widerrufsbelehrung(null), TypeError)
assert.throws(() => widerrufsbelehrung('Salon'), TypeError)
})
test('Belehrung: Leerraum in den Angaben wird zu einem Leerzeichen, vollständige Angaben stehen in Klammer und „An“-Zeile', () => {
const text = belehrung({ ...BETRIEB, name: ' Salon \n Müller ', adresse: 'Hauptstraße 1,\n67722 Winnweiler' })
assert.ok(text.includes('uns (Salon Müller, Hauptstraße 1, 67722 Winnweiler, Telefon:'))
assert.ok(text.includes('uns (Salon Müller, Hauptstraße 1, 67722 Winnweiler, Telefon: 06301 1234, E-Mail: info@salon-mueller.de)'))
assert.ok(text.includes('An Salon Müller, Hauptstraße 1, 67722 Winnweiler, info@salon-mueller.de:'))
})
test('Belehrung ist die Quelle von docs/rechtliches/termine-widerrufsbelehrung-muster.md (Platzhalter-Fassung steht dort wörtlich)', () => {