3 namespace Tests\Settings;
5 use BookStack\Notifications\TestEmail;
6 use Illuminate\Contracts\Notifications\Dispatcher;
7 use Illuminate\Support\Facades\Notification;
10 class TestEmailTest extends TestCase
12 public function test_a_send_test_button_shows()
14 $pageView = $this->asAdmin()->get('/settings/maintenance');
15 $formCssSelector = 'form[action$="/settings/maintenance/send-test-email"]';
16 $this->withHtml($pageView)->assertElementExists($formCssSelector);
17 $this->withHtml($pageView)->assertElementContains($formCssSelector . ' button', 'Send Test Email');
20 public function test_send_test_email_endpoint_sends_email_and_redirects_user_and_shows_notification()
23 $admin = $this->users->admin();
25 $sendReq = $this->actingAs($admin)->post('/settings/maintenance/send-test-email');
26 $sendReq->assertRedirect('/settings/maintenance#image-cleanup');
27 $this->assertSessionHas('success', 'Email sent to ' . $admin->email);
29 Notification::assertSentTo($admin, TestEmail::class);
32 public function test_send_test_email_failure_displays_error_notification()
34 $mockDispatcher = $this->mock(Dispatcher::class);
35 $this->app[Dispatcher::class] = $mockDispatcher;
37 $exception = new \Exception('A random error occurred when testing an email');
38 $mockDispatcher->shouldReceive('sendNow')->andThrow($exception);
40 $admin = $this->users->admin();
41 $sendReq = $this->actingAs($admin)->post('/settings/maintenance/send-test-email');
42 $sendReq->assertRedirect('/settings/maintenance#image-cleanup');
43 $this->assertSessionHas('error');
45 $message = session()->get('error');
46 $this->assertStringContainsString('Error thrown when sending a test email:', $message);
47 $this->assertStringContainsString('A random error occurred when testing an email', $message);
50 public function test_send_test_email_requires_settings_manage_permission()
53 $user = $this->users->viewer();
55 $sendReq = $this->actingAs($user)->post('/settings/maintenance/send-test-email');
56 Notification::assertNothingSent();
58 $this->permissions->grantUserRolePermissions($user, ['settings-manage']);
59 $sendReq = $this->actingAs($user)->post('/settings/maintenance/send-test-email');
60 Notification::assertSentTo($user, TestEmail::class);