withType('type')->create(); // create subscriber $subscriberFactory = new SubscriberFactory(); $this->subscriber = $subscriberFactory ->withEmail('test@example.com') ->withFirstName('First') ->withLastName('Last') ->create(); // create queue $scheduledTaskSubscribersRepository = $this->diContainer->get(ScheduledTaskSubscribersRepository::class); $scheduledTask = (new ScheduledTaskFactory())->create(SendingQueue::TASK_TYPE, null); $this->sendingQueue = (new SendingQueueFactory())->create($scheduledTask, $newsletter); $scheduledTaskSubscribersRepository->setSubscribers($scheduledTask, [$this->subscriber->getId()]); $scheduledTaskSubscribersRepository->updateProcessedSubscribers($scheduledTask, [(int)$this->subscriber->getId()]); // instantiate class $this->unsubscribes = $this->diContainer->get(Unsubscribes::class); $this->statisticsUnsubscribesRepository = $this->diContainer->get(StatisticsUnsubscribesRepository::class); } public function testItTracksUnsubscribeEvent() { $subscriberId = $this->subscriber->getId(); $this->assertIsInt($subscriberId); $this->unsubscribes->track( $subscriberId, 'source', (int)$this->sendingQueue->getId(), null, StatisticsUnsubscribeEntity::METHOD_ONE_CLICK ); $allStats = $this->statisticsUnsubscribesRepository->findAll(); verify(count($allStats))->equals(1); verify($allStats[0]->getMethod())->equals(StatisticsUnsubscribeEntity::METHOD_ONE_CLICK); } public function testItDoesNotTrackRepeatedUnsubscribeEvents() { $subscriberId = $this->subscriber->getId(); $this->assertIsInt($subscriberId); for ($count = 0; $count <= 2; $count++) { $this->unsubscribes->track( $subscriberId, 'source', (int)$this->sendingQueue->getId() ); } verify(count($this->statisticsUnsubscribesRepository->findAll()))->equals(1); } }