seed(RolesAndPermissionsSeeder::class); Mail::fake(); }); function suppressionAdmin(): User { $admin = User::factory()->create(['is_active' => true]); $admin->assignRole('admin'); test()->actingAs($admin); return $admin; } test('a newsroom whose only address bounced is not claimable and says why', function () { /** @var TestCase $this */ Company::factory()->create(['portal' => 'businessportal24', 'slug' => 'tot-gmbh', 'email' => 'presse@tot.example', 'name' => 'Tot GmbH']); app(EmailSuppressionService::class)->suppress('presse@tot.example', EmailSuppressionReason::HardBounce, 'imap'); $this->get('https://businessportal24.test/de/newsroom/tot-gmbh/verwalten') ->assertOk() ->assertSeeText('nicht mehr erreichbar') ->assertDontSeeText('Anmeldelink senden'); $this->post('https://businessportal24.test/de/newsroom/tot-gmbh/verwalten')->assertSessionHas('newsroom-claim-unreachable'); Mail::assertNothingQueued(); }); test('the admin company page marks unreachable company and contact addresses', function () { /** @var TestCase $this */ suppressionAdmin(); $company = Company::factory()->create(['email' => 'presse@tot.example']); Contact::factory()->for($company)->create(['email' => 'kontakt@tot.example', 'portal' => $company->portal->value]); app(EmailSuppressionService::class)->suppress('presse@tot.example', EmailSuppressionReason::HardBounce, 'imap'); app(EmailSuppressionService::class)->suppress('kontakt@tot.example', EmailSuppressionReason::HardBounce, 'imap'); LivewireVolt::test('admin.companies.show', ['id' => $company->id]) ->assertSee('E-Mail nicht erreichbar') ->call('setTab', 'contacts') ->assertSee('kontakt@tot.example') ->assertSeeInOrder(['nicht erreichbar', 'kontakt@tot.example']); }); test('the suppression list shows, releases and manually suppresses addresses', function () { /** @var TestCase $this */ $admin = suppressionAdmin(); app(EmailSuppressionService::class)->suppress('presse@tot.example', EmailSuppressionReason::HardBounce, 'imap'); $component = LivewireVolt::test('admin.mail.suppressions') ->assertSee('presse@tot.example') ->assertSee('Postfach existiert nicht'); $component->call('release', EmailSuppression::query()->firstOrFail()->id); expect(app(EmailSuppressionService::class)->isSuppressed('presse@tot.example'))->toBeFalse() ->and(EmailSuppression::query()->first()->released_by_user_id)->toBe($admin->id); $component->set('newEmail', 'Neu@Tot.example')->set('newNote', 'von Hand')->call('suppress')->assertHasNoErrors(); expect(app(EmailSuppressionService::class)->isSuppressed('neu@tot.example'))->toBeTrue(); $this->get(route('admin.mail.suppressions'))->assertOk()->assertSeeText('Mail-Sperrliste'); });