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); } }