Skip to content

Commit a81717b

Browse files
committed
ISSUE-345: campaign controller test
1 parent a90900b commit a81717b

File tree

3 files changed

+211
-0
lines changed

3 files changed

+211
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Tests\Integration\Controller;
6+
7+
use PhpList\RestBundle\Controller\CampaignController;
8+
use PhpList\RestBundle\Tests\Integration\Controller\Fixtures\Identity\AdministratorFixture;
9+
use PhpList\RestBundle\Tests\Integration\Controller\Fixtures\Identity\AdministratorTokenFixture;
10+
use PhpList\RestBundle\Tests\Integration\Controller\Fixtures\Messaging\MessageFixture;
11+
12+
class CampaignControllerTest extends AbstractTestController
13+
{
14+
public function testControllerIsAvailableViaContainer(): void
15+
{
16+
self::assertInstanceOf(CampaignController::class, self::getContainer()->get(CampaignController::class));
17+
}
18+
19+
public function testGetCampaignsWithoutSessionKeyReturnsForbidden(): void
20+
{
21+
self::getClient()->request('GET', '/api/v2/campaigns');
22+
$this->assertHttpForbidden();
23+
}
24+
25+
public function testGetCampaignsWithExpiredSessionKeyReturnsForbidden(): void
26+
{
27+
$this->loadFixtures([AdministratorFixture::class, AdministratorTokenFixture::class]);
28+
29+
self::getClient()->request(
30+
'GET',
31+
'/api/v2/campaigns',
32+
[],
33+
[],
34+
['PHP_AUTH_USER' => 'unused', 'PHP_AUTH_PW' => 'expiredtoken']
35+
);
36+
37+
$this->assertHttpForbidden();
38+
}
39+
40+
public function testGetCampaignsWithValidSessionReturnsOkay(): void
41+
{
42+
$this->authenticatedJsonRequest('GET', '/api/v2/campaigns');
43+
$this->assertHttpOkay();
44+
}
45+
46+
public function testGetCampaignsReturnsCampaignData(): void
47+
{
48+
$this->loadFixtures([AdministratorFixture::class, MessageFixture::class]);
49+
50+
$this->authenticatedJsonRequest('GET', '/api/v2/campaigns');
51+
$response = $this->getDecodedJsonResponseContent();
52+
53+
self::assertIsArray($response);
54+
self::assertArrayHasKey('id', $response[0]);
55+
self::assertArrayHasKey('message_content', $response[0]);
56+
}
57+
58+
public function testGetSingleCampaignWithValidSessionReturnsData(): void
59+
{
60+
$this->loadFixtures([MessageFixture::class]);
61+
62+
$this->authenticatedJsonRequest('GET', '/api/v2/campaigns/1');
63+
$this->assertHttpOkay();
64+
65+
$response = $this->getDecodedJsonResponseContent();
66+
self::assertSame(1, $response['id']);
67+
}
68+
69+
public function testGetSingleCampaignWithoutSessionReturnsForbidden(): void
70+
{
71+
$this->loadFixtures([MessageFixture::class]);
72+
self::getClient()->request('GET', '/api/v2/campaigns/1');
73+
$this->assertHttpForbidden();
74+
}
75+
76+
public function testGetCampaignWithInvalidIdReturnsNotFound(): void
77+
{
78+
$this->authenticatedJsonRequest('GET', '/api/v2/campaigns/999');
79+
$this->assertHttpNotFound();
80+
}
81+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
id,uuid,subject,fromfield,tofield,replyto,message,textmessage,footer,entered,modified,embargo,repeatinterval,repeatuntil,requeueinterval,requeueuntil,status,userselection,sent,htmlformatted,sendformat,template,processed,astext,ashtml,astextandhtml,aspdf,astextandpdf,viewed,bouncecount,sendstart,rsstemplate,owner
2+
1,2df6b147-8470-45ed-8e4e-86aa01af400d,Do you want to continue receiving our messages?, My Name <[email protected]>,"","","<p>Hi [FIRST NAME%%there], remember us? You first signed up for our email newsletter on&nbsp;[ENTERED] &ndash; please click here to confirm you&#39;re happy to continue receiving our messages:</p>
3+
4+
<p><strong><a href=""[CONFIRMATIONURL]"" title=""Confirm subscription"">Continue receiving messages</a></strong>&nbsp; <u>(If you do not confirm using this link, then you won&#39;t hear from us again</u>)</p>
5+
6+
<p>While you&#39;re at it, you can also update your preferences, including your email address or other details, by clicking here:</p>
7+
8+
<p><strong><a href=""[PREFERENCESURL]"">Update preferences</a></strong></p>
9+
10+
<p>By confirming your membership and keeping your details up to date, you&#39;re helping us to manage and protect your data in accordance with best practices.</p>
11+
12+
<p>Thank you!</p>","","--
13+
14+
<div class=""footer"" style=""text-align:left; font-size: 75%;"">
15+
<p>This message was sent to [EMAIL] by [FROMEMAIL].</p>
16+
<p>To forward this message, please do not use the forward button of your email application, because this message was made specifically for you only. Instead use the <a href=""[FORWARDURL]"">forward page</a> in our newsletter system.<br/>
17+
To change your details and to choose which lists to be subscribed to, visit your personal <a href=""[PREFERENCESURL]"">preferences page</a>.<br/>
18+
Or you can <a href=""[UNSUBSCRIBEURL]"">opt-out completely</a> from all future mailings.</p>
19+
</div>
20+
21+
",2024-11-10 16:57:46,2024-11-14 08:32:15,2024-11-14 08:32:00,0,2024-11-14 08:32:00,0,2024-11-14 08:32:00,sent,,2024-11-14 08:32:15,1,invite,0,0,0,0,0,0,0,0,0,2024-11-14 08:32:15,,1
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Tests\Integration\Controller\Fixtures\Messaging;
6+
7+
use DateTime;
8+
use Doctrine\Bundle\FixturesBundle\Fixture;
9+
use Doctrine\Persistence\ObjectManager;
10+
use PhpList\Core\Domain\Model\Identity\Administrator;
11+
use PhpList\Core\Domain\Model\Messaging\Message;
12+
use PhpList\Core\Domain\Model\Messaging\Message\MessageContent;
13+
use PhpList\Core\Domain\Model\Messaging\Message\MessageFormat;
14+
use PhpList\Core\Domain\Model\Messaging\Message\MessageMetadata;
15+
use PhpList\Core\Domain\Model\Messaging\Message\MessageOptions;
16+
use PhpList\Core\Domain\Model\Messaging\Message\MessageSchedule;
17+
use PhpList\Core\Domain\Model\Messaging\Template;
18+
use PhpList\Core\TestingSupport\Traits\ModelTestTrait;
19+
use RuntimeException;
20+
21+
class MessageFixture extends Fixture
22+
{
23+
use ModelTestTrait;
24+
25+
public function load(ObjectManager $manager): void
26+
{
27+
$csvFile = __DIR__ . '/Message.csv';
28+
29+
if (!file_exists($csvFile)) {
30+
throw new RuntimeException(sprintf('Fixture file "%s" not found.', $csvFile));
31+
}
32+
33+
$handle = fopen($csvFile, 'r');
34+
if ($handle === false) {
35+
throw new RuntimeException(sprintf('Could not open fixture file "%s".', $csvFile));
36+
}
37+
38+
$headers = fgetcsv($handle);
39+
$adminRepository = $manager->getRepository(Administrator::class);
40+
$templateRepository = $manager->getRepository(Template::class);
41+
42+
do {
43+
$data = fgetcsv($handle);
44+
if ($data === false) {
45+
break;
46+
}
47+
$row = array_combine($headers, $data);
48+
$admin = $adminRepository->find($row['owner']);
49+
$template = $templateRepository->find($row['template']);
50+
51+
$format = new MessageFormat(
52+
(bool)$row['htmlformatted'],
53+
$row['sendformat'],
54+
array_keys(array_filter([
55+
MessageFormat::FORMAT_TEXT => $row['astext'],
56+
MessageFormat::FORMAT_HTML => $row['ashtml'],
57+
MessageFormat::FORMAT_PDF => $row['aspdf'],
58+
]))
59+
);
60+
61+
$schedule = new MessageSchedule(
62+
(int)$row['repeatinterval'],
63+
new DateTime($row['repeatuntil']),
64+
(int)$row['requeueinterval'],
65+
new DateTime($row['requeueuntil']),
66+
new DateTime($row['embargo']),
67+
);
68+
$metadata = new MessageMetadata(
69+
$row['status'],
70+
(int)$row['bouncecount'],
71+
new DateTime($row['entered']),
72+
new DateTime($row['sent']),
73+
);
74+
$metadata->setProcessed((bool) $row['processed']);
75+
$metadata->setViews((int)$row['viewed']);
76+
$content = new MessageContent(
77+
$row['subject'],
78+
$row['message'],
79+
$row['textmessage'],
80+
$row['footer']
81+
);
82+
$options = new MessageOptions(
83+
$row['fromfield'],
84+
$row['tofield'],
85+
$row['replyto'],
86+
$row['userselection'],
87+
new DateTime($row['sendstart']),
88+
$row['rsstemplate'],
89+
);
90+
91+
$message = new Message(
92+
$format,
93+
$schedule,
94+
$metadata,
95+
$content,
96+
$options,
97+
$admin,
98+
$template,
99+
);
100+
$this->setSubjectId($message, (int)$row['id']);
101+
$this->setSubjectProperty($message, 'uuid', $row['uuid']);
102+
103+
$manager->persist($message);
104+
$this->setSubjectProperty($message, 'modificationDate', new DateTime($row['modified']));
105+
} while (true);
106+
107+
fclose($handle);
108+
}
109+
}

0 commit comments

Comments
 (0)