Fix subscribers score for auto emails
[MAILPOET-3600]
This commit is contained in:
@ -41,7 +41,8 @@ class StatisticsOpensRepository extends Repository {
|
||||
->from(StatisticsOpenEntity::class, 'opens')
|
||||
->join('opens.newsletter', 'newsletter')
|
||||
->where('opens.subscriber = :subscriberId')
|
||||
->andWhere('newsletter.sentAt > :dateTime')
|
||||
->andWhere('(newsletter.sentAt > :dateTime OR newsletter.sentAt IS NULL)')
|
||||
->andWhere('opens.createdAt > :dateTime')
|
||||
->setParameter('subscriberId', $subscriber)
|
||||
->setParameter('dateTime', $dateTime)
|
||||
->getQuery()
|
||||
|
@ -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');
|
||||
|
Reference in New Issue
Block a user