Shop J2: Datenschutzerklärung Abschnitt 6d Webshop (Auftragsverarbeitung, Stripe Connect, Fristen), PDF neu, Test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 09:19:31 +00:00
1 parent 172d9f1778
commit 9283ff42c1
4 files changed
+39 -4

No files matched your search

+31 -2
View File
@@ -548,11 +548,11 @@ test('legal_datenschutz_kundenansicht: Abschnitt 6 nennt Kundenansicht, Sperren,
// ---------------------------------------------------------------- Abschnitt 6c und Funktionsbestellung (TP2 F12a)
/** Der Block von <h2 id="termine"> bis vor <h2>7. in public/datenschutz.html (roh, mit Tags). */
/** Der Block von <h2 id="termine"> bis vor die nächste Überschrift (6d Webshop) in public/datenschutz.html (roh, mit Tags). */
const block6c = (html = read(DS)) => {
const a = html.indexOf('<h2 id="termine">')
assert.ok(a >= 0, '<h2 id="termine"> fehlt')
const b = html.indexOf('<h2>7. ', a)
const b = html.indexOf('<h2', a + 5)
assert.ok(b > a)
return html.slice(a, b)
}
@@ -593,6 +593,35 @@ test('legal_datenschutz_termine: Abschnitt 6c steht zwischen 6b und 7 und nennt
])
})
test('legal_datenschutz_webshop: Abschnitt 6d steht zwischen 6c und 7 und nennt Rolle, Stripe Connect, Orte und Fristen', () => {
const html = read(DS)
const termine = html.indexOf('id="termine"')
const webshop = html.indexOf('id="webshop"')
const sieben = html.indexOf('<h2>7. ')
assert.ok(termine > 0 && webshop > termine && sieben > webshop, 'Reihenfolge 6c < 6d < 7')
assert.equal(html.split('id="webshop"').length - 1, 1)
assert.ok(html.includes('<h2 id="webshop">6d. Webshop auf Websites unserer Kunden</h2>'))
const roh = html.slice(webshop, sieben)
assert.ok(!roh.includes('<!--'), 'kein Kommentar im Block')
const text = strip(roh)
assert.ok(text.includes('ausschließlich als Auftragsverarbeiter nach den Weisungen des jeweiligen Kunden'))
assert.ok(text.includes('Auftragsverarbeitungsvertrag Webshop'))
// Stripe Connect: Weitergabe von E-Mail, Website und Projektname auf Klick, Konto-ID und Stand, Rechtsgrundlage, Hinweise von Stripe
assert.ok(text.includes('Stripe Payments Europe, Limited') && text.includes('Dublin'))
assert.ok(text.includes('seine E-Mail-Adresse, die Adresse seiner Website und den Namen seines Projekts'))
assert.ok(text.includes('Wir speichern die Kennung des Stripe-Kontos und seinen Stand'))
assert.ok(text.includes('Art. 6 Abs. 1 lit. b DSGVO') && text.includes('stripe.com/de/privacy'))
assert.ok(text.includes('wir erhalten und verwahren kein Geld der Käufer'))
// Orte und Fristen wie im AVV Webshop
for (const s of ['Falkenstein', 'Nürnberg', 'nach 30 Tagen', 'drei Jahre nach dem Ende des Jahres der Bestellung', '90 Tage', 'bis zu sieben Tage', 'Sitzungsspeicher', 'nicht dauerhaft']) assert.ok(text.includes(s), `6d: ${s}`)
assert.ok(text.includes('Eine Ausnahme ist das Einrichtungs-Ticket'))
// kein Abo-Bezug: der Webshop endet mit dem Vertrag über den Betrieb der Website (Entscheidung W5)
assert.ok(text.includes('endet der Vertrag über den Betrieb seiner Website'))
assert.ok(!text.includes('Wartungs-Abo') && !text.includes('Hosting-Abo'), '6d nennt kein bestimmtes Abo')
// Empfängerliste nennt den Webshop bei Stripe
assert.ok(strip(html).includes('Eröffnung des Stripe-Kontos für den Webshop unserer Kunden (Abschnitte 6d und 7)'))
})
test('datenschutz_6c_gleich_markdown: der Block in public/datenschutz.html ist die Markdown-Quelle, die Quelle ist ohne Entwurfs- und Prüflisten-Reste', () => {
const md = read('docs/rechtliches/termine-datenschutz-6c.md').replace(/\r/g, '')
const fence = /```html\n([\s\S]*?)\n```/.exec(md)