From 87d4e33632836aeb572e7cc8ac6058fb6bde7132 Mon Sep 17 00:00:00 2001 From: Data-Kiss <39807751+Data-Kiss@users.noreply.github.com> Date: Wed, 9 Oct 2019 19:04:58 +0100 Subject: [PATCH 1/3] WIP --- .../Incident/NewIncidentNotification.php | 14 ++- tests/Functional/Notifications/MailTest.php | 92 +++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 tests/Functional/Notifications/MailTest.php diff --git a/app/Notifications/Incident/NewIncidentNotification.php b/app/Notifications/Incident/NewIncidentNotification.php index c0f956b2..ab5277dc 100644 --- a/app/Notifications/Incident/NewIncidentNotification.php +++ b/app/Notifications/Incident/NewIncidentNotification.php @@ -72,7 +72,19 @@ class NewIncidentNotification extends Notification $content = trans('notifications.incident.new.mail.content', [ 'name' => $this->incident->name, ]); - + + dd(new MailMessage()) + ->subject(trans('notifications.incident.new.mail.subject')) + ->markdown('notifications.incident.new', [ + 'incident' => $this->incident, + 'content' => $content, + 'actionText' => trans('notifications.incident.new.mail.action'), + 'actionUrl' => cachet_route('incident', [$this->incident]), + 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'), + 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code), + 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'), + 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code), + ]); return (new MailMessage()) ->subject(trans('notifications.incident.new.mail.subject')) ->markdown('notifications.incident.new', [ diff --git a/tests/Functional/Notifications/MailTest.php b/tests/Functional/Notifications/MailTest.php new file mode 100644 index 00000000..e302180c --- /dev/null +++ b/tests/Functional/Notifications/MailTest.php @@ -0,0 +1,92 @@ +fakerFactory = \Faker\Factory::create(); + $this->appName = 'MailTest'; + } + + /** + * Setup the application. + */ + public function setUp() + { + parent::setUp(); + $this->app->make(SettingsRepository::class)->set('app_name', $this->appName); + $this->app->config->set('setting.app_name', $this->appName); + } + + public function createSubscriber() + { + dispatch(new SubscribeSubscriberCommand( + $this->fakerFactory->safeEmail, + true + )); + } + + /** + * Send a notification to subscribers when a new incident + * is added. + */ + public function testNotificationSentForNewIncident() + { + Mail::fake(); + + $this->signIn(); + $this->createSubscriber(); + + $response = $this->post('dashboard/incidents/create', [ + 'name' => $this->fakerFactory->word, + 'status' => 1, + 'visible' => 1, + 'message' => $this->fakerFactory->paragraph, + 'notify' => 1 + ]); + + Mail::assertSent(NewIncidentNotification::class); + } +} \ No newline at end of file From 509e7d98da37aa9e23f6e948a44326f119b2e857 Mon Sep 17 00:00:00 2001 From: Data-Kiss <39807751+Data-Kiss@users.noreply.github.com> Date: Thu, 10 Oct 2019 20:04:28 +0100 Subject: [PATCH 2/3] WIP - Tests for notifications --- .../Incident/NewIncidentNotification.php | 14 +- tests/Functional/Notifications/MailTest.php | 128 ++++++++++++++++-- 2 files changed, 114 insertions(+), 28 deletions(-) diff --git a/app/Notifications/Incident/NewIncidentNotification.php b/app/Notifications/Incident/NewIncidentNotification.php index ab5277dc..1b5c7637 100644 --- a/app/Notifications/Incident/NewIncidentNotification.php +++ b/app/Notifications/Incident/NewIncidentNotification.php @@ -72,19 +72,7 @@ class NewIncidentNotification extends Notification $content = trans('notifications.incident.new.mail.content', [ 'name' => $this->incident->name, ]); - - dd(new MailMessage()) - ->subject(trans('notifications.incident.new.mail.subject')) - ->markdown('notifications.incident.new', [ - 'incident' => $this->incident, - 'content' => $content, - 'actionText' => trans('notifications.incident.new.mail.action'), - 'actionUrl' => cachet_route('incident', [$this->incident]), - 'unsubscribeText' => trans('cachet.subscriber.unsubscribe'), - 'unsubscribeUrl' => cachet_route('subscribe.unsubscribe', $notifiable->verify_code), - 'manageSubscriptionText' => trans('cachet.subscriber.manage_subscription'), - 'manageSubscriptionUrl' => cachet_route('subscribe.manage', $notifiable->verify_code), - ]); + return (new MailMessage()) ->subject(trans('notifications.incident.new.mail.subject')) ->markdown('notifications.incident.new', [ diff --git a/tests/Functional/Notifications/MailTest.php b/tests/Functional/Notifications/MailTest.php index e302180c..3ab8d3a4 100644 --- a/tests/Functional/Notifications/MailTest.php +++ b/tests/Functional/Notifications/MailTest.php @@ -15,7 +15,13 @@ use CachetHQ\Tests\Cachet\AbstractTestCase; use Illuminate\Foundation\Testing\DatabaseMigrations; use CachetHQ\Cachet\Settings\Repository as SettingsRepository; use CachetHQ\Cachet\Bus\Commands\Subscriber\SubscribeSubscriberCommand; -use Mail; +use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand; +use CachetHQ\Cachet\Notifications\Incident\NewIncidentNotification; +use CachetHQ\Cachet\Notifications\IncidentUpdate\IncidentUpdatedNotification; +use CachetHQ\Cachet\Models\Subscriber; +use CachetHQ\Cachet\Models\Incident; +use Illuminate\Support\Facades\Notification; +use Illuminate\Support\Str; class MailTest extends AbstractTestCase { @@ -31,6 +37,11 @@ class MailTest extends AbstractTestCase */ protected $appName; + /** + * @var array[]|null + */ + protected $incidents; + /** * @var string */ @@ -58,27 +69,65 @@ class MailTest extends AbstractTestCase parent::setUp(); $this->app->make(SettingsRepository::class)->set('app_name', $this->appName); $this->app->config->set('setting.app_name', $this->appName); - } - - public function createSubscriber() - { - dispatch(new SubscribeSubscriberCommand( - $this->fakerFactory->safeEmail, - true - )); + $this->incidents = [ + ['title' => 'Foo '.Str::random(16), 'description' => 'Foo Bar Baz '.Str::random(32)], + ['title' => 'Foe '.Str::random(16), 'description' => 'Foe Baz Bar '.Str::random(32)], + ]; } /** - * Send a notification to subscribers when a new incident + * Create a new subscriber. + */ + public function createSubscriber($subscriberEmail) + { + dispatch(new SubscribeSubscriberCommand( + $subscriberEmail, + true + )); + + return Subscriber::where('email', '=', $subscriberEmail)->firstOrFail(); + } + + /** + * @param array $incident + * @param array $meta + * + * @return Incident + */ + protected function createIncident(array $incident) + { + $name = $incident['title']; + $message = $incident['description']; + + dispatch(new CreateIncidentCommand( + $name, + $this->fakerFactory->numberBetween(0, 3), + $message, + true, + null, + null, + true, + true, + $this->fakerFactory->date('Y-m-d H:i'), + null, + [] + )); + + return Incident::where('name', '=', $name)->where('message', '=', $message)->firstOrFail(); + } + + /** + * Send an email notification to subscribers when a new incident * is added. */ - public function testNotificationSentForNewIncident() + public function testEmailNotificationSentForNewIncident() { - Mail::fake(); + Notification::fake(); $this->signIn(); - $this->createSubscriber(); + $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + $response = $this->post('dashboard/incidents/create', [ 'name' => $this->fakerFactory->word, 'status' => 1, @@ -86,7 +135,56 @@ class MailTest extends AbstractTestCase 'message' => $this->fakerFactory->paragraph, 'notify' => 1 ]); - - Mail::assertSent(NewIncidentNotification::class); + + Notification::assertSentTo( + [$subscriber], NewIncidentNotification::class + ); + } + + /** + * Do not send an email if notify not checked. + */ + public function testEmailNotificationNotSentWhenNotifyNotCheckedForNewIncident() + { + Notification::fake(); + + $this->signIn(); + + $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + + $response = $this->post('dashboard/incidents/create', [ + 'name' => $this->fakerFactory->word, + 'status' => 1, + 'visible' => 1, + 'message' => $this->fakerFactory->paragraph, + 'notify' => 0 + ]); + + Notification::assertNotSentTo( + [$subscriber], NewIncidentNotification::class + ); + } + + /** + * Send an email notification to subscribers when an incident + * update is added. + */ + public function testEmailNotificationSentForIncidentUpdate() + { + Notification::fake(); + + $this->signIn(); + + $incident = $this->createIncident($this->incidents[1]); + $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + + $response = $this->post('dashboard/incidents/'.$incident->id.'/updates/create', [ + 'status' => 1, + 'message' => $this->fakerFactory->paragraph, + ]); + + Notification::assertSentTo( + [$subscriber], IncidentUpdatedNotification::class + ); } } \ No newline at end of file From f22e4c531ac85e33b67a8375fad3eeb407bfd551 Mon Sep 17 00:00:00 2001 From: Data-Kiss <39807751+Data-Kiss@users.noreply.github.com> Date: Thu, 10 Oct 2019 20:16:26 +0100 Subject: [PATCH 3/3] Fix some style inconsistencies. --- tests/Functional/Notifications/MailTest.php | 32 ++++++++++++--------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/tests/Functional/Notifications/MailTest.php b/tests/Functional/Notifications/MailTest.php index 3ab8d3a4..364d37bc 100644 --- a/tests/Functional/Notifications/MailTest.php +++ b/tests/Functional/Notifications/MailTest.php @@ -11,15 +11,15 @@ namespace CachetHQ\Tests\Cachet\Functional\Notifications; -use CachetHQ\Tests\Cachet\AbstractTestCase; -use Illuminate\Foundation\Testing\DatabaseMigrations; -use CachetHQ\Cachet\Settings\Repository as SettingsRepository; -use CachetHQ\Cachet\Bus\Commands\Subscriber\SubscribeSubscriberCommand; use CachetHQ\Cachet\Bus\Commands\Incident\CreateIncidentCommand; +use CachetHQ\Cachet\Bus\Commands\Subscriber\SubscribeSubscriberCommand; +use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Models\Subscriber; use CachetHQ\Cachet\Notifications\Incident\NewIncidentNotification; use CachetHQ\Cachet\Notifications\IncidentUpdate\IncidentUpdatedNotification; -use CachetHQ\Cachet\Models\Subscriber; -use CachetHQ\Cachet\Models\Incident; +use CachetHQ\Cachet\Settings\Repository as SettingsRepository; +use CachetHQ\Tests\Cachet\AbstractTestCase; +use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Support\Facades\Notification; use Illuminate\Support\Str; @@ -99,6 +99,7 @@ class MailTest extends AbstractTestCase $name = $incident['title']; $message = $incident['description']; + dispatch(new CreateIncidentCommand( $name, $this->fakerFactory->numberBetween(0, 3), @@ -127,13 +128,14 @@ class MailTest extends AbstractTestCase $this->signIn(); $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); - + + $response = $this->post('dashboard/incidents/create', [ - 'name' => $this->fakerFactory->word, - 'status' => 1, + 'name' => $this->fakerFactory->word, + 'status' => 1, 'visible' => 1, 'message' => $this->fakerFactory->paragraph, - 'notify' => 1 + 'notify' => 1 ]); Notification::assertSentTo( @@ -153,11 +155,11 @@ class MailTest extends AbstractTestCase $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); $response = $this->post('dashboard/incidents/create', [ - 'name' => $this->fakerFactory->word, - 'status' => 1, + 'name' => $this->fakerFactory->word, + 'status' => 1, 'visible' => 1, 'message' => $this->fakerFactory->paragraph, - 'notify' => 0 + 'notify' => 0 ]); Notification::assertNotSentTo( @@ -173,13 +175,15 @@ class MailTest extends AbstractTestCase { Notification::fake(); + $this->signIn(); $incident = $this->createIncident($this->incidents[1]); $subscriber = $this->createSubscriber($this->fakerFactory->safeEmail); + $response = $this->post('dashboard/incidents/'.$incident->id.'/updates/create', [ - 'status' => 1, + 'status' => 1, 'message' => $this->fakerFactory->paragraph, ]);