-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathPublicationPageCompilerTest.php
131 lines (102 loc) · 5.36 KB
/
PublicationPageCompilerTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
declare(strict_types=1);
namespace Hyde\Framework\Testing\Feature\Actions;
use function file_get_contents;
use function file_put_contents;
use Hyde\Framework\Actions\PublicationPageCompiler;
use Hyde\Framework\Exceptions\FileNotFoundException;
use Hyde\Framework\Features\Publications\Models\PublicationType;
use Hyde\Hyde;
use Hyde\Pages\PublicationPage;
use Hyde\Support\Facades\Render;
use Hyde\Testing\TestCase;
use function json_decode;
use function json_encode;
/**
* @covers \Hyde\Framework\Actions\PublicationPageCompiler
*/
class PublicationPageCompilerTest extends TestCase
{
public function test_can_compile_publication_pages()
{
$this->directory('test-publication');
$this->setupTestPublication();
file_put_contents(Hyde::path('test-publication/detail.blade.php'), 'Detail: {{ $publication->title }}');
$string = PublicationPageCompiler::call(new PublicationPage('my-publication', type: PublicationType::get('test-publication')));
$this->assertEquals('Detail: My Publication', $string);
}
public function test_can_compile_publication_list_pages()
{
$this->directory('test-publication');
$this->setupTestPublication();
file_put_contents(Hyde::path('test-publication/my-publication.md'), 'Foo');
file_put_contents(Hyde::path('test-publication/list.blade.php'), 'List: {{ $publications->first()->title }}');
$string = PublicationPageCompiler::call(PublicationType::get('test-publication')->getListPage());
$this->assertEquals('List: My Publication', $string);
}
public function test_can_compile_publication_pages_with_registered_view()
{
$this->directory('test-publication');
$this->setupTestPublication();
$schema = json_decode(file_get_contents(Hyde::path('test-publication/schema.json')));
$schema->detailTemplate = 'foo';
file_put_contents(Hyde::path('test-publication/schema.json'), json_encode($schema));
$this->directory('resources/views');
$this->file('resources/views/foo.blade.php', 'Registered detail view');
$publicationPage = new PublicationPage('my-publication', type: PublicationType::get('test-publication'));
Render::setPage($publicationPage);
$this->assertEquals('Registered detail view', PublicationPageCompiler::call($publicationPage));
}
public function test_can_compile_publication_list_pages_with_registered_view()
{
$this->directory('test-publication');
$this->setupTestPublication();
$schema = json_decode(file_get_contents(Hyde::path('test-publication/schema.json')));
$schema->listTemplate = 'foo';
file_put_contents(Hyde::path('test-publication/schema.json'), json_encode($schema));
$this->directory('resources/views');
$this->file('resources/views/foo.blade.php', 'Registered list view');
$publicationType = PublicationType::get('test-publication');
$publicationPage = $publicationType->getListPage();
$this->assertEquals('Registered list view', PublicationPageCompiler::call($publicationPage));
}
public function test_can_compile_publication_pages_with_registered_namespaced_view()
{
$this->directory('test-publication');
$this->setupTestPublication();
$schema = json_decode(file_get_contents(Hyde::path('test-publication/schema.json')));
$schema->detailTemplate = 'hyde::layouts.publication';
file_put_contents(Hyde::path('test-publication/schema.json'), json_encode($schema));
$publicationPage = new PublicationPage('my-publication', type: PublicationType::get('test-publication'));
Render::setPage($publicationPage);
$this->assertStringContainsString('My Publication', PublicationPageCompiler::call($publicationPage));
}
public function test_can_compile_publication_list_pages_with_registered_namespaced_view()
{
$this->directory('test-publication');
$this->setupTestPublication();
$schema = json_decode(file_get_contents(Hyde::path('test-publication/schema.json')));
$schema->listTemplate = 'hyde::layouts.publication_list';
file_put_contents(Hyde::path('test-publication/schema.json'), json_encode($schema));
file_put_contents(Hyde::path('test-publication/my-publication.md'), 'Foo');
$publicationType = PublicationType::get('test-publication');
$publicationPage = $publicationType->getListPage();
$this->assertEquals("The default publication list template\n", PublicationPageCompiler::call($publicationPage));
}
public function test_with_missing_detail_blade_view()
{
$this->directory('test-publication');
$this->setupTestPublication();
$this->expectException(FileNotFoundException::class);
$this->expectExceptionMessage('File [test-publication/detail.blade.php] not found.');
PublicationPageCompiler::call(new PublicationPage('my-publication', type: PublicationType::get('test-publication')));
}
public function test_with_missing_list_blade_view()
{
$this->directory('test-publication');
$this->setupTestPublication();
$this->expectException(FileNotFoundException::class);
$this->expectExceptionMessage('File [test-publication/list.blade.php] not found.');
PublicationPageCompiler::call(PublicationType::get('test-publication')->getListPage());
}
}