mivita/tests/Feature/MembershipReminderLinkTest.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

83 lines
2.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
});
});