39 public static $emailHelperSendEmailThroughTransport;
41 protected $user = null;
43 public static function setUpBeforeClass()
45 parent::setUpBeforeClass();
46 SecurityTestHelper::createSuperAdmin();
47 self::$emailHelperSendEmailThroughTransport = Yii::app()->emailHelper->sendEmailThroughTransport;
48 UserTestHelper::createBasicUser(
'billy');
49 UserTestHelper::createBasicUser(
'jane');
50 $someoneSuper = UserTestHelper::createBasicUser(
'someoneSuper');
53 $group->users->add($someoneSuper);
54 $saved = $group->save();
57 $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
59 if (EmailMessageTestHelper::isSetEmailAccountsTestConfiguration())
61 $steve = UserTestHelper::createBasicUser(
'steve');
62 EmailMessageTestHelper::createEmailAccount($steve);
64 Yii::app()->imap->imapHost = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapHost'];
65 Yii::app()->imap->imapUsername = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapUsername'];
66 Yii::app()->imap->imapPassword = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapPassword'];
67 Yii::app()->imap->imapPort = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapPort'];
68 Yii::app()->imap->imapSSL = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapSSL'];
69 Yii::app()->imap->imapFolder = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapFolder'];
70 Yii::app()->imap->setInboundSettings();
71 Yii::app()->imap->init();
73 self::loadEmailHelperWithTestCredentials();
76 Yii::app()->jobQueue->deleteAll();
79 public function setUp()
83 Yii::app()->user->userModel = $this->user;
84 if (!EmailMessageTestHelper::isSetEmailAccountsTestConfiguration())
86 $this->markTestSkipped(Zurmo::t(
'EmailMessagesModule',
'Email test settings are missing.'));
90 public function testSend()
92 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email', $this->user);
93 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
94 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
95 $this->assertEquals(0, count(Yii::app()->jobQueue->getAll()));
96 Yii::app()->emailHelper->send($emailMessage);
97 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
98 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
99 $queuedJobs = Yii::app()->jobQueue->getAll();
100 $this->assertEquals(1, count($queuedJobs));
101 $this->assertEquals(
'ProcessOutboundEmail', $queuedJobs[0][0][
'jobType']);
110 Yii::app()->user->userModel = $super;
113 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email 2', $this->user);
114 $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
115 $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR);
116 $emailMessage->save();
118 $this->assertEquals(2, Yii::app()->emailHelper->getQueuedCount());
119 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
120 Yii::app()->emailHelper->sendQueued();
121 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
122 $this->assertEquals(2, Yii::app()->emailHelper->getSentCount());
125 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email 3', $this->user);
126 $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
127 $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX);
128 $emailMessage->save();
130 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email 4', $this->user);
131 $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
132 $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR);
133 $emailMessage->save();
135 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email 5', $this->user);
136 $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
137 $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR);
138 $emailMessage->save();
140 $this->assertEquals(3, Yii::app()->emailHelper->getQueuedCount());
141 $this->assertEquals(2, Yii::app()->emailHelper->getSentCount());
142 Yii::app()->emailHelper->sendQueued(1);
143 $this->assertEquals(2, Yii::app()->emailHelper->getQueuedCount());
144 $this->assertEquals(3, Yii::app()->emailHelper->getSentCount());
145 Yii::app()->emailHelper->sendQueued(2);
146 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
147 $this->assertEquals(5, Yii::app()->emailHelper->getSentCount());
155 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email 2', $this->user);
156 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
157 $this->assertEquals(5, Yii::app()->emailHelper->getSentCount());
158 Yii::app()->emailHelper->sendImmediately($emailMessage);
159 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
160 $this->assertEquals(6, Yii::app()->emailHelper->getSentCount());
169 $emailHelper->outboundHost = null;
174 $emailHelper->outboundHost =
'xxx';
183 Yii::app()->user->userModel = $billy;
194 $this->addToAssertionCount(1);
198 EmailMessageTestHelper::createEmailAccount($billy);
199 $emailHelper->loadOutboundSettingsFromUserEmailAccount($billy);
200 $this->assertEquals(
'smtp', $emailHelper->outboundType);
201 $this->assertEquals(Yii::app()->params[
'emailTestAccounts'][
'smtpSettings'][
'outboundPort'], $emailHelper->outboundPort);
203 $this->assertEquals(
'xxx', $emailHelper->outboundHost);
204 $this->assertEquals($emailHelper->defaultTestToAddress, $emailHelper->fromAddress);
205 $this->assertEquals(strval($billy), $emailHelper->fromName);
209 $emailAccount->useCustomOutboundSettings = EmailMessageUtil::OUTBOUND_PERSONAL_SMTP_SETTINGS;
210 $emailAccount->outboundType =
'xyz';
211 $emailAccount->outboundPort = 55;
212 $emailAccount->outboundHost =
'zurmo.com';
213 $emailAccount->outboundUsername =
'billy';
214 $emailAccount->outboundPassword =
'billypass';
215 $emailAccount->outboundSecurity =
'ssl';
216 $emailAccount->save();
217 $emailHelper->loadOutboundSettingsFromUserEmailAccount($billy);
218 $this->assertEquals(
'xyz', $emailHelper->outboundType);
219 $this->assertEquals(55, $emailHelper->outboundPort);
220 $this->assertEquals(
'zurmo.com', $emailHelper->outboundHost);
221 $this->assertEquals(
'billy', $emailHelper->outboundUsername);
222 $this->assertEquals(
'billypass', $emailHelper->outboundPassword);
223 $this->assertEquals(
'ssl', $emailHelper->outboundSecurity);
224 $this->assertEquals($billy->getFullName(), $emailHelper->fromName);
225 $this->assertEquals(
'user@zurmo.com', $emailHelper->fromAddress);
233 self::loadEmailHelperWithTestCredentials();
234 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
235 if (EmailMessageTestHelper::isSetEmailAccountsTestConfiguration())
238 $user->primaryEmail->emailAddress = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapUsername'];
239 $this->assertTrue($user->save());
241 Yii::app()->imap->connect();
242 Yii::app()->imap->deleteMessages(
true);
243 $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed();
244 $this->assertEquals(0, $imapStats->Nmsgs);
246 $emailMessage = EmailMessageTestHelper::createOutboxEmail($this->user,
'Test email',
247 'Raw content',
',b>html content</b>end.',
248 'Zurmo', Yii::app()->emailHelper->outboundUsername,
249 'Ivica', Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapUsername']);
252 $fileTxt = ZurmoTestHelper::createFileModel(
'testNote.txt');
253 $filesIds[] = $fileTxt->id;
254 $filePng = ZurmoTestHelper::createFileModel(
'testImage.png');
255 $filesIds[] = $filePng->id;
256 $fileZip = ZurmoTestHelper::createFileModel(
'testZip.zip');
257 $filesIds[] = $fileZip->id;
258 $filePdf = ZurmoTestHelper::createFileModel(
'testPDF.pdf');
259 $filesIds[] = $filePdf->id;
261 $this->assertEquals(
'4', count($emailMessage->files));
263 Yii::app()->imap->connect();
264 $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed();
265 $this->assertEquals(0, $imapStats->Nmsgs);
267 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
268 $this->assertEquals(6, Yii::app()->emailHelper->getSentCount());
269 Yii::app()->emailHelper->sendQueued();
271 $this->assertTrue($job->run());
272 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
273 $this->assertEquals(7, Yii::app()->emailHelper->getSentCount());
276 Yii::app()->imap->connect();
277 $imapStats = Yii::app()->imap->getMessageBoxStatsDetailed();
278 $this->assertEquals(1, $imapStats->Nmsgs);
282 public static function tearDownAfterClass()
285 $imap->imapHost = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapHost'];
286 $imap->imapUsername = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapUsername'];
287 $imap->imapPassword = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapPassword'];
288 $imap->imapPort = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapPort'];
289 $imap->imapSSL = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapSSL'];
290 $imap->imapFolder = Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapFolder'];
293 $imap->deleteMessages(
true);
295 Yii::app()->emailHelper->sendEmailThroughTransport = self::$emailHelperSendEmailThroughTransport;
296 parent::tearDownAfterClass();
305 Yii::app()->user->userModel = $super;
307 if (EmailMessageTestHelper::isSetEmailAccountsTestConfiguration())
310 $emailMessage = EmailMessageTestHelper::createDraftSystemEmail(
'a test email 2', $this->user);
311 $box = EmailBox::resolveAndGetByName(EmailBox::NOTIFICATIONS_NAME);
312 $emailMessage->folder = EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_ERROR);
313 $emailMessage->sendAttempts = 5;
314 $emailMessage->save();
316 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
317 $this->assertEquals(7, Yii::app()->emailHelper->getSentCount());
318 Yii::app()->emailHelper->sendQueued();
319 $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
320 $this->assertEquals(7, Yii::app()->emailHelper->getSentCount());
321 $this->assertTrue($emailMessage->folder->isSame(EmailFolder::getByBoxAndType($box, EmailFolder::TYPE_OUTBOX_FAILURE)));
325 $this->markTestSkipped();
329 public function testSendMessagePopulatesEmailAccountSettings()
332 Yii::app()->user->userModel = $jane;
334 EmailMessageTestHelper::createEmailAccount($jane);
336 $emailAccount->useCustomOutboundSettings = EmailMessageUtil::OUTBOUND_PERSONAL_SMTP_SETTINGS;
337 $emailAccount->outboundType =
'abc';
338 $emailAccount->outboundPort = 11;
339 $emailAccount->outboundHost =
'dumb.domain';
340 $emailAccount->outboundUsername =
'jane';
341 $emailAccount->outboundPassword =
'janepass';
342 $emailAccount->outboundSecurity =
'ssl';
343 $emailAccount->save();
345 $emailMessage = EmailMessageTestHelper::createOutboxEmail(
351 Yii::app()->emailHelper->outboundUsername,
353 Yii::app()->params[
'emailTestAccounts'][
'userImapSettings'][
'imapUsername']);
354 $emailMessage->account = $emailAccount;
355 $emailMessage->save();
357 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
358 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
359 Yii::app()->emailHelper->sendQueued();
362 $this->assertTrue($job->run());
364 $this->assertContains(
'Connection could not be established with host dumb.domain', strval($emailMessage->error));
365 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
366 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
369 public function testResolveAndGetDefaultFromAddress()
371 $content = Yii::app()->emailHelper->resolveAndGetDefaultFromAddress();
372 $this->assertEquals(
'notification@zurmoalerts.com', $content);
375 public function testSetDefaultFromAddress()
377 $content = Yii::app()->emailHelper->resolveAndGetDefaultFromAddress();
378 $this->assertEquals(
'notification@zurmoalerts.com', $content);
381 $this->assertEquals(
'notification@zurmoalerts.com', $metadata[
'global'][
'defaultFromAddress']);
384 public function testResolveAndGetDefaultTestToAddress()
386 $content = Yii::app()->emailHelper->resolveAndGetDefaultTestToAddress();
387 $this->assertEquals(
'testJobEmail@zurmoalerts.com', $content);
390 public function testSetDefaultTestToAddress()
392 $content = Yii::app()->emailHelper->resolveAndGetDefaultTestToAddress();
393 $this->assertEquals(
'testJobEmail@zurmoalerts.com', $content);
396 $this->assertEquals(
'testJobEmail@zurmoalerts.com', $metadata[
'global'][
'defaultTestToAddress']);
406 $email =
new Email();
407 $email->emailAddress =
'demo@zurmo.com';
408 $contact = ContactTestHelper::createContactByNameForOwner(
'contact', $this->user);
409 $contact->primaryEmail = $email;
410 $this->assertTrue($contact->save());
411 $marketingList = MarketingListTestHelper::createMarketingListByName(
'marketingList');
412 MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
413 $campaign = CampaignTestHelper::createCampaign(
'campaign',
420 Campaign::STATUS_PROCESSING,
426 CampaignItemTestHelper::createCampaignItem($processed, $campaign, $contact);
427 $this->assertTrue($job->run());
429 $this->assertCount(1, $campaignItems);
431 $this->assertCount(1, $campaignItemsProcessed);
432 $campaign->status = Campaign::STATUS_PAUSED;
433 $this->assertTrue($campaign->save());
434 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
435 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
436 Yii::app()->emailHelper->sendQueued();
437 $this->assertEquals(1, Yii::app()->emailHelper->getQueuedCount());
438 $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
446 Yii::app()->emailHelper->outboundHost = Yii::app()->params[
'emailTestAccounts'][
'smtpSettings'][
'outboundHost'];
447 Yii::app()->emailHelper->outboundPort = Yii::app()->params[
'emailTestAccounts'][
'smtpSettings'][
'outboundPort'];
448 Yii::app()->emailHelper->outboundUsername = Yii::app()->params[
'emailTestAccounts'][
'smtpSettings'][
'outboundUsername'];
449 Yii::app()->emailHelper->outboundPassword = Yii::app()->params[
'emailTestAccounts'][
'smtpSettings'][
'outboundPassword'];
450 Yii::app()->emailHelper->outboundSecurity = Yii::app()->params[
'emailTestAccounts'][
'smtpSettings'][
'outboundSecurity'];
451 Yii::app()->emailHelper->sendEmailThroughTransport =
true;
452 Yii::app()->emailHelper->setOutboundSettings();
static getMetadata(User $user=null)
static getByProcessedAndCampaignId($processed, $campaignId, $pageSize=null)
static getByUsername($username)
testTooManySendAttemptsResultingInFailure()
testLoadOutboundSettings()
testLoadOutboundSettingsFromUserEmailAccount()
static getByUserAndName(User $user, $name=null)
static setDefaultFromAddress($defaultFromAddress)
static loadEmailHelperWithTestCredentials()
static attachFilesToMessage(Array $filesIds, $emailMessage)
static getAll($orderBy=null, $sortDescending=false, $modelClassName=null)
static setDefaultTestToAddress($defaultTestToAddress)
testSendQueuedSkipsPausedCampaignMessages()
loadOutboundSettingsFromUserEmailAccount(User $user, $name=null)
static setByModuleName($moduleName, $key, $value, $cache=true)