Skip to content

Commit fba5aa9

Browse files
committed
ISSUE-345: add test + fix template
1 parent 5412507 commit fba5aa9

File tree

5 files changed

+142
-2
lines changed

5 files changed

+142
-2
lines changed

config/repositories.yml

+5
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,8 @@ services:
3030
parent: PhpList\Core\Domain\Repository
3131
arguments:
3232
- PhpList\Core\Domain\Model\Messaging\Message
33+
34+
PhpList\Core\Domain\Repository\Messaging\TemplateRepository:
35+
parent: PhpList\Core\Domain\Repository
36+
arguments:
37+
- PhpList\Core\Domain\Model\Messaging\Template

src/Domain/Model/Messaging/Template.php

+12-2
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,22 @@ public function getTitle(): string
5252

5353
public function getTemplate(): ?string
5454
{
55-
return is_resource($this->template) ? stream_get_contents($this->template) : $this->template;
55+
if (is_resource($this->template)) {
56+
rewind($this->template);
57+
return stream_get_contents($this->template);
58+
}
59+
60+
return $this->template;
5661
}
5762

5863
public function getTemplateText(): ?string
5964
{
60-
return is_resource($this->templateText) ? stream_get_contents($this->templateText) : $this->templateText;
65+
if (is_resource($this->templateText)) {
66+
rewind($this->templateText);
67+
return stream_get_contents($this->templateText);
68+
}
69+
70+
return $this->templateText;
6171
}
6272

6373
public function getListOrder(): ?int
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id,title,template,template_text,listorder
2+
1,Newsletter Template,<html><body><h1>Welcome</h1></body></html>,,1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Tests\Integration\Domain\Repository\Fixtures\Messaging;
6+
7+
use Doctrine\Bundle\FixturesBundle\Fixture;
8+
use Doctrine\Persistence\ObjectManager;
9+
use PhpList\Core\Domain\Model\Messaging\Template;
10+
use PhpList\Core\TestingSupport\Traits\ModelTestTrait;
11+
use RuntimeException;
12+
13+
class TemplateFixture extends Fixture
14+
{
15+
use ModelTestTrait;
16+
17+
public function load(ObjectManager $manager): void
18+
{
19+
$csvFile = __DIR__ . '/Template.csv';
20+
21+
if (!file_exists($csvFile)) {
22+
throw new RuntimeException(sprintf('Fixture file "%s" not found.', $csvFile));
23+
}
24+
25+
$handle = fopen($csvFile, 'r');
26+
if ($handle === false) {
27+
throw new RuntimeException(sprintf('Could not open fixture file "%s".', $csvFile));
28+
}
29+
30+
$headers = fgetcsv($handle);
31+
32+
do {
33+
$data = fgetcsv($handle);
34+
if ($data === false) {
35+
break;
36+
}
37+
$row = array_combine($headers, $data);
38+
39+
$template = new Template($row['title']);
40+
$template->setTemplate($row['template']);
41+
$template->setTemplateText($row['template_text']);
42+
$template->setListOrder((int)$row['listorder']);
43+
44+
$this->setSubjectId($template, (int)$row['id']);
45+
$manager->persist($template);
46+
} while (true);
47+
48+
fclose($handle);
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Tests\Integration\Domain\Repository\Messaging;
6+
7+
use Doctrine\ORM\Tools\SchemaTool;
8+
use PhpList\Core\Domain\Model\Messaging\Template;
9+
use PhpList\Core\Domain\Repository\Messaging\TemplateRepository;
10+
use PhpList\Core\TestingSupport\Traits\DatabaseTestTrait;
11+
use PhpList\Core\Tests\Integration\Domain\Repository\Fixtures\Messaging\TemplateFixture;
12+
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
13+
14+
class TemplateRepositoryTest extends KernelTestCase
15+
{
16+
use DatabaseTestTrait;
17+
18+
private TemplateRepository $templateRepository;
19+
20+
protected function setUp(): void
21+
{
22+
parent::setUp();
23+
$this->loadSchema();
24+
25+
$this->templateRepository = self::getContainer()->get(TemplateRepository::class);
26+
}
27+
28+
protected function tearDown(): void
29+
{
30+
$schemaTool = new SchemaTool($this->entityManager);
31+
$schemaTool->dropDatabase();
32+
parent::tearDown();
33+
}
34+
35+
public function testGetAllTemplatesReturnsCorrectResults(): void
36+
{
37+
$template1 = new Template('Template 1');
38+
$template2 = new Template('Template 2');
39+
40+
$this->entityManager->persist($template1);
41+
$this->entityManager->persist($template2);
42+
$this->entityManager->flush();
43+
$this->entityManager->clear();
44+
45+
$allTemplates = $this->templateRepository->findAll();
46+
47+
self::assertCount(2, $allTemplates);
48+
self::assertContainsOnlyInstancesOf(Template::class, $allTemplates);
49+
}
50+
51+
public function testTemplateIsPersistedAndFetchedCorrectly(): void
52+
{
53+
$this->loadFixtures([TemplateFixture::class]);
54+
55+
$fetched = $this->templateRepository->findOneBy(['title' => 'Newsletter Template']);
56+
57+
self::assertInstanceOf(Template::class, $fetched);
58+
self::assertSame('Newsletter Template', $fetched->getTitle());
59+
self::assertSame('<html><body><h1>Welcome</h1></body></html>', $fetched->getTemplate());
60+
self::assertSame('', $fetched->getTemplateText());
61+
self::assertSame(1, $fetched->getListOrder());
62+
}
63+
64+
public function testGetAllTemplatesReturnsCorrectType(): void
65+
{
66+
$this->loadFixtures([TemplateFixture::class]);
67+
68+
$allTemplates = $this->templateRepository->findAll();
69+
70+
self::assertNotEmpty($allTemplates);
71+
self::assertContainsOnlyInstancesOf(Template::class, $allTemplates);
72+
}
73+
}

0 commit comments

Comments
 (0)