repository = $this->diContainer->get(ScheduledTaskSubscribersRepository::class); $scheduledTaskFactory = new ScheduledTaskFactory(); $this->subscriberFactory = new SubscriberFactory(); $taskSubscriberFactory = new TaskSubscriberFactory(); $this->subscriberUnprocessed = $this->subscriberFactory->withEmail('subscriberUnprocessed@email.com')->create(); $this->subscriberProcessed = $this->subscriberFactory->withEmail('subscriberProcessed@email.com')->create(); $subscriberFailed = $this->subscriberFactory->withEmail('subscriberFailed@email.com')->create(); $this->subscriberFactory->withEmail('subscriberNotIncluded@email.com')->create(); $this->scheduledTask1 = $scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->subDay()); $this->scheduledTask2 = $scheduledTaskFactory->create('sending', ScheduledTaskEntity::STATUS_COMPLETED, Carbon::now()->subDay()); $this->taskSubscriber1 = $taskSubscriberFactory->createUnprocessed($this->scheduledTask1, $this->subscriberUnprocessed); $this->taskSubscriber2 = $taskSubscriberFactory->createProcessed($this->scheduledTask1, $this->subscriberProcessed); $this->taskSubscriber3 = $taskSubscriberFactory->createFailed($this->scheduledTask1, $subscriberFailed, 'Error Message'); $this->taskSubscriber4 = $taskSubscriberFactory->createUnprocessed($this->scheduledTask2, $this->subscriberUnprocessed); $this->taskSubscriber5 = $taskSubscriberFactory->createProcessed($this->scheduledTask2, $this->subscriberProcessed); } public function testItSetsSubscribers() { $subscriber = $this->subscriberFactory->withEmail('newsubscriber@email.com')->create(); $this->assertCount(3, $this->repository->findBy(['task' => $this->scheduledTask1])); $this->repository->setSubscribers($this->scheduledTask1, [$subscriber->getId()]); $task1Subscribers = $this->repository->findBy(['task' => $this->scheduledTask1]); $this->assertCount(1, $task1Subscribers); $this->assertInstanceOf(SubscriberEntity::class, $task1Subscribers[0]->getSubscriber()); $this->assertEquals($subscriber->getId(), $task1Subscribers[0]->getSubscriber()->getId()); // check that setSubscribers() does not delete subscribers from other tasks $task2Subscribers = $this->repository->findBy(['task' => $this->scheduledTask2]); $this->assertCount(2, $task2Subscribers); $this->assertInstanceOf(SubscriberEntity::class, $task2Subscribers[0]->getSubscriber()); $this->assertInstanceOf(SubscriberEntity::class, $task2Subscribers[1]->getSubscriber()); $this->assertEquals($this->subscriberUnprocessed->getId(), $task2Subscribers[0]->getSubscriber()->getId()); $this->assertEquals($this->subscriberProcessed->getId(), $task2Subscribers[1]->getSubscriber()->getId()); } public function testItDeleteByScheduledTaskAndSubscriberIds() { $this->repository->deleteByScheduledTaskAndSubscriberIds($this->scheduledTask1, [$this->taskSubscriber1->getSubscriberId()]); $this->assertSame([$this->taskSubscriber2, $this->taskSubscriber3], $this->repository->findBy(['task' => $this->scheduledTask1])); $this->assertSame([$this->taskSubscriber4, $this->taskSubscriber5], $this->repository->findBy(['task' => $this->scheduledTask2])); $this->repository->deleteByScheduledTaskAndSubscriberIds($this->scheduledTask2, [$this->taskSubscriber4->getSubscriberId(), $this->taskSubscriber5->getSubscriberId()]); $this->assertSame([$this->taskSubscriber2, $this->taskSubscriber3], $this->repository->findBy(['task' => $this->scheduledTask1])); $this->assertSame([], $this->repository->findBy(['task' => $this->scheduledTask2])); } public function testCountProcessed() { $this->assertSame(2, $this->repository->countProcessed($this->scheduledTask1)); $this->assertSame(1, $this->repository->countProcessed($this->scheduledTask2)); $subscriberId = $this->subscriberUnprocessed->getId(); $this->assertIsInt($subscriberId); $this->repository->updateProcessedSubscribers($this->scheduledTask2, [$subscriberId]); $this->assertSame(2, $this->repository->countProcessed($this->scheduledTask2)); } public function testCountUnprocessed() { $this->assertSame(1, $this->repository->countUnprocessed($this->scheduledTask1)); $this->assertSame(1, $this->repository->countUnprocessed($this->scheduledTask2)); $subscriberId = $this->subscriberUnprocessed->getId(); $this->assertIsInt($subscriberId); $this->repository->updateProcessedSubscribers($this->scheduledTask2, [$subscriberId]); $this->assertSame(0, $this->repository->countUnprocessed($this->scheduledTask2)); } }