Shop Review B I-8: Webshop ohne Zahlung nur mit Zustimmung in Textform aktivieren
Das Textform-Formular (Haken, Datum, Weg, Chat-Vorlage) gilt wie beim Terminplaner auch fuer den Webshop, wenn das Portal im Feld shop textformNoetig meldet. Kaestchentext und Chat-Vorlage nennen die Unterlagen des Webshops, die Fassung und die Erklaerungen, die das Portal im Nachweis speichert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0a2eab85d5
commit
00fa229235
4 files changed
+112
-23
No files matched your search
@@ -20,6 +20,9 @@ const {
|
||||
textformNoetig,
|
||||
termineTextformLabel,
|
||||
termineChatTemplate,
|
||||
shopTextformLabel,
|
||||
shopChatTemplate,
|
||||
TEXTFORM_FUNKTIONEN,
|
||||
textformAnsicht,
|
||||
textformBereit,
|
||||
featureBody,
|
||||
@@ -393,6 +396,71 @@ test('textformNoetig: nur "Aktivieren (ohne Zahlung)" des Terminplaners und nur,
|
||||
assert.equal(textformNoetig(undefined, 'activate', termine()), false)
|
||||
})
|
||||
|
||||
// Feld "shop" der Portal-Antwort GET /funktionen/:customerId (Fassung = config.shop.fassung)
|
||||
const shopFeld = (extra = {}) => ({
|
||||
textformNoetig: true,
|
||||
avvVersion: '2026-10-05',
|
||||
links: {
|
||||
lb: 'https://project.webklar.com/rechtliches/leistungsbeschreibung-webshop-2026-10-05.html',
|
||||
avv: 'https://project.webklar.com/rechtliches/avv-webshop-2026-10-05.html',
|
||||
},
|
||||
...extra,
|
||||
})
|
||||
|
||||
test('textformNoetig: auch das Aktivieren (ohne Zahlung) des Webshops, mit dem Feld shop; die Funktion kommt aus dem Schlüssel', () => {
|
||||
assert.deepEqual(TEXTFORM_FUNKTIONEN, ['termine', 'shop'])
|
||||
assert.equal(textformNoetig('shop', 'activate', shopFeld()), true)
|
||||
assert.equal(textformNoetig('shop', 'activate', shopFeld({ textformNoetig: false })), false)
|
||||
assert.equal(textformNoetig('shop', 'activate', undefined), false, 'altes Portal ohne Feld shop: wie bisher')
|
||||
assert.equal(textformNoetig('shop', 'activate', null), false)
|
||||
assert.equal(textformNoetig('shop', 'activate', shopFeld({ textformNoetig: 'true' })), false, 'nur echtes true')
|
||||
for (const action of ['disable', 'abnahme', 'ticket']) assert.equal(textformNoetig('shop', action, shopFeld()), false, action)
|
||||
assert.equal(textformNoetig('news', 'activate', shopFeld()), false)
|
||||
})
|
||||
|
||||
test('shopTextformLabel und shopChatTemplate: wörtlich, mit Fassung, den Erklärungen des Nachweises und den versionierten Adressen', () => {
|
||||
const l = shopTextformLabel('2026-10-05')
|
||||
assert.equal(l.lb, 'Leistungsbeschreibung Webshop')
|
||||
assert.equal(l.avv, 'Auftragsverarbeitungsvertrag Webshop')
|
||||
assert.equal(
|
||||
l.before + l.lb + l.between + l.avv + l.after,
|
||||
'Der Kunde hat der Leistungsbeschreibung Webshop und dem Auftragsverarbeitungsvertrag Webshop (Fassung 2026-10-05) ' +
|
||||
'in Textform zugestimmt und bestätigt, dass er als Unternehmer in eigenem Namen verkauft, für seine Produkte, Preise, Produktangaben und Rechtstexte selbst verantwortlich ist, ' +
|
||||
'keine der in der Leistungsbeschreibung ausgeschlossenen Waren verkauft und die Zahlungen seiner Käufer über sein eigenes Stripe-Konto laufen.',
|
||||
)
|
||||
const { lb, avv } = shopFeld().links
|
||||
const text = shopChatTemplate('2026-10-05', { lb, avv })
|
||||
assert.ok(text.startsWith('Damit wir den Webshop für Dich einschalten können, brauchen wir Deine Zustimmung in Textform. '))
|
||||
assert.ok(text.includes(`in der Fassung 2026-10-05: ${lb} · ${avv}. `))
|
||||
assert.match(text, /leistungsbeschreibung-webshop-2026-10-05\.html/)
|
||||
assert.match(text, /avv-webshop-2026-10-05\.html/)
|
||||
assert.match(text, /Ich stimme zu/)
|
||||
assert.match(text, /eigenes Stripe-Konto/)
|
||||
assert.ok(!text.includes('undefined') && !text.includes('{') && !text.includes('Terminplaner'))
|
||||
})
|
||||
|
||||
test('textformAnsicht(feld, "shop"): Label, Vorlage und Links des Webshops; ohne Schlüssel bleibt es der Terminplaner', () => {
|
||||
const a = textformAnsicht(shopFeld(), 'shop')
|
||||
assert.equal(a.version, '2026-10-05')
|
||||
assert.deepEqual(a.links, shopFeld().links)
|
||||
assert.deepEqual(a.label, shopTextformLabel('2026-10-05'))
|
||||
assert.equal(a.vorlage, shopChatTemplate('2026-10-05', shopFeld().links))
|
||||
assert.deepEqual(textformAnsicht(termine()).label, termineTextformLabel('2026-10-05'))
|
||||
// Adressen ohne https werden nie Link, ohne beide Adressen keine Vorlage
|
||||
const schlecht = textformAnsicht(shopFeld({ links: { lb: 'javascript:alert(1)', avv: 'http://x.example/a.html' } }), 'shop')
|
||||
assert.deepEqual(schlecht.links, { lb: '', avv: '' })
|
||||
assert.equal(schlecht.vorlage, '')
|
||||
assert.equal(textformAnsicht(undefined, 'shop').version, '')
|
||||
})
|
||||
|
||||
test('textformBereit mit dem Feld shop: Datum zwischen Fassung und heute, ohne Fassung nie bereit', () => {
|
||||
const ok = { confirmed: true, date: '2026-10-06', channel: 'email', today: '2026-10-07' }
|
||||
assert.equal(textformBereit(ok, shopFeld()), true)
|
||||
assert.equal(textformBereit({ ...ok, date: '2026-10-04' }, shopFeld()), false, 'vor der Fassung')
|
||||
assert.equal(textformBereit(ok, shopFeld({ avvVersion: '' })), false)
|
||||
assert.equal(textformBereit(ok, undefined), false)
|
||||
})
|
||||
|
||||
test('termineChatTemplate: wörtlich, mit Fassung und den beiden versionierten Adressen', () => {
|
||||
const { lb, avv } = termine().links
|
||||
assert.equal(
|
||||
|
||||
Reference in new issue
Block a user