From 9628ba34d257aada4952d2af28b3c204f19d059a Mon Sep 17 00:00:00 2001 From: philipp lang Date: Fri, 30 May 2025 02:02:32 +0200 Subject: [PATCH] Add filter for preventions to yearly mail --- app/Prevention/Actions/YearlyRememberAction.php | 6 ++++-- app/Prevention/Data/PreventionData.php | 6 ++++++ tests/EndToEnd/Member/PreventionTest.php | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/Prevention/Actions/YearlyRememberAction.php b/app/Prevention/Actions/YearlyRememberAction.php index f0a98ab8..df78546d 100644 --- a/app/Prevention/Actions/YearlyRememberAction.php +++ b/app/Prevention/Actions/YearlyRememberAction.php @@ -29,7 +29,8 @@ class YearlyRememberAction } $noticePreventions = $member->preventions($expireDate) - ->filter(fn($prevention) => $prevention->expiresAt($expireDate)); + ->filter(fn($prevention) => $prevention->expiresAt($expireDate)) + ->filter(fn($p) => $p->appliesToSettings($settings)); if ($noticePreventions->count() === 0) { continue; @@ -45,7 +46,8 @@ class YearlyRememberAction } $preventions = $member->preventions() - ->filter(fn($prevention) => $prevention->expiresAt(now())); + ->filter(fn($prevention) => $prevention->expiresAt(now())) + ->filter(fn($p) => $p->appliesToSettings($settings)); if ($preventions->count() === 0) { continue; diff --git a/app/Prevention/Data/PreventionData.php b/app/Prevention/Data/PreventionData.php index 4fa6a957..dab4c123 100644 --- a/app/Prevention/Data/PreventionData.php +++ b/app/Prevention/Data/PreventionData.php @@ -3,6 +3,7 @@ namespace App\Prevention\Data; use App\Prevention\Enums\Prevention; +use App\Prevention\PreventionSettings; use Carbon\Carbon; use Spatie\LaravelData\Data; @@ -22,4 +23,9 @@ class PreventionData extends Data fn($str) => $str->append(' (fällig am ' . $this->expires->format('d.m.Y') . ')') ); } + + public function appliesToSettings(PreventionSettings $settings): bool + { + return in_array($this->type->name, $settings->preventAgainst); + } } diff --git a/tests/EndToEnd/Member/PreventionTest.php b/tests/EndToEnd/Member/PreventionTest.php index 9501e253..4c70aeb5 100644 --- a/tests/EndToEnd/Member/PreventionTest.php +++ b/tests/EndToEnd/Member/PreventionTest.php @@ -27,6 +27,10 @@ uses(DatabaseTransactions::class); uses(CreatesFormFields::class); uses(EndToEndTestCase::class); +beforeEach(function () { + app(PreventionSettings::class)->fill(['preventAgainst' => array_column(Prevention::values(), 'id')])->save(); +}); + function createForm(): Form { return Form::factory()->fields([ @@ -284,6 +288,17 @@ it('testItDoesntRememberParticipantThatHasNoMail', function () { Mail::assertNotSent(PreventionRememberMail::class); }); +it('doesnt remember when prevent against doesnt match', function () { + Mail::fake(); + app(PreventionSettings::class)->fill(['preventAgainst' => []])->save(); + createMember(['efz' => now()->subYears(5), 'ps_at' => now(), 'has_vk' => true]); + + sleep(2); + YearlyRememberAction::run(); + + Mail::assertNotSent(YearlyMail::class); +}); + it('doesnt send yearly mail when member has no mail', function () { Mail::fake(); createMember(['efz' => now()->subYears(5), 'ps_at' => now(), 'has_vk' => true, 'email' => '', 'email_parents' => '']);