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')
|
->from(StatisticsOpenEntity::class, 'opens')
|
||||||
->join('opens.newsletter', 'newsletter')
|
->join('opens.newsletter', 'newsletter')
|
||||||
->where('opens.subscriber = :subscriberId')
|
->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('subscriberId', $subscriber)
|
||||||
->setParameter('dateTime', $dateTime)
|
->setParameter('dateTime', $dateTime)
|
||||||
->getQuery()
|
->getQuery()
|
||||||
|
@ -113,6 +113,32 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest {
|
|||||||
expect($scoreUpdatedAt->isAfter((new CarbonImmutable())->subMinutes(5)))->true();
|
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 {
|
private function createSubscriber(): SubscriberEntity {
|
||||||
$subscriber = new SubscriberEntity();
|
$subscriber = new SubscriberEntity();
|
||||||
$subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED);
|
$subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED);
|
||||||
@ -121,6 +147,16 @@ class StatisticsOpensRepositoryTest extends \MailPoetTest {
|
|||||||
return $subscriber;
|
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 {
|
private function createNewsletter(?Carbon $sentAt = null): NewsletterEntity {
|
||||||
$newsletter = new NewsletterEntity();
|
$newsletter = new NewsletterEntity();
|
||||||
$newsletter->setSubject('Newsletter');
|
$newsletter->setSubject('Newsletter');
|
||||||
|
Reference in New Issue
Block a user