newsletter = $newsletterFactory->withSendingQueue()->create();
$this->queue = $this->newsletter->getQueues()->first();
$this->links = $this->diContainer->get(Links::class);
$this->newsletterLinkRepository = $this->diContainer->get(NewsletterLinkRepository::class);
}
public function testItCanSaveLinks() {
$links = [
[
'link' => 'http://example.com',
'hash' => 'some_hash',
],
];
$queue = (object)['id' => $this->queue->getId()];
$this->links->saveLinks($links, $this->newsletter, $queue);
$newsletterLink = $this->newsletterLinkRepository->findOneBy(['hash' => $links[0]['hash']]);
$this->assertInstanceOf(NewsletterLinkEntity::class, $newsletterLink);
$this->assertInstanceOf(NewsletterEntity::class, $newsletterLink->getNewsletter());
expect($newsletterLink->getNewsletter()->getId())->equals($this->newsletter->getId());
$this->assertInstanceOf(SendingQueueEntity::class, $newsletterLink->getQueue());
expect($newsletterLink->getQueue()->getId())->equals($this->queue->getId());
expect($newsletterLink->getUrl())->equals($links[0]['link']);
}
public function testItCanHashAndReplaceLinks() {
$renderedNewsletter = [
'html' => 'Example Link',
'text' => 'Example Link',
];
$result = $this->links->hashAndReplaceLinks($renderedNewsletter, 0, 0);
$processedRenderedNewsletterBody = $result[0];
$processedAndHashedLinks = $result[1];
expect($processedRenderedNewsletterBody['html'])
->stringContainsString($processedAndHashedLinks[0]['hash']);
expect($processedRenderedNewsletterBody['text'])
->stringContainsString($processedAndHashedLinks[0]['hash']);
expect($processedAndHashedLinks[0]['link'])->equals('http://example.com');
}
public function testItCanProcessRenderedBody() {
$renderedNewsletter = [
'html' => 'Example Link',
'text' => 'Example Link',
];
$result = $this->links->process($renderedNewsletter, $this->newsletter, $this->queue);
$newsletterLink = $this->newsletterLinkRepository->findOneBy(['newsletter' => $this->newsletter->getId()]);
$this->assertInstanceOf(NewsletterLinkEntity::class, $newsletterLink);
expect($result['html'])->stringContainsString($newsletterLink->getHash());
}
public function testItCanEnsureThatInstantUnsubscribeLinkIsAlwaysPresent() {
$renderedNewsletter = [
'html' => 'Example Link',
'text' => 'Example Link',
];
$this->links->process($renderedNewsletter, $this->newsletter, $this->queue);
$unsubscribeCount = $this->newsletterLinkRepository->countBy(
[
'newsletter' => $this->newsletter->getId(),
'url' => NewsletterLinkEntity::INSTANT_UNSUBSCRIBE_LINK_SHORT_CODE,
]
);
expect($unsubscribeCount)->equals(1);
}
}