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>
83 lines
2.6 KiB
PHP
83 lines
2.6 KiB
PHP
<?php
|
||
|
||
use App\Mail\MailCustomMessage;
|
||
use App\User;
|
||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||
use Illuminate\Support\Facades\Mail;
|
||
use Tests\TestCase;
|
||
|
||
uses(TestCase::class, RefreshDatabase::class);
|
||
|
||
/**
|
||
* Der Verlängerungs-Link aus der Mitgliedschafts-Erinnerung muss auf das CRM
|
||
* (my.mivita.care) zeigen. Die Route /user/membership existiert nur dort –
|
||
* auf der Hauptdomain lief der Link in einen 404.
|
||
*/
|
||
beforeEach(function () {
|
||
// Produktivähnliche Domains, sonst greift Util::isTestSystem() und es wird nichts versendet.
|
||
config([
|
||
'app.tld_care' => '.care',
|
||
'app.tld_shop' => '.shop',
|
||
'app.domain' => 'mivita',
|
||
'app.pre_url_crm' => 'my.',
|
||
'app.protocol' => 'https://',
|
||
'app.url' => 'https://mivita.care/',
|
||
]);
|
||
|
||
Mail::fake();
|
||
});
|
||
|
||
function makeReminderUser(int $daysLeft): User
|
||
{
|
||
if (! User::find(1)) {
|
||
User::forceCreate([
|
||
'id' => 1,
|
||
'email' => 'system@example.com',
|
||
'password' => bcrypt('secret'),
|
||
'lang' => 'de',
|
||
]);
|
||
}
|
||
|
||
return User::forceCreate([
|
||
'email' => 'berater-'.uniqid('', true).'@example.com',
|
||
'password' => bcrypt('secret'),
|
||
'lang' => 'de',
|
||
'active' => 1,
|
||
'blocked' => 0,
|
||
'payment_account' => now()->addDays($daysLeft),
|
||
]);
|
||
}
|
||
|
||
it('verlinkt die Mitgliedschafts-Verlängerung auf die CRM-Domain', function () {
|
||
makeReminderUser(10);
|
||
|
||
$this->artisan('payments:check-accounts')->assertSuccessful();
|
||
|
||
Mail::assertSent(MailCustomMessage::class, function (MailCustomMessage $mail) {
|
||
return str_contains($mail->render(), 'https://my.mivita.care/user/membership');
|
||
});
|
||
});
|
||
|
||
it('verlinkt nicht mehr auf die Hauptdomain', function () {
|
||
makeReminderUser(10);
|
||
|
||
$this->artisan('payments:check-accounts')->assertSuccessful();
|
||
|
||
Mail::assertSent(MailCustomMessage::class, function (MailCustomMessage $mail) {
|
||
return ! str_contains($mail->render(), 'https://mivita.care//user/membership')
|
||
&& ! str_contains($mail->render(), 'https://mivita.care/user/membership');
|
||
});
|
||
});
|
||
|
||
it('erklaert in der Erinnerung, was beim Ablauf der Mitgliedschaft passiert', function () {
|
||
makeReminderUser(10);
|
||
|
||
$this->artisan('payments:check-accounts')->assertSuccessful();
|
||
|
||
Mail::assertSent(MailCustomMessage::class, function (MailCustomMessage $mail) {
|
||
$body = $mail->render();
|
||
|
||
return str_contains($body, 'keine Punkte und keine Provisionen mehr gutgeschrieben')
|
||
&& str_contains($body, 'im nächsten Zahlungslauf aus');
|
||
});
|
||
});
|