Skip to content

Commit d3c9193

Browse files
committed
Add Templates findByName
1 parent 23b3a65 commit d3c9193

File tree

5 files changed

+72
-1
lines changed

5 files changed

+72
-1
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php namespace Tatter\Outbox\Exceptions;
2+
3+
class TemplatesException extends \RuntimeException
4+
{
5+
public static function forMissingTemplate(string $name)
6+
{
7+
return new static(lang('Templates.missingTemplate', [$name]));
8+
}
9+
}

src/Language/en/Templates.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
return [
4+
'missingTemplate' => 'Unable to find the email template "{0}".',
5+
];

src/Models/TemplateModel.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
use CodeIgniter\Model;
44
use Tatter\Outbox\Entities\Template;
5+
use Tatter\Outbox\Exceptions\TemplatesException;
56

67
class TemplateModel extends Model
78
{
@@ -16,4 +17,23 @@ class TemplateModel extends Model
1617
protected $allowedFields = [
1718
'name', 'subject', 'body', 'tokens', 'parent_id',
1819
];
20+
21+
/**
22+
* Returns a Template by its name, throws if not found.
23+
*
24+
* @param string $name
25+
*
26+
* @return Template
27+
*
28+
* @throws TemplatesException
29+
*/
30+
public function findByName(string $name): Template
31+
{
32+
if ($template = $this->where('name', $name)->first())
33+
{
34+
return $template;
35+
}
36+
37+
throw TemplatesException::forMissingTemplate($name);
38+
}
1939
}

tests/templates/ParentTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?php
22

3-
use CodeIgniter\Test\CIUnitTestCase;
43
use CodeIgniter\Test\DOMParser;
54
use Tatter\Outbox\Entities\Template;
65
use Tatter\Outbox\Models\TemplateModel;
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
use Tatter\Outbox\Entities\Template;
4+
use Tatter\Outbox\Exceptions\TemplatesException;
5+
use Tatter\Outbox\Models\TemplateModel;
6+
use Tests\Support\DatabaseTestCase;
7+
8+
class TemplateModelTest extends DatabaseTestCase
9+
{
10+
public function setUp(): void
11+
{
12+
parent::setUp();
13+
14+
$this->template = new Template([
15+
'name' => 'Test Template',
16+
'subject' => 'Some {subject}',
17+
'body' => '<p>{number}</p>',
18+
'tokens' => ['subject', 'number', 'foobar'],
19+
]);
20+
$this->template->id = model(TemplateModel::class)->insert($this->template);
21+
}
22+
23+
public function testFindByName()
24+
{
25+
$result = model(TemplateModel::class)->findByName($this->template->name);
26+
27+
$this->assertInstanceOf(Template::class, $result);
28+
$this->assertEquals($this->template->id, $result->id);
29+
}
30+
31+
public function testFindByNameThrowsOnFailure()
32+
{
33+
$this->expectException(TemplatesException::class);
34+
$this->expectExceptionMessage(lang('Templates.missingTemplate', ['foobar']));
35+
36+
model(TemplateModel::class)->findByName('foobar');
37+
}
38+
}

0 commit comments

Comments
 (0)