/** * Execute the default schedule, without any special recipient selections. * * @dataProvider createTestCases * * @param string $targetDate * @param string $setupFuncs * @param array $expectMessages * * @throws \Exception */ public function testDefault($targetDate, $setupFuncs, $expectMessages) { $this->targetDate = $targetDate; foreach (explode(' ', $setupFuncs) as $setupFunc) { $this->{$setupFunc}(); } $this->schedule->save(); $actualMessages = array(); foreach ($this->cronTimes() as $time) { \CRM_Utils_Time::setTime($time); $this->callAPISuccess('job', 'send_reminder', array()); foreach ($this->mut->getAllMessages('ezc') as $message) { /** @var \ezcMail $message */ $simpleMessage = array('time' => $time, 'to' => \CRM_Utils_Array::collect('email', $message->to), 'subject' => $message->subject); sort($simpleMessage['to']); $actualMessages[] = $simpleMessage; $this->mut->clearMessages(); } } $errorText = "Incorrect messages: " . print_r(array('actualMessages' => $actualMessages, 'expectMessages' => $expectMessages), 1); $this->assertEquals(count($expectMessages), count($actualMessages), $errorText); usort($expectMessages, array(__CLASS__, 'compareSimpleMsgs')); usort($actualMessages, array(__CLASS__, 'compareSimpleMsgs')); foreach ($expectMessages as $offset => $expectMessage) { $actualMessage = $actualMessages[$offset]; $this->assertApproxEquals(strtotime($expectMessage['time']), strtotime($actualMessage['time']), $this->dateTolerance, $errorText); if (isset($expectMessage['to'])) { sort($expectMessage['to']); $this->assertEquals($expectMessage['to'], $actualMessage['to'], $errorText); } if (isset($expectMessage['subject'])) { $this->assertRegExp($expectMessage['subject'], $actualMessage['subject'], $errorText); } } }
/** * This generates a single mailing through the scheduled-reminder * system (using an activity-reminder as a baseline) and * checks that the resulting message satisfies various * regular expressions. * * @param array $schedule * Values to set/override in the schedule. * Ex: array('subject' => 'Hello, {contact.first_name}!'). * @param array $patterns * A list of regexes to compare with the actual email. * Ex: array('subject' => '/^Hello, Alice!/'). * Keys: subject, body_text, body_html, from_name, from_email. * @dataProvider mailerExamples */ public function testMailer($schedule, $patterns) { $actionSchedule = array_merge($this->fixtures['sched_activity_1day'], $schedule); $actionScheduleDao = CRM_Core_BAO_ActionSchedule::add($actionSchedule); $this->assertTrue(is_numeric($actionScheduleDao->id)); $activity = $this->createTestObject('CRM_Activity_DAO_Activity', $this->fixtures['phonecall']); $this->assertTrue(is_numeric($activity->id)); $contact = $this->callAPISuccess('contact', 'create', $this->fixtures['contact']); $activity->save(); $source['contact_id'] = $contact['id']; $source['activity_id'] = $activity->id; $source['record_type_id'] = 2; $activityContact = $this->createTestObject('CRM_Activity_DAO_ActivityContact', $source); $activityContact->save(); CRM_Utils_Time::setTime('2012-06-14 15:00:00'); $this->callAPISuccess('job', 'send_reminder', array()); $this->mut->assertRecipients(array(array('*****@*****.**'))); foreach ($this->mut->getAllMessages('ezc') as $message) { /** @var ezcMail $message */ $messageArray = array(); $messageArray['subject'] = $message->subject; $messageArray['from_name'] = $message->from->name; $messageArray['from_email'] = $message->from->email; $messageArray['body_text'] = '--UNDEFINED--'; $messageArray['body_html'] = '--UNDEFINED--'; foreach ($message->fetchParts() as $part) { /** @var ezcMailText ezcMailText */ if ($part instanceof ezcMailText && $part->subType == 'html') { $messageArray['body_html'] = $part->text; } if ($part instanceof ezcMailText && $part->subType == 'plain') { $messageArray['body_text'] = $part->text; } } foreach ($patterns as $field => $pattern) { $this->assertRegExp($pattern, $messageArray[$field], "Check that '{$field}'' matches regex. " . print_r(array('expected' => $patterns, 'actual' => $messageArray), 1)); } } $this->mut->clearMessages(); }