Rewrite old tests to NewslettersListingRepository tests
[MAILPOET-2645]
This commit is contained in:
committed by
Jack Kitterhing
parent
82fe4e6c78
commit
cf88ada402
@ -254,7 +254,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
// Newsletter
|
||||
$container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Newsletter\NewslettersRepository::class);
|
||||
$container->autowire(\MailPoet\Newsletter\Listing\NewsletterListingRepository::class);
|
||||
$container->autowire(\MailPoet\Newsletter\Listing\NewsletterListingRepository::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
||||
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class);
|
||||
$container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class);
|
||||
|
@ -572,7 +572,7 @@ parameters:
|
||||
|
||||
-
|
||||
message: "#^Cannot access property \\$subject on MailPoet\\\\Models\\\\Newsletter\\|false\\.$#"
|
||||
count: 6
|
||||
count: 5
|
||||
path: ../../tests/integration/Models/NewsletterTest.php
|
||||
|
||||
-
|
||||
|
@ -213,73 +213,6 @@ class NewsletterTest extends \MailPoetTest {
|
||||
expect($newsletter->deletedAt)->equals('NULL');
|
||||
}
|
||||
|
||||
public function testItCanBeFilteredBySegment() {
|
||||
// no filter
|
||||
$newsletters = Newsletter::filter('filterBy')->findArray();
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
// filter by segment
|
||||
$newsletters = Newsletter::filter('filterBy', [
|
||||
'filter' => [
|
||||
'segment' => $this->segment1->id,
|
||||
],
|
||||
])->findArray();
|
||||
|
||||
expect($newsletters)->count(1);
|
||||
expect($newsletters[0]['subject'])->equals($this->newsletter->subject);
|
||||
|
||||
// remove all segment relations to newsletters
|
||||
NewsletterSegment::deleteMany();
|
||||
|
||||
$newsletters = Newsletter::filter('filterBy', [
|
||||
'filter' => [
|
||||
'segment' => $this->segment1->id,
|
||||
]])->findArray();
|
||||
|
||||
expect($newsletters)->isEmpty();
|
||||
}
|
||||
|
||||
public function testItCanBeGrouped() {
|
||||
$newsletters = Newsletter::filter('groupBy', [
|
||||
'group' => 'all',
|
||||
])->findArray();
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
$newsletters = Newsletter::filter('groupBy', [
|
||||
'group' => 'trash',
|
||||
])->findArray();
|
||||
expect($newsletters)->count(0);
|
||||
|
||||
$this->newsletter->trash();
|
||||
$newsletters = Newsletter::filter('groupBy', [
|
||||
'group' => 'trash',
|
||||
])->findArray();
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
$newsletters = Newsletter::filter('groupBy', [
|
||||
'group' => 'all',
|
||||
])->findArray();
|
||||
expect($newsletters)->count(0);
|
||||
|
||||
$this->newsletter->restore();
|
||||
$newsletters = Newsletter::filter('groupBy', [
|
||||
'group' => 'all',
|
||||
])->findArray();
|
||||
expect($newsletters)->count(1);
|
||||
}
|
||||
|
||||
public function testItHasSearchFilter() {
|
||||
Newsletter::createOrUpdate(
|
||||
[
|
||||
'subject' => 'search for "pineapple"',
|
||||
'type' => Newsletter::TYPE_STANDARD,
|
||||
'body' => 'body',
|
||||
]);
|
||||
$newsletter = Newsletter::filter('search', 'pineapple')
|
||||
->findOne();
|
||||
expect($newsletter->subject)->contains('pineapple');
|
||||
}
|
||||
|
||||
public function testItCanHaveOptions() {
|
||||
$newsletterOptions = [
|
||||
'name' => 'event',
|
||||
@ -777,79 +710,6 @@ class NewsletterTest extends \MailPoetTest {
|
||||
expect($duplicateNewsletter->subject)->equals($data['subject']);
|
||||
}
|
||||
|
||||
public function testItCanQueryAutomaticEmailsByGroup() {
|
||||
$newsletter1 = Newsletter::createOrUpdate(
|
||||
[
|
||||
'subject' => 'WooCommerce',
|
||||
'preheader' => 'Pre Header',
|
||||
'type' => Newsletter::TYPE_AUTOMATIC,
|
||||
]
|
||||
);
|
||||
$newsletter2 = Newsletter::createOrUpdate(
|
||||
[
|
||||
'subject' => 'Unicrons',
|
||||
'preheader' => 'Pre Header',
|
||||
'type' => Newsletter::TYPE_AUTOMATIC,
|
||||
]
|
||||
);
|
||||
$newsletterOptionField = NewsletterOptionField::create();
|
||||
$newsletterOptionField->hydrate(
|
||||
[
|
||||
'newsletter_type' => Newsletter::TYPE_AUTOMATIC,
|
||||
'name' => 'group',
|
||||
]
|
||||
);
|
||||
$newsletterOptionField->save();
|
||||
$newsletterOption1 = NewsletterOption::create();
|
||||
$newsletterOption1->hydrate(
|
||||
[
|
||||
'newsletter_id' => $newsletter1->id,
|
||||
'option_field_id' => $newsletterOptionField->id,
|
||||
'value' => 'woocommerce',
|
||||
]
|
||||
);
|
||||
$newsletterOption1->save();
|
||||
$newsletterOption2 = NewsletterOption::create();
|
||||
$newsletterOption2->hydrate(
|
||||
[
|
||||
'newsletter_id' => $newsletter2->id,
|
||||
'option_field_id' => $newsletterOptionField->id,
|
||||
'value' => 'unicorns',
|
||||
]
|
||||
);
|
||||
$newsletterOption2->save();
|
||||
$listingsData = [
|
||||
'params' => [
|
||||
'type' => Newsletter::TYPE_AUTOMATIC,
|
||||
],
|
||||
'sort_by' => 'updated_at',
|
||||
'sort_order' => 'desc',
|
||||
'offset' => 0,
|
||||
'limit' => 20,
|
||||
'group' => 'all',
|
||||
'search' => '',
|
||||
];
|
||||
|
||||
// get "woocommerce" emails
|
||||
$listingsData['params']['group'] = 'woocommerce';
|
||||
$result = Newsletter::listingQuery($listingsData)->findMany();
|
||||
expect($result)->count(1);
|
||||
expect($result[0]->id)->equals($newsletter1->id);
|
||||
|
||||
// get "unicorn" emails
|
||||
$listingsData['params']['group'] = 'unicorns';
|
||||
$result = Newsletter::listingQuery($listingsData)->findMany();
|
||||
expect($result)->count(1);
|
||||
expect($result[0]->id)->equals($newsletter2->id);
|
||||
|
||||
// get all automatic emails
|
||||
unset($listingsData['params']['group']);
|
||||
$result = Newsletter::listingQuery($listingsData)->findMany();
|
||||
expect($result)->count(2);
|
||||
expect($result[0]->id)->equals($newsletter1->id);
|
||||
expect($result[1]->id)->equals($newsletter2->id);
|
||||
}
|
||||
|
||||
public function testItGetsAndDecodesNewsletterOptionMetaField() {
|
||||
$newsletter = Newsletter::createOrUpdate(
|
||||
[
|
||||
|
@ -0,0 +1,167 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\Newsletter\Listing;
|
||||
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\NewsletterOptionEntity;
|
||||
use MailPoet\Entities\NewsletterOptionFieldEntity;
|
||||
use MailPoet\Entities\NewsletterSegmentEntity;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Listing\Handler;
|
||||
use MailPoet\Models\Newsletter;
|
||||
|
||||
class NewsletterListingRepositoryTest extends \MailPoetTest {
|
||||
public function testItAppliesGroup() {
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$newsletter->setSubject('Newsletter subject');
|
||||
$this->entityManager->persist($newsletter);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$listingHandler = new Handler();
|
||||
$newsletterListingRepository = $this->diContainer->get(NewsletterListingRepository::class);
|
||||
|
||||
// all/trash groups
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['group' => 'all']));
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['group' => 'trash']));
|
||||
expect($newsletters)->count(0);
|
||||
|
||||
// mark the newsletter sent
|
||||
$newsletter->setStatus(NewsletterEntity::STATUS_SENT);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['group' => 'sent']));
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
// delete the newsletter
|
||||
$newsletter->setDeletedAt(new \DateTime());
|
||||
$this->entityManager->flush();
|
||||
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['group' => 'all']));
|
||||
expect($newsletters)->count(0);
|
||||
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['group' => 'trash']));
|
||||
expect($newsletters)->count(1);
|
||||
}
|
||||
|
||||
public function testItAppliesSearch() {
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$newsletter->setSubject('Search for "pineapple" here');
|
||||
$this->entityManager->persist($newsletter);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$listingHandler = new Handler();
|
||||
$newsletterListingRepository = $this->diContainer->get(NewsletterListingRepository::class);
|
||||
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['search' => 'pineapple']));
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['search' => 'tomato']));
|
||||
expect($newsletters)->count(0);
|
||||
}
|
||||
|
||||
public function testItAppliesSegmentFilter() {
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$newsletter->setSubject('Newsletter without segment');
|
||||
$this->entityManager->persist($newsletter);
|
||||
|
||||
$segment = new SegmentEntity();
|
||||
$segment->setName('Segment');
|
||||
$segment->setType(SegmentEntity::TYPE_DEFAULT);
|
||||
$segment->setDescription('Segment description');
|
||||
$this->entityManager->persist($segment);
|
||||
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$newsletter->setSubject('Newsletter with segment');
|
||||
$this->entityManager->persist($newsletter);
|
||||
|
||||
$newsletterSegment = new NewsletterSegmentEntity();
|
||||
$newsletterSegment->setSegment($segment);
|
||||
$newsletterSegment->setNewsletter($newsletter);
|
||||
$this->entityManager->persist($newsletterSegment);
|
||||
|
||||
$this->entityManager->flush();
|
||||
|
||||
$listingHandler = new Handler();
|
||||
$newsletterListingRepository = $this->diContainer->get(NewsletterListingRepository::class);
|
||||
|
||||
// without filter
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition([]));
|
||||
expect($newsletters)->count(2);
|
||||
|
||||
// with filter
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition([
|
||||
'filter' => [
|
||||
'segment' => $segment->getId(),
|
||||
],
|
||||
]));
|
||||
expect($newsletters)->count(1);
|
||||
}
|
||||
|
||||
public function testItAppliesAutomaticEmailsGroupParameter() {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName('group');
|
||||
$newsletterOptionField->setNewsletterType(NewsletterEntity::TYPE_AUTOMATIC);
|
||||
$this->entityManager->persist($newsletterOptionField);
|
||||
|
||||
$newsletter1 = new NewsletterEntity();
|
||||
$newsletter1->setType(NewsletterEntity::TYPE_AUTOMATIC);
|
||||
$newsletter1->setSubject('Automatic email 1');
|
||||
$this->entityManager->persist($newsletter1);
|
||||
|
||||
$newsletter1Option = new NewsletterOptionEntity();
|
||||
$newsletter1Option->setNewsletter($newsletter1);
|
||||
$newsletter1Option->setOptionField($newsletterOptionField);
|
||||
$newsletter1Option->setValue('woocommerce');
|
||||
$this->entityManager->persist($newsletter1Option);
|
||||
|
||||
$newsletter2 = new NewsletterEntity();
|
||||
$newsletter2->setType(NewsletterEntity::TYPE_AUTOMATIC);
|
||||
$newsletter2->setSubject('Automatic email 2');
|
||||
$this->entityManager->persist($newsletter2);
|
||||
|
||||
$newsletter2Option = new NewsletterOptionEntity();
|
||||
$newsletter2Option->setNewsletter($newsletter2);
|
||||
$newsletter2Option->setOptionField($newsletterOptionField);
|
||||
$newsletter2Option->setValue('unicorns');
|
||||
$this->entityManager->persist($newsletter2Option);
|
||||
|
||||
$this->entityManager->flush();
|
||||
|
||||
$listingHandler = new Handler();
|
||||
$newsletterListingRepository = $this->diContainer->get(NewsletterListingRepository::class);
|
||||
|
||||
// get 'woocommerce' group
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition([
|
||||
'params' => [
|
||||
'type' => Newsletter::TYPE_AUTOMATIC,
|
||||
'group' => 'woocommerce',
|
||||
],
|
||||
]));
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
// get 'unicorns' group
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition([
|
||||
'params' => [
|
||||
'type' => Newsletter::TYPE_AUTOMATIC,
|
||||
'group' => 'unicorns',
|
||||
],
|
||||
]));
|
||||
expect($newsletters)->count(1);
|
||||
|
||||
// get all emails group
|
||||
$newsletters = $newsletterListingRepository->getData($listingHandler->getListingDefinition(['type' => Newsletter::TYPE_AUTOMATIC]));
|
||||
expect($newsletters)->count(2);
|
||||
}
|
||||
|
||||
public function _after() {
|
||||
$this->truncateEntity(NewsletterEntity::class);
|
||||
$this->truncateEntity(SegmentEntity::class);
|
||||
$this->truncateEntity(NewsletterSegmentEntity::class);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user