public function setUp() { parent::setUp(); Yii::app()->user->userModel = User::getByUsername('super'); EmailMessage::deleteAll(); Notification::deleteAll(); }
public function testSendSystemEmail() { if (!EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) { $this->markTestSkipped(Zurmo::t('EmailMessagesModule', 'Test email settings are not configured in perInstanceTest.php file.')); } $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; Yii::app()->imap->connect(); EmailMessage::deleteAll(); // Expunge all emails from dropbox Yii::app()->imap->deleteMessages(true); $this->assertEquals(0, EmailMessage::getCount()); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); $subject = "System Message"; $textMessage = "System message content."; $htmlMessage = "<strong>System</strong> message content."; EmailMessageHelper::sendSystemEmail($subject, array(Yii::app()->imap->imapUsername), $textMessage, $htmlMessage); sleep(30); Yii::app()->imap->connect(); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(1, $imapStats->Nmsgs); $this->assertEquals(1, EmailMessage::getCount()); $emailMessages = EmailMessage::getAll(); $emailMessage = $emailMessages[0]; $this->assertEquals('System Message', $emailMessage->subject); $this->assertEquals('System message content.', trim($emailMessage->content->textContent)); $this->assertEquals('<strong>System</strong> message content.', trim($emailMessage->content->htmlContent)); $this->assertEquals(1, count($emailMessage->recipients)); foreach ($emailMessage->recipients as $recipient) { $this->assertEquals($recipient->toAddress, Yii::app()->imap->imapUsername); $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipient->type); } }
public function setUp() { parent::setUp(); $this->user = User::getByUsername('super'); Yii::app()->user->userModel = $this->user; EmailAccount::deleteAll(); EmailMessage::deleteAll(); EmailMessageContent::deleteAll(); EmailMessageSender::deleteAll(); EmailMessageRecipient::deleteAll(); EmailMessageSendError::deleteAll(); FileModel::deleteAll(); }
public function setUp() { parent::setUp(); $this->user = User::getByUsername('super'); Yii::app()->user->userModel = $this->user; EmailAccount::deleteAll(); EmailMessage::deleteAll(); EmailMessageContent::deleteAll(); EmailMessageSender::deleteAll(); EmailMessageRecipient::deleteAll(); EmailMessageSendError::deleteAll(); FileModel::deleteAll(); if (!EmailMessageTestHelper::isSetEmailAccountsTestConfiguration()) { $this->markTestSkipped('Please fix the test email settings'); } }
public function testRunWithCampaignPausedAfterAllItemsGeneratedAndThenUnpaused() { // Cleanup Campaign::deleteAll(); $this->assertEquals(0, Campaign::getCount()); $this->assertEquals(0, CampaignItem::getCount()); $this->assertEquals(0, CampaignItemActivity::getCount()); MarketingList::deleteAll(); $this->assertEquals(0, MarketingList::getCount()); $this->assertEquals(0, MarketingListMember::getCount()); EmailMessage::deleteAll(); $this->assertEquals(0, EmailMessage::getCount()); $this->assertEquals(0, EmailMessageContent::getCount()); $this->assertEquals(0, EmailMessageSender::getCount()); $this->assertEquals(0, EmailMessageRecipient::getCount()); Contact::deleteAll(); $this->assertEquals(0, Contact::getCount()); // setup an email address for contacts $email = new Email(); $email->emailAddress = '*****@*****.**'; // create a marketing list with 5 members $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList 05'); $marketingListId = $marketingList->id; for ($i = 1; $i <= 5; $i++) { $contact = ContactTestHelper::createContactByNameForOwner('campaignContact 0' . $i, $this->user); $contact->primaryEmail = $email; $this->assertTrue($contact->save()); MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact); } $marketingList->forgetAll(); // create a due campaign with that marketing list $campaign = CampaignTestHelper::createCampaign('campaign 04', 'subject', 'text Content', 'Html Content', null, null, null, null, null, null, MarketingList::getById($marketingListId)); $campaignId = $campaign->id; /* * Run 1: * CampaignGenerateDueCampaignItemsJob * status == processing * items generated but unprocessed * * CampaignQueueMessagesInOutboxJob * status == processing * items processed with email messages generated and queued * * ProcessOutboundEmailJob * status == processing * email items attempted to be sent * * Run 2: * Pause the campaign * items are processed and still present * * Unpause the campaign * status == active * items are processed and still present * * CampaignGenerateDueCampaignItemsJob * status == processing * ensure all items are present and processed * * CampaignQueueMessagesInOutboxJob * status == processing * ensure all items are present and processed * ensure all email messages are present with correct folder type * * ProcessOutboundEmailJob * ensure all email messages are present with correct folder type * status == processing * * * Run 3: * Mark Campaign as Completed * status == completed */ // we have to do this to ensure when we retrieve the data status is updated from db. $campaign->forgetAll(); $this->assertEmpty(CampaignItem::getAll()); // Run 1 starts here // Run CampaignGenerateDueCampaignItemsJob $job = new CampaignGenerateDueCampaignItemsJob(); $this->assertTrue($job->run()); $campaign = Campaign::getById($campaignId); // ensure status is processing $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status); // ensure 5 campaign items have been generated $this->assertEquals(5, CampaignItem::getCount()); // ensure all 5 campaign items are unprocessed $campaignItems = CampaignItem::getByProcessedAndCampaignId(0, $campaignId); $this->assertNotEmpty($campaignItems); $this->assertCount(5, $campaignItems); // Run CampaignQueueMessagesInOutboxJob $job = new CampaignQueueMessagesInOutboxJob(); $this->assertTrue($job->run()); // Ensure campaign status $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status); // ensure all 5 campaign items are processed $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId); $this->assertNotEmpty($campaignItems); $this->assertCount(5, $campaignItems); // Ensure 5 new email messages $this->assertEquals(5, EmailMessage::getCount()); $this->assertEquals(5, EmailHelper::getQueuedCount()); // Run ProcessOutboundEmail $job = new ProcessOutboundEmailJob(); $this->assertTrue($job->run()); // Ensure all email were sent $this->assertEquals(5, EmailMessage::getCount()); $this->assertEquals(0, EmailHelper::getQueuedCount()); foreach (EmailMessage::getAll() as $emailMessage) { $this->assertEquals($emailMessage->folder->type, EmailFolder::TYPE_SENT); } // Ensure campaign status $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status); // end of Run 1 // Run 2 starts here // Pause the campaign $campaign->status = Campaign::STATUS_PAUSED; $this->assertTrue($campaign->save()); // ensure campaign items are still there $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId); $this->assertCount(5, $campaignItems); $this->assertNotEmpty($campaignItems); // Unpause campaign $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_PAUSED, $campaign->status); $campaign->status = Campaign::STATUS_ACTIVE; $this->assertTrue($campaign->save()); // ensure campaign items are still there $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId); $this->assertCount(5, $campaignItems); $this->assertNotEmpty($campaignItems); // Ensure status change $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_ACTIVE, $campaign->status); // Run CampaignGenerateDueCampaignItemsJob $job = new CampaignGenerateDueCampaignItemsJob(); $this->assertTrue($job->run()); // Ensure campaign status change $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status); // ensure all 5 (previously created in run1) campaign items are still processed $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId); $this->assertNotEmpty($campaignItems); $this->assertCount(5, $campaignItems); // Run CampaignQueueMessagesInOutboxJob $job = new CampaignQueueMessagesInOutboxJob(); $this->assertTrue($job->run()); // Ensure campaign status $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status); // ensure all 5 (previously created in run1) campaign items are still processed $campaignItems = CampaignItem::getByProcessedAndCampaignId(1, $campaignId); $this->assertNotEmpty($campaignItems); $this->assertCount(5, $campaignItems); // Ensure all 5 (previously created and sent in run1) emails are sent. $this->assertEquals(5, EmailMessage::getCount()); foreach (EmailMessage::getAll() as $emailMessage) { $this->assertEquals($emailMessage->folder->type, EmailFolder::TYPE_SENT); } // Run ProcessOutboundEmail $job = new ProcessOutboundEmailJob(); $this->assertTrue($job->run()); // Ensure all 5 (previously created and sent in run1) emails are sent. $this->assertEquals(5, EmailMessage::getCount()); foreach (EmailMessage::getAll() as $emailMessage) { $this->assertEquals($emailMessage->folder->type, EmailFolder::TYPE_SENT); } // Ensure campaign status $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_PROCESSING, $campaign->status); // end of Run 2 // Run 3 starts here // Run CampaignMarkCompleted $job = new CampaignMarkCompletedJob(); $this->assertTrue($job->run()); // Ensure campaign status change $campaign = Campaign::getById($campaignId); $this->assertEquals(Campaign::STATUS_COMPLETED, $campaign->status); // end of Run 3 }
/** * @depends testSendQueued */ public function testSendQueuedSkipsPausedCampaignMessages() { EmailMessage::deleteAll(); $job = new CampaignQueueMessagesInOutboxJob(); $email = new Email(); $email->emailAddress = '*****@*****.**'; $contact = ContactTestHelper::createContactByNameForOwner('contact', $this->user); $contact->primaryEmail = $email; $this->assertTrue($contact->save()); $marketingList = MarketingListTestHelper::createMarketingListByName('marketingList'); MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact); $campaign = CampaignTestHelper::createCampaign('campaign', 'subject', 'text Content', 'Html Content', null, null, null, Campaign::STATUS_PROCESSING, null, 0, $marketingList); $processed = 0; CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact); $this->assertTrue($job->run()); $campaignItems = CampaignItem::getAll(); $this->assertCount(1, $campaignItems); $campaignItemsProcessed = CampaignItem::getByProcessedAndCampaignId(1, $campaign->id); $this->assertCount(1, $campaignItemsProcessed); $campaign->status = Campaign::STATUS_PAUSED; $this->assertTrue($campaign->save()); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); Yii::app()->emailHelper->sendQueued(); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); }
public function testSubmittingDuplicateNotifications() { $user = $this->user; Notification::deleteAll(); EmailMessage::deleteAll(); $message = new NotificationMessage(); $message->textContent = 'text content'; $message->htmlContent = 'html content'; $rules = new SimpleNotificationRules(); $rules->setCritical(true); $rules->setAllowDuplicates(false); $rules->addUser($user); NotificationsUtil::submit($message, $rules); $this->assertEquals(1, Yii::app()->emailHelper->getSentCount()); $this->assertCount(1, Notification::getAll()); NotificationsUtil::submit($message, $rules); $this->assertEquals(1, Yii::app()->emailHelper->getSentCount()); $this->assertCount(1, Notification::getAll()); $rules->setAllowDuplicates(true); NotificationsUtil::submit($message, $rules); $this->assertEquals(2, Yii::app()->emailHelper->getSentCount()); $this->assertCount(2, Notification::getAll()); }
public function testTaskStatusBecomesRejectedNotificationWhenOwnerIsNotCurrentUser() { $task = new Task(); $task->name = 'RejectOwner Task'; $task->requestedByUser = self::$sally; $task->owner = self::$katie; $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); $this->assertTrue($task->save()); $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); EmailMessage::deleteAll(); $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount()); //Now change status $task->status = Task::STATUS_REJECTED; $this->assertTrue($task->save()); //One email should be queued up $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount()); $emailMessages = EmailMessage::getAllByFolderType(EmailFolder::TYPE_OUTBOX); $this->assertCount(1, $emailMessages); $this->assertEquals(1, $emailMessages[0]->recipients->count()); $this->assertEquals('*****@*****.**', $emailMessages[0]->recipients[0]->toAddress); }
/** * Check if only new messages are pulled from dropdown * Also check case if message will be matched with user/contact/account primary email * * @depends testRunCaseFour */ public function testRunCaseFive() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $user = User::getByUsername('steve'); Yii::app()->imap->connect(); ContactTestHelper::createContactByNameForOwner('contact', $user); $contacts = Contact::getByName('contact contactson'); $contacts[0]->primaryEmail->emailAddress = Yii::app()->params['emailTestAccounts']['testEmailAddress']; $this->assertTrue($contacts[0]->save()); AccountTestHelper::createAccountByNameForOwner('account', $user); $accounts = Account::getByName('account'); $accounts[0]->primaryEmail->emailAddress = Yii::app()->params['emailTestAccounts']['testEmailAddress']; $this->assertTrue($accounts[0]->save()); $john = User::getByUsername('john'); $john->primaryEmail->emailAddress = Yii::app()->params['emailTestAccounts']['testEmailAddress']; $this->assertTrue($john->save()); EmailMessage::deleteAll(); Yii::app()->imap->deleteMessages(true); // Check if there are no emails in dropbox $job = new EmailArchivingJob(); $this->assertTrue($job->run()); $this->assertEquals(0, EmailMessage::getCount()); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); //Now user send email to another user, and to dropbox $pathToFiles = Yii::getPathOfAlias('application.modules.emailMessages.tests.unit.files'); Yii::app()->emailHelper->sendRawEmail("Email from Steve 3", $user->primaryEmail->emailAddress, array(Yii::app()->params['emailTestAccounts']['testEmailAddress']), 'Email from Steve', '<strong>Email</strong> from Steve', null, array(Yii::app()->imap->imapUsername), null, self::$userMailer); sleep(30); $job = new EmailArchivingJob(); $this->assertTrue($job->run()); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); $this->assertEquals(2, EmailMessage::getCount()); $emailMessages = EmailMessage::getAll(); $emailMessage = $emailMessages[1]; $this->assertEquals('Email from Steve 3', $emailMessage->subject); $this->assertEquals('Email from Steve', trim($emailMessage->content->textContent)); $this->assertEquals('<!-- zurmo css inline --><strong>Email</strong> from Steve', preg_replace("/\r|\n/", "", $emailMessage->content->htmlContent)); $this->assertEquals($user->primaryEmail->emailAddress, $emailMessage->sender->fromAddress); $this->assertEquals(1, count($emailMessage->recipients)); $recipient = $emailMessage->recipients[0]; $this->assertCount(3, $recipient->personsOrAccounts); $this->assertEquals($recipient->toAddress, Yii::app()->params['emailTestAccounts']['testEmailAddress']); $this->assertEquals(EmailMessageRecipient::TYPE_TO, $recipient->type); $this->assertEquals(EmailFolder::TYPE_ARCHIVED, $emailMessage->folder->type); $job = new EmailArchivingJob(); $this->assertTrue($job->run()); $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed(); $this->assertEquals(0, $imapStats->Nmsgs); $this->assertEquals(2, EmailMessage::getCount()); $this->assertEquals(1, Notification::getCountByTypeAndUser('EmailMessageArchivingEmailAddressNotMatching', $user)); }
/** * Test Case: email from User to Contact and CC to another Contact and BCC archive. * Expected Behavior: Email is archived to both contact records. */ public function testCase6B() { EmailMessage::deleteAll(); $imapMessage = new ImapMessage(); $imapMessage->fromName = 'steve'; $imapMessage->fromEmail = self::$user->primaryEmail->emailAddress; $imapMessage->senderEmail = self::$user->primaryEmail->emailAddress; $imapMessage->to = array(array('name' => self::$contact1->firstName, 'email' => self::$contact1->primaryEmail->emailAddress)); $imapMessage->cc = array(array('name' => self::$contact2->firstName, 'email' => self::$contact2->primaryEmail->emailAddress)); $imapMessage->subject = "Test Email 6b"; $imapMessage->htmlBody = "<strong>Email</strong> from Steve 6b"; $imapMessage->textBody = "Email from Steve 6b"; $emailArchivingJob = new EmailArchivingJob(); $result = $emailArchivingJob->saveEmailMessage($imapMessage); $this->assertTrue($result); $emailMessages = EmailMessage::getAll(); $this->assertEquals(1, count($emailMessages)); $emailMessage = $emailMessages[0]; $this->assertEquals($imapMessage->subject, $emailMessage->subject); $this->assertEquals($imapMessage->textBody, trim($emailMessage->content->textContent)); $this->assertEquals($imapMessage->htmlBody, trim($emailMessage->content->htmlContent)); $this->assertEquals(self::$user->primaryEmail->emailAddress, $emailMessage->sender->fromAddress); $this->assertEquals(2, count($emailMessage->recipients)); $this->assertEquals(self::$contact1->primaryEmail->emailAddress, $emailMessage->recipients[0]->toAddress); $this->assertEquals(EmailMessageRecipient::TYPE_TO, $emailMessage->recipients[0]->type); $this->assertEquals(self::$contact2->primaryEmail->emailAddress, $emailMessage->recipients[1]->toAddress); $this->assertEquals(EmailMessageRecipient::TYPE_CC, $emailMessage->recipients[1]->type); $this->assertEquals(EmailFolder::TYPE_ARCHIVED, $emailMessage->folder->type); }
public function testTaskNotifications() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $userOwner = UserTestHelper::createBasicUserWithEmailAddress('TaskUserOwner'); $userRequester = UserTestHelper::createBasicUserWithEmailAddress('TaskUserRequester'); Notification::deleteAll(); EmailMessage::deleteAll(); $dueStamp = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + 10000); $completedStamp = DateTimeUtil::convertTimestampToDbFormatDateTime(time() + 9000); $task = new Task(); $task->name = 'Task for Notifications Test'; $task->owner = $userOwner; $task->requestedByUser = $userRequester; $task->dueDateTime = $dueStamp; $task->completedDateTime = $completedStamp; $task->description = 'my test description'; $task->status = Task::STATUS_NEW; $this->assertTrue($task->save()); //New task notification owned by other $notifications = Notification::getAll(); $emailMessages = EmailMessage::getAll(); $this->assertCount(1, $notifications); $this->assertCount(1, $emailMessages); $this->assertContains("The task, 'Task for Notifications Test', is now owned by you.", $notifications[0]->notificationMessage->textContent); $this->assertContains("The task, 'Task for Notifications Test', is now owned by you.", $emailMessages[0]->content->textContent); //Deliver task notification $task->status = TASK::STATUS_AWAITING_ACCEPTANCE; $task->save(); $notifications = Notification::getAll(); $emailMessages = EmailMessage::getAll(); $this->assertCount(2, $notifications); $this->assertCount(2, $emailMessages); $this->assertContains("The task you requested, 'Task for Notifications Test', has been finished. You can now choose to accept or reject the task.", $notifications[1]->notificationMessage->textContent); $this->assertContains("The task you requested, 'Task for Notifications Test', has been finished. You can now choose to accept or reject the task.", $emailMessages[1]->content->textContent); //Reject task notification $task->status = TASK::STATUS_REJECTED; $task->save(); $notifications = Notification::getAll(); $emailMessages = EmailMessage::getAll(); $this->assertCount(3, $notifications); $this->assertCount(3, $emailMessages); $this->assertContains("The task, 'Task for Notifications Test', has been rejected by Clark Kent.", $notifications[2]->notificationMessage->textContent); $this->assertContains("The task, 'Task for Notifications Test', has been rejected by Clark Kent.", $emailMessages[2]->content->textContent); //Accept task notification $task->status = TASK::STATUS_COMPLETED; $task->save(); $notifications = Notification::getAll(); $emailMessages = EmailMessage::getAll(); $this->assertCount(4, $notifications); $this->assertCount(4, $emailMessages); $this->assertContains("The task, 'Task for Notifications Test', was accepted by Clark Kent.", $notifications[3]->notificationMessage->textContent); $this->assertContains("The task, 'Task for Notifications Test', was accepted by Clark Kent.", $emailMessages[3]->content->textContent); }
public function testProjectNotifications() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $super->primaryEmail->emailAddress = '*****@*****.**'; $super->save(); Yii::app()->user->userModel = $super; $user = UserTestHelper::createBasicUser('ProjectUser'); Notification::deleteAll(); EmailMessage::deleteAll(); $project = new Project(); $project->name = 'Project For Notifications Test'; $project->owner = $super; $project->description = 'Description'; $this->assertTrue($project->save()); //New project notification $notifications = Notification::getAll(); $emailMessages = EmailMessage::getAll(); $this->assertCount(1, $notifications); $this->assertCount(1, $emailMessages); $this->assertContains("The project, 'Project For Notifications Test', is now owned by you.", $notifications[0]->notificationMessage->textContent); $this->assertContains("The project, 'Project For Notifications Test', is now owned by you.", $emailMessages[0]->content->textContent); //Project archived notification $project->status = Project::STATUS_ARCHIVED; $this->assertTrue($project->save()); $notifications = Notification::getAll(); $emailMessages = EmailMessage::getAll(); $this->assertCount(2, $notifications); $this->assertCount(2, $emailMessages); $this->assertContains("The project, 'Project For Notifications Test', is now archived.", $notifications[1]->notificationMessage->textContent); $this->assertContains("The project, 'Project For Notifications Test', is now archived.", $emailMessages[1]->content->textContent); }
/** * @depends testAjaxChangeStatus */ public function testSendNotificationInNewComment() { $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $missions = Mission::getAll(); $this->assertEquals(1, count($missions)); $mission = $missions[0]; $this->assertEquals(0, $mission->comments->count()); EmailMessage::deleteAll(); Notification::deleteAll(); $messageCount = 0; $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); //Save new comment. $this->setGetArray(array('relatedModelId' => $mission->id, 'relatedModelClassName' => 'Mission', 'relatedModelRelationName' => 'comments', 'redirectUrl' => 'someRedirect')); $this->setPostArray(array('Comment' => array('description' => 'a ValidComment Name'))); $this->runControllerWithRedirectExceptionAndGetContent('comments/default/inlineCreateSave'); $this->assertEquals(1, $mission->comments->count()); $this->assertEquals($messageCount + 1, Yii::app()->emailHelper->getQueuedCount()); $this->assertEquals(0, Yii::app()->emailHelper->getSentCount()); $emailMessages = EmailMessage::getAll(); $emailMessage = $emailMessages[$messageCount]; $this->assertEquals(1, count($emailMessage->recipients)); $this->assertContains('mission', $emailMessage->subject); $this->assertContains(strval($mission), $emailMessage->subject); $this->assertContains(strval($mission->comments[0]), $emailMessage->content->htmlContent); $this->assertContains(strval($mission->comments[0]), $emailMessage->content->textContent); $notifications = Notification::getAll(); $notification = $notifications[$messageCount]; $this->assertCount(1, $notifications); $this->assertEquals('Mission new comment', strval($notification)); $this->assertContains(strval($mission->comments[0]), $notification->notificationMessage->htmlContent); $this->assertContains(strval($mission->comments[0]), $notification->notificationMessage->textContent); }