mivita/tests/Feature/MembershipViewTextsTest.php
Kevin 30fb031d12 Mitgliedschaft: Erinnerungen und eigenes Verlaengerungs-Produkt
Die Erinnerungsmails vor Ablauf der Mitgliedschaft beschrieben noch den
abgeschafften SEPA-Einzug und verlinkten auf die Hauptdomain, wo
/user/membership nicht existiert. Das Produkt fuer die Verlaengerung war
zudem dasselbe wie bei der Registrierung und sprach deshalb vom
Neuabschluss.

- Erinnerungen: nur noch Stufen 31/33/34/35, SEPA-Stufen 32/36/37 samt
  :price und :pay_date entfallen; Button verlinkt auf my.mivita.care;
  fehlt ein Text zum Status, wird die Mail geloggt statt roh versendet.
- Alle Erinnerungstexte (de/en/es/fr) erklaeren jetzt, dass ohne Zahlung
  der Account pausiert und offene Provisionen ausgezahlt werden.
- Eigenes Produkt fuer die Verlaengerung (identifier show_renewal) als
  Kopie des Mitgliedschafts-Produkts inkl. Preisen, Kategorien und
  Uebersetzungen fuer en/es/fr; die Mitgliedschaftsseite faellt ohne
  dieses Produkt auf das bisherige zurueck.
- Mitgliedschaftsseite auf ein Paket reduziert: Upgrade-, Wechsel- und
  Abo-Optionen entfernt, Texte auf die manuelle Verlaengerung umgestellt.
- Alte Cron-Weboberflaeche entfernt, der Versand laeuft ueber den
  Scheduler (payments:check-accounts).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-26 08:24:32 +00:00

58 lines
2.2 KiB
PHP

<?php
use Illuminate\Support\Facades\Blade;
use Tests\TestCase;
uses(TestCase::class);
/**
* Absicherung der Mitgliedschafts-Ansichten nach der Zusammenlegung auf ein Paket:
* die Templates müssen kompilieren und jeder verwendete Sprachschlüssel muss in
* allen vier Sprachen existieren.
*/
$membershipViews = [
'resources/views/user/membership/index.blade.php',
'resources/views/user/membership/_payment_order.blade.php',
'resources/views/dashboard/_reminder.blade.php',
'resources/views/dashboard/_membership.blade.php',
];
it('kompiliert die Mitgliedschafts-Templates zu gültigem PHP', function (string $view) {
$compiled = Blade::compileString(file_get_contents(base_path($view)));
$tmp = tempnam(sys_get_temp_dir(), 'blade').'.php';
file_put_contents($tmp, $compiled);
exec('php -l '.escapeshellarg($tmp).' 2>&1', $output, $exitCode);
unlink($tmp);
expect($exitCode)->toBe(0, implode("\n", $output));
})->with($membershipViews);
it('kennt jeden verwendeten Sprachschlüssel in allen Sprachen', function (string $view) {
preg_match_all(
"/__\('(membership|reminder)\.([a-zA-Z0-9_]+)'/",
file_get_contents(base_path($view)),
$matches,
PREG_SET_ORDER
);
expect($matches)->not->toBeEmpty();
foreach (['de', 'en', 'es', 'fr'] as $locale) {
foreach ($matches as [$_, $file, $key]) {
$translations = include base_path("resources/lang/$locale/$file.php");
expect(array_key_exists($key, $translations))
->toBeTrue("$locale/$file.php fehlt '$key' (aus $view)");
}
}
})->with(array_diff($membershipViews, ['resources/views/dashboard/_membership.blade.php']));
it('beschreibt nirgends mehr die abgeschaffte automatische Vertragsverlängerung', function (string $locale) {
$membership = include base_path("resources/lang/$locale/membership.php");
foreach (['info_contract_renewal', 'membership_was_renewed', 'contract_renewal', 'change_copy_1', 'change_copy_2'] as $obsolete) {
expect($membership)->not->toHaveKey($obsolete);
}
expect($membership)->toHaveKeys(['renewal_hl', 'renewal_info', 'renewal_expired_info', 'renewal_consequence', 'active_info', 'renewal_possible_from']);
})->with(['de', 'en', 'es', 'fr']);