From 0e5b51daa2aac33f78ecd223f10469bd9b9dd6b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Thu, 29 Apr 2021 10:19:44 +0200 Subject: [PATCH] Update tests for StatisticsOpensRepositoryTest [MAILPOET-3585] --- .../StatisticsOpensRepositoryTest.php | 86 ++++++++++++++++--- 1 file changed, 72 insertions(+), 14 deletions(-) diff --git a/tests/integration/Statistics/StatisticsOpensRepositoryTest.php b/tests/integration/Statistics/StatisticsOpensRepositoryTest.php index e71d415daa..e45d41a7cf 100644 --- a/tests/integration/Statistics/StatisticsOpensRepositoryTest.php +++ b/tests/integration/Statistics/StatisticsOpensRepositoryTest.php @@ -2,10 +2,12 @@ namespace MailPoet\Statistics; +use Carbon\Carbon; use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\SendingQueueEntity; +use MailPoet\Entities\StatisticsNewsletterEntity; use MailPoet\Entities\StatisticsOpenEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Subscribers\SubscribersRepository; @@ -26,6 +28,11 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest { $this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class); } + protected function _after() { + parent::_after(); + $this->cleanup(); + } + public function testItLeavesScoreWhenNoData() { $subscriber = $this->createSubscriber(); $this->entityManager->flush(); @@ -39,7 +46,7 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest { public function testItUpdatesScoreTimeWhenNotEnoughNewsletters() { $subscriber = $this->createSubscriber(); $subscriber->setEngagementScoreUpdatedAt((new CarbonImmutable())->subDays(4)); - $this->createSendingTask($subscriber); + $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber); $this->entityManager->flush(); $this->repository->recalculateSubscriberScore($subscriber); $newSubscriber = $this->subscribersRepository->findOneById($subscriber->getId()); @@ -55,19 +62,13 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest { public function testItUpdatesScore() { $subscriber = $this->createSubscriber(); $subscriber->setEngagementScoreUpdatedAt((new CarbonImmutable())->subDays(4)); - $this->createSendingTask($subscriber); - $this->createSendingTask($subscriber); - $task = $this->createSendingTask($subscriber); - $newsletter = new NewsletterEntity(); - $this->entityManager->persist($newsletter); - $queue = new SendingQueueEntity(); - $this->entityManager->persist($queue); - $queue->setNewsletter($newsletter); - $queue->setTask($task); - $newsletter->getQueues()->add($queue); - $newsletter->setSubject('newsletter 1'); - $newsletter->setStatus('sent'); - $newsletter->setType(NewsletterEntity::TYPE_STANDARD); + $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber); + $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber); + $statisticsNewsletter = $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber); + $newsletter = $statisticsNewsletter->getNewsletter(); + assert($newsletter instanceof NewsletterEntity); + $queue = $newsletter->getQueues()->first(); + assert($queue instanceof SendingQueueEntity); $open = new StatisticsOpenEntity($newsletter, $queue, $subscriber); $this->entityManager->persist($open); $this->entityManager->flush(); @@ -84,6 +85,34 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest { expect($scoreUpdatedAt->isAfter((new CarbonImmutable())->subMinutes(5)))->true(); } + public function testItUpdatesScoreOnlyForTwelveMonths(): void { + $subscriber = $this->createSubscriber(); + $subscriber->setEngagementScoreUpdatedAt((new CarbonImmutable())->subDays(4)); + $sentAt = (new Carbon())->subMonths(13); + $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber, $sentAt); + $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber); + $this->createStatisticsNewsletter($this->createNewsletter(), $subscriber); + $statisticsNewsletter = $this->createStatisticsNewsletter($this->createNewsletter($sentAt), $subscriber); + $newsletter = $statisticsNewsletter->getNewsletter(); + assert($newsletter instanceof NewsletterEntity); + $queue = $newsletter->getQueues()->first(); + assert($queue instanceof SendingQueueEntity); + $open = new StatisticsOpenEntity($newsletter, $queue, $subscriber); + $this->entityManager->persist($open); + $this->entityManager->flush(); + + $this->repository->recalculateSubscriberScore($subscriber); + + $newSubscriber = $this->subscribersRepository->findOneById($subscriber->getId()); + $this->assertInstanceOf(SubscriberEntity::class, $newSubscriber); + expect($newSubscriber->getEngagementScore())->equals(0.0); + expect($newSubscriber->getEngagementScoreUpdatedAt())->notNull(); + $updated = $newSubscriber->getEngagementScoreUpdatedAt(); + $this->assertInstanceOf(\DateTimeInterface::class, $updated); + $scoreUpdatedAt = new CarbonImmutable($updated->format('Y-m-d H:i:s')); + expect($scoreUpdatedAt->isAfter((new CarbonImmutable())->subMinutes(5)))->true(); + } + private function createSubscriber(): SubscriberEntity { $subscriber = new SubscriberEntity(); $subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED); @@ -92,6 +121,34 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest { return $subscriber; } + private function createNewsletter(?Carbon $sentAt = null): NewsletterEntity { + $newsletter = new NewsletterEntity(); + $newsletter->setSubject('Newsletter'); + $newsletter->setType(NewsletterEntity::TYPE_STANDARD); + $newsletter->setSentAt($sentAt ?: new \DateTime()); + $newsletter->setStatus(NewsletterEntity::STATUS_SENT); + $this->entityManager->persist($newsletter); + $this->entityManager->flush(); + return $newsletter; + } + + private function createStatisticsNewsletter( + NewsletterEntity $newsletter, + SubscriberEntity $subscriber, + ?Carbon $sentAt = null + ): StatisticsNewsletterEntity { + $task = $this->createSendingTask($subscriber); + $queue = new SendingQueueEntity(); + $queue->setTask($task); + $queue->setNewsletter($newsletter); + $this->entityManager->persist($queue); + $newsletter->getQueues()->add($queue); + $statisticsNewsletter = new StatisticsNewsletterEntity($newsletter, $queue, $subscriber); + $statisticsNewsletter->setSentAt($sentAt ?: new \DateTime()); + $this->entityManager->persist($statisticsNewsletter); + return $statisticsNewsletter; + } + private function createSendingTask(SubscriberEntity $subscriber): ScheduledTaskEntity { $task = new ScheduledTaskEntity(); $task->setType(Sending::TASK_TYPE); @@ -107,6 +164,7 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest { $this->truncateEntity(StatisticsOpenEntity::class); $this->truncateEntity(SubscriberEntity::class); $this->truncateEntity(NewsletterEntity::class); + $this->truncateEntity(StatisticsNewsletterEntity::class); $this->truncateEntity(SendingQueueEntity::class); } }