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>
58 lines
2.2 KiB
PHP
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']);
|