Skip to content

Commit 8b81d3a

Browse files
committed
ISSUE-345: message fixture + test
1 parent bbbfb09 commit 8b81d3a

File tree

1 file changed

+133
-0
lines changed

1 file changed

+133
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Tests\Integration\Domain\Repository\Messaging;
6+
7+
use DateTime;
8+
use Doctrine\ORM\Tools\SchemaTool;
9+
use PhpList\Core\Domain\Model\Identity\Administrator;
10+
use PhpList\Core\Domain\Model\Messaging\Message;
11+
use PhpList\Core\Domain\Model\Messaging\Message\MessageContent;
12+
use PhpList\Core\Domain\Model\Messaging\Message\MessageFormat;
13+
use PhpList\Core\Domain\Model\Messaging\Message\MessageMetadata;
14+
use PhpList\Core\Domain\Model\Messaging\Message\MessageOptions;
15+
use PhpList\Core\Domain\Model\Messaging\Message\MessageSchedule;
16+
use PhpList\Core\Domain\Repository\Messaging\MessageRepository;
17+
use PhpList\Core\TestingSupport\Traits\DatabaseTestTrait;
18+
use PhpList\Core\TestingSupport\Traits\SimilarDatesAssertionTrait;
19+
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
20+
21+
class MessageRepositoryTest extends KernelTestCase
22+
{
23+
use DatabaseTestTrait;
24+
use SimilarDatesAssertionTrait;
25+
26+
private MessageRepository $messageRepository;
27+
28+
protected function setUp(): void
29+
{
30+
parent::setUp();
31+
$this->loadSchema();
32+
33+
$this->messageRepository = self::getContainer()->get(MessageRepository::class);
34+
}
35+
36+
protected function tearDown(): void
37+
{
38+
$schemaTool = new SchemaTool($this->entityManager);
39+
$schemaTool->dropDatabase();
40+
parent::tearDown();
41+
}
42+
43+
public function testMessageIsPersistedAndFetchedCorrectly(): void
44+
{
45+
$admin = new Administrator();
46+
$this->entityManager->persist($admin);
47+
48+
$message = new Message(
49+
new MessageFormat(true),
50+
new MessageSchedule(1, null, 3, null),
51+
new MessageMetadata('done'),
52+
new MessageContent('Hello world!'),
53+
new MessageOptions(),
54+
$admin
55+
);
56+
57+
$this->entityManager->persist($message);
58+
$this->entityManager->flush();
59+
$this->entityManager->clear();
60+
61+
$foundMessages = $this->messageRepository->getByOwnerId($admin->getId());
62+
63+
self::assertCount(1, $foundMessages);
64+
self::assertInstanceOf(Message::class, $foundMessages[0]);
65+
self::assertSame('done', $foundMessages[0]->getMetadata()->getStatus());
66+
self::assertSame('Hello world!', $foundMessages[0]->getContent()->getSubject());
67+
}
68+
69+
public function testGetByOwnerIdReturnsOnlyOwnedMessages(): void
70+
{
71+
$admin1 = new Administrator();
72+
$admin2 = new Administrator();
73+
74+
$this->entityManager->persist($admin1);
75+
$this->entityManager->persist($admin2);
76+
77+
$msg1 = new Message(
78+
new MessageFormat(true),
79+
new MessageSchedule(1, null, 3, null),
80+
new MessageMetadata('done'),
81+
new MessageContent('Owned by Admin 1!'),
82+
new MessageOptions(),
83+
$admin1
84+
);
85+
86+
$msg2 = new Message(
87+
new MessageFormat(true),
88+
new MessageSchedule(1, null, 3, null),
89+
new MessageMetadata(null),
90+
new MessageContent('Owned by Admin 2!'),
91+
new MessageOptions(),
92+
$admin2
93+
);
94+
95+
$msg3 = new Message(
96+
new MessageFormat(true),
97+
new MessageSchedule(1, null, 3, null),
98+
new MessageMetadata(null),
99+
new MessageContent('Hello world!'),
100+
new MessageOptions(),
101+
null
102+
);
103+
104+
$this->entityManager->persist($msg1);
105+
$this->entityManager->persist($msg2);
106+
$this->entityManager->persist($msg3);
107+
$this->entityManager->flush();
108+
$this->entityManager->clear();
109+
110+
$results = $this->messageRepository->getByOwnerId($admin1->getId());
111+
112+
self::assertCount(1, $results);
113+
self::assertSame('Owned by Admin 1!', $results[0]->getContent()->getSubject());
114+
}
115+
116+
public function testMessageTimestampsAreSetOnPersist(): void
117+
{
118+
$expectedDate = new DateTime();
119+
120+
$message = new Message(
121+
new MessageFormat(true),
122+
new MessageSchedule(1, null, 3, null),
123+
new MessageMetadata(null),
124+
new MessageContent('Hello world!'),
125+
new MessageOptions(),
126+
null
127+
);
128+
129+
$this->entityManager->persist($message);
130+
131+
self::assertSimilarDates($expectedDate, $message->getModificationDate());
132+
}
133+
}

0 commit comments

Comments
 (0)