Fix subscribers score for auto emails

[MAILPOET-3600]
This commit is contained in:
Pavel Dohnal
2021-05-04 14:47:51 +02:00
committed by Veljko V
parent e8c7b7e6b8
commit 759fc85123
2 changed files with 38 additions and 1 deletions

View File

@ -113,6 +113,32 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest {
expect($scoreUpdatedAt->isAfter((new CarbonImmutable())->subMinutes(5)))->true();
}
public function testForWooCommerce() {
$subscriber = $this->createSubscriber();
$subscriber->setEngagementScoreUpdatedAt((new CarbonImmutable())->subDays(4));
$this->createStatisticsNewsletter($this->createWooNewsletter(), $subscriber);
$this->createStatisticsNewsletter($this->createWooNewsletter(), $subscriber);
$statisticsNewsletter = $this->createStatisticsNewsletter($this->createWooNewsletter(), $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(33, 1);
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);
@ -121,6 +147,16 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest {
return $subscriber;
}
private function createWooNewsletter(): NewsletterEntity {
$newsletter = new NewsletterEntity();
$newsletter->setSubject('Newsletter');
$newsletter->setType(NewsletterEntity::TYPE_AUTOMATIC);
$newsletter->setStatus(NewsletterEntity::STATUS_ACTIVE);
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
return $newsletter;
}
private function createNewsletter(?Carbon $sentAt = null): NewsletterEntity {
$newsletter = new NewsletterEntity();
$newsletter->setSubject('Newsletter');