Skip to content

Commit 8e07530

Browse files
authored
Merge pull request #6 from tattersoftware/find-by-name
Add Templates findByName
2 parents 23b3a65 + e7c473f commit 8e07530

File tree

6 files changed

+78
-1
lines changed

6 files changed

+78
-1
lines changed

phpstan.neon.dist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ parameters:
1111
- src/Views/*
1212
ignoreErrors:
1313
- '#Cannot access property [\$a-z_]+ on (array|object)#'
14+
- '#Unsafe usage of new static\(\)#'
1415
universalObjectCratesClasses:
1516
- CodeIgniter\Entity
1617
- Faker\Generator
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: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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+
/**
11+
* @var Template
12+
*/
13+
protected $template;
14+
15+
public function setUp(): void
16+
{
17+
parent::setUp();
18+
19+
$this->template = new Template([
20+
'name' => 'Test Template',
21+
'subject' => 'Some {subject}',
22+
'body' => '<p>{number}</p>',
23+
'tokens' => ['subject', 'number', 'foobar'],
24+
]);
25+
$this->template->id = model(TemplateModel::class)->insert($this->template);
26+
}
27+
28+
public function testFindByName()
29+
{
30+
$result = model(TemplateModel::class)->findByName($this->template->name);
31+
32+
$this->assertInstanceOf(Template::class, $result);
33+
$this->assertEquals($this->template->id, $result->id);
34+
}
35+
36+
public function testFindByNameThrowsOnFailure()
37+
{
38+
$this->expectException(TemplatesException::class);
39+
$this->expectExceptionMessage(lang('Templates.missingTemplate', ['foobar']));
40+
41+
model(TemplateModel::class)->findByName('foobar');
42+
}
43+
}

0 commit comments

Comments
 (0)