leadModel = $this->createMock(LeadModel::class); $this->companyModel = $this->createMock(CompanyModel::class); $this->entityManager = $this->createMock(EntityManagerInterface::class); $this->messageQueueRepository = $this->createMock(MessageQueueRepository::class); $coreHelper = $this->createMock(CoreParametersHelper::class); $this->messageQueue = new MessageQueueModel( $this->leadModel, $this->companyModel, $coreHelper, $this->entityManager, $this->createMock(CorePermissions::class), $this->createMock(EventDispatcherInterface::class), $this->createMock(UrlGeneratorInterface::class), $this->createMock(Translator::class), $this->createMock(UserHelper::class), $this->createMock(LoggerInterface::class) ); $this->entityManager->method('getRepository')->willReturn($this->messageQueueRepository); $message = new MessageQueue(); $scheduleDate = new \DateTime(self::DATE); $message->setScheduledDate($scheduleDate); $this->message = $message; } public function testRescheduleMessageIntervalDay(): void { $interval = new \DateInterval('P2D'); $this->prepareRescheduleMessageIntervalTest($interval); } public function testRescheduleMessageIntervalWeek(): void { $interval = new \DateInterval('P4W'); $this->prepareRescheduleMessageIntervalTest($interval); } public function testRescheduleMessageIntervalMonth(): void { $interval = new \DateInterval('P8M'); $this->prepareRescheduleMessageIntervalTest($interval); } public function testRescheduleMessageNoInterval(): void { $interval = new \DateInterval('PT0S'); $this->prepareRescheduleMessageIntervalTest($interval); } protected function prepareRescheduleMessageIntervalTest(\DateInterval $interval) { $oldScheduleDate = $this->message->getScheduledDate(); $this->messageQueue->reschedule($this->message, $interval); $scheduleDate = $this->message->getScheduledDate(); /** @var \DateTime $oldScheduleDate */ $oldScheduleDate->add($interval); $this->assertEquals($oldScheduleDate, $scheduleDate); $this->assertNotSame($oldScheduleDate, $scheduleDate); } public function testSendMessagesWithNullEvent(): void { $queue = $this->message; $lead = new Lead(); $lead->setId(1); $queue->setLead($lead); $contactData = [ 1 => [ 'firstname' => 'John', 'email' => 'john.doe@example.com', ], ]; $leadRepository = $this->createMock(LeadRepository::class); $this->leadModel->method('getRepository')->willReturn($leadRepository); $leadRepository->method('getContacts')->willReturn($contactData); $this->entityManager->expects($this->exactly(2)) ->method('detach'); $this->messageQueueRepository->method('getQueuedMessages') ->willReturn([$queue]); $this->messageQueue->sendMessages('email', 1); } public function testProcessMessageQueueLeadFieldsShouldNotContainCompany(): void { $queue = $this->message; $lead = new Lead(); $lead->setId(1); $queue->setLead($lead); $contactData = [ 1 => [ 'firstname' => 'John', 'email' => 'john.doe@example.com', ], ]; $leadRepository = $this->createMock(LeadRepository::class); $this->leadModel->method('getRepository')->willReturn($leadRepository); $leadRepository->method('getContacts')->willReturn($contactData); $this->messageQueue->processMessageQueue($queue); $this->assertArrayNotHasKey('companies', $queue->getLead()->getFields()); } }