示例#1
0
 /**
  * Test that message is queued for a frequency rule value.
  */
 public function testFrequencyRulesAreAppliedAndMessageGetsQueued()
 {
     // Setup dependencies
     $ipLookupHelper = $this->getMockBuilder(IpLookupHelper::class)->disableOriginalConstructor()->getMock();
     $themeHelper = $this->getMockBuilder(ThemeHelper::class)->disableOriginalConstructor()->getMock();
     $mailboxHelper = $this->getMockBuilder(Mailbox::class)->disableOriginalConstructor()->getMock();
     $mailHelper = $this->getMockBuilder(MailHelper::class)->disableOriginalConstructor()->getMock();
     $leadModel = $this->getMockBuilder(LeadModel::class)->disableOriginalConstructor()->getMock();
     $trackableModel = $this->getMockBuilder(TrackableModel::class)->disableOriginalConstructor()->getMock();
     $userModel = $this->getMockBuilder(UserModel::class)->disableOriginalConstructor()->getMock();
     $coreParametersHelper = $this->getMockBuilder(CoreParametersHelper::class)->disableOriginalConstructor()->getMock();
     // Setup the translator
     $translator = $this->getMockBuilder(Translator::class)->disableOriginalConstructor()->getMock();
     $translator->expects($this->any())->method('has')->will($this->returnValue(false));
     // Setup the repositories
     $emailRepository = $this->getMockBuilder(EmailRepository::class)->disableOriginalConstructor()->getMock();
     $emailRepository->method('getDoNotEmailList')->will($this->returnValue([]));
     $statRepository = $this->getMockBuilder(StatRepository::class)->disableOriginalConstructor()->getMock();
     $frequencyRepository = $this->getMockBuilder(FrequencyRuleRepository::class)->disableOriginalConstructor()->getMock();
     $frequencyRepository->method('getAppliedFrequencyRules')->will($this->returnValue([['lead_id' => 1, 'frequency_number' => 1, 'frequency_time' => 'DAY']]));
     // Setup the EntityManager
     $entityManager = $this->getMockBuilder(EntityManager::class)->disableOriginalConstructor()->getMock();
     $entityManager->expects($this->any())->method('getRepository')->will($this->returnValueMap([['MauticEmailBundle:Email', $emailRepository], ['MauticEmailBundle:Stat', $statRepository], ['MauticLeadBundle:FrequencyRule', $frequencyRepository]]));
     $messageModel = $this->getMockBuilder(MessageQueueModel::class)->disableOriginalConstructor()->getMock();
     $messageModel->expects($this->exactly(1))->method('addToQueue');
     $companyModel = $this->getMockBuilder(CompanyModel::class)->disableOriginalConstructor()->getMock();
     $emailModel = new \Mautic\EmailBundle\Model\EmailModel($ipLookupHelper, $themeHelper, $mailboxHelper, $mailHelper, $leadModel, $companyModel, $trackableModel, $userModel, $coreParametersHelper, $messageModel);
     $emailModel->setTranslator($translator);
     $emailModel->setEntityManager($entityManager);
     $emailEntity = $this->getMockBuilder(Email::class)->disableOriginalConstructor()->getMock();
     $emailEntity->method('getId')->will($this->returnValue(1));
     $result = $emailModel->sendEmail($emailEntity, [1 => ['id' => 1, 'email' => '*****@*****.**']], ['email_type' => 'marketing']);
     $this->assertTrue(count($result) === 0);
 }
示例#2
0
 /**
  * Test that sending emails to contacts one at a time are according to A/B test weights
  */
 public function testVariantEmailWeightsAreAppropriateForMultipleContactsSentOneAtATime()
 {
     // Setup dependencies
     $ipLookupHelper = $this->getMockBuilder(IpLookupHelper::class)->disableOriginalConstructor()->getMock();
     $themeHelper = $this->getMockBuilder(ThemeHelper::class)->disableOriginalConstructor()->getMock();
     $mailboxHelper = $this->getMockBuilder(Mailbox::class)->disableOriginalConstructor()->getMock();
     $mailHelper = $this->getMockBuilder(MailHelper::class)->disableOriginalConstructor()->getMock();
     $mailHelper->method('getMailer')->will($this->returnValue($mailHelper));
     $mailHelper->method('flushQueue')->will($this->returnValue(true));
     $mailHelper->method('addTo')->will($this->returnValue(true));
     $mailHelper->method('queue')->will($this->returnValue(true));
     $leadModel = $this->getMockBuilder(LeadModel::class)->disableOriginalConstructor()->getMock();
     $trackableModel = $this->getMockBuilder(TrackableModel::class)->disableOriginalConstructor()->getMock();
     $userModel = $this->getMockBuilder(UserModel::class)->disableOriginalConstructor()->getMock();
     $coreParametersHelper = $this->getMockBuilder(CoreParametersHelper::class)->disableOriginalConstructor()->getMock();
     // Setup the translator
     $translator = $this->getMockBuilder(Translator::class)->disableOriginalConstructor()->getMock();
     $translator->expects($this->any())->method('has')->will($this->returnValue(false));
     // Setup an email variant email
     $variantDate = new \DateTime();
     $emailEntity = $this->getMockBuilder(Email::class)->disableOriginalConstructor()->getMock();
     $emailEntity->expects($this->any())->method('getId')->will($this->returnValue(1));
     $emailEntity->method('getTemplate')->will($this->returnValue(''));
     $emailEntity->method('getSentCount')->will($this->returnValue(0));
     $emailEntity->method('getVariantSentCount')->will($this->returnValue(0));
     $emailEntity->method('getVariantStartDate')->will($this->returnValue($variantDate));
     $emailEntity->method('getTranslations')->will($this->returnValue([]));
     $emailEntity->method('isPublished')->will($this->returnValue(true));
     $emailEntity->method('isVariant')->will($this->returnValue(true));
     $variantA = $this->getMockBuilder(Email::class)->disableOriginalConstructor()->getMock();
     $variantA->expects($this->any())->method('getId')->will($this->returnValue(2));
     $variantA->method('getTemplate')->will($this->returnValue(''));
     $variantA->method('getSentCount')->will($this->returnValue(0));
     $variantA->method('getVariantSentCount')->will($this->returnValue(0));
     $variantA->method('getVariantStartDate')->will($this->returnValue($variantDate));
     $variantA->method('getTranslations')->will($this->returnValue([]));
     $variantA->method('isPublished')->will($this->returnValue(true));
     $variantA->method('isVariant')->will($this->returnValue(true));
     $variantA->method('getVariantSettings')->will($this->returnValue(['weight' => '25']));
     $variantB = $this->getMockBuilder(Email::class)->disableOriginalConstructor()->getMock();
     $variantB->expects($this->any())->method('getId')->will($this->returnValue(3));
     $variantB->method('getTemplate')->will($this->returnValue(''));
     $variantB->method('getSentCount')->will($this->returnValue(0));
     $variantB->method('getVariantSentCount')->will($this->returnValue(0));
     $variantB->method('getVariantStartDate')->will($this->returnValue($variantDate));
     $variantB->method('getTranslations')->will($this->returnValue([]));
     $variantB->method('isPublished')->will($this->returnValue(true));
     $variantB->method('isVariant')->will($this->returnValue(true));
     $variantB->method('getVariantSettings')->will($this->returnValue(['weight' => '25']));
     $emailEntity->method('getVariantChildren')->will($this->returnValue([$variantA, $variantB]));
     // Setup the EntityManager
     $entityManager = $this->getMockBuilder(EntityManager::class)->disableOriginalConstructor()->getMock();
     $statRepository = $this->getMockBuilder(StatRepository::class)->disableOriginalConstructor()->getMock();
     $emailRepository = $this->getMockBuilder(EmailRepository::class)->disableOriginalConstructor()->getMock();
     $emailRepository->method('getDoNotEmailList')->will($this->returnValue([]));
     $frequencyRepository = $this->getMockBuilder(FrequencyRuleRepository::class)->disableOriginalConstructor()->getMock();
     $frequencyRepository->method('getAppliedFrequencyRules')->will($this->returnValue([]));
     $entityManager->expects($this->any())->method('getRepository')->will($this->returnValueMap([['MauticLeadBundle:FrequencyRule', $frequencyRepository], ['MauticEmailBundle:Email', $emailRepository], ['MauticEmailBundle:Stat', $statRepository]]));
     $emailModel = new \Mautic\EmailBundle\Model\EmailModel($ipLookupHelper, $themeHelper, $mailboxHelper, $mailHelper, $leadModel, $trackableModel, $userModel, $coreParametersHelper);
     $emailModel->setTranslator($translator);
     $emailModel->setEntityManager($entityManager);
     $count = 12;
     while ($count > 0) {
         $contact = ['id' => $count, 'email' => "email{$count}@domain.com", 'firstname' => "firstname{$count}", 'lastname' => "lastname{$count}"];
         $count--;
         $emailModel->sendEmail($emailEntity, [$contact]);
     }
     $emailSettings = $emailModel->getEmailSettings($emailEntity);
     // Sent counts should be as follows
     // ID 1 => 6 50%
     // ID 2 => 3 25%
     // ID 3 => 3 25%
     $counts = [];
     foreach ($emailSettings as $id => $details) {
         $counts[] = "{$id}:{$details['variantCount']}";
     }
     $counts = implode('; ', $counts);
     $this->assertEquals(6, $emailSettings[1]['variantCount'], $counts);
     $this->assertEquals(3, $emailSettings[2]['variantCount'], $counts);
     $this->assertEquals(3, $emailSettings[3]['variantCount'], $counts);
 }