Completed
Push — master ( af891e...5c98d3 )
by Sam
11:04
created

TemplateLoaderTest::testFindTemplatesApplicationLayoutOverridesThemeLayout()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 10
nc 1
nop 0
dl 0
loc 15
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
use SilverStripe\View\TemplateLoader;
4
use SilverStripe\View\ThemeManifest;
5
6
/**
7
 * Tests for the {@link TemplateLoader} class.
8
 *
9
 * @package framework
10
 * @subpackage tests
11
 */
12
class TemplateLoaderTest extends SapphireTest {
13
14
	private $base;
15
	private $manifest;
16
	private $loader;
17
18
	/**
19
	 * Set up manifest before each test
20
	 */
21
	public function setUp() {
22
		parent::setUp();
23
		// Fake project root
24
		$this->base = dirname(__FILE__) . '/fixtures/templatemanifest';
25
		// New ThemeManifest for that root
26
		$this->manifest = new \SilverStripe\View\ThemeManifest($this->base, 'myproject', false, true);
27
		// New Loader for that root
28
		$this->loader = new \SilverStripe\View\TemplateLoader($this->base);
29
		$this->loader->addSet('$default', $this->manifest);
30
	}
31
32
	/**
33
	 * Test that 'main' and 'Layout' templates are loaded from module
34
	 */
35
	public function testFindTemplatesInModule() {
36
		$this->assertEquals(
37
			"$this->base/module/templates/Page.ss",
38
			$this->loader->findTemplate('Page', ['$default'])
39
		);
40
41
		$this->assertEquals(
42
			"$this->base/module/templates/Layout/Page.ss",
43
			$this->loader->findTemplate(['type' => 'Layout', 'Page'], ['$default'])
44
		);
45
	}
46
47
	/**
48
	 * Test that 'main' and 'Layout' templates are loaded from set theme
49
	 */
50
	public function testFindTemplatesInTheme() {
51
		$this->assertEquals(
52
			"$this->base/themes/theme/templates/Page.ss",
53
			$this->loader->findTemplate('Page', ['theme'])
54
		);
55
56
		$this->assertEquals(
57
			"$this->base/themes/theme/templates/Layout/Page.ss",
58
			$this->loader->findTemplate(['type' => 'Layout', 'Page'], ['theme'])
59
		);
60
	}
61
62
	/**
63
	 * Test that 'main' and 'Layout' templates are loaded from project without a set theme
64
	 */
65
	public function testFindTemplatesInApplication() {
66
		// TODO: replace with one that doesn't create temporary files (so bad)
67
		$templates = array(
68
			$this->base . '/myproject/templates/Page.ss',
69
			$this->base . '/myproject/templates/Layout/Page.ss'
70
		);
71
		$this->createTestTemplates($templates);
72
73
		$this->assertEquals(
74
			"$this->base/myproject/templates/Page.ss",
75
			$this->loader->findTemplate('Page', ['$default'])
76
		);
77
78
		$this->assertEquals(
79
			"$this->base/myproject/templates/Layout/Page.ss",
80
			$this->loader->findTemplate(['type' => 'Layout', 'Page'], ['$default'])
81
		);
82
83
		$this->removeTestTemplates($templates);
84
	}
85
86
	/**
87
	 * Test that 'main' template is found in theme and 'Layout' is found in module
88
	 */
89
	public function testFindTemplatesMainThemeLayoutModule() {
90
		$this->assertEquals(
91
			"$this->base/themes/theme/templates/CustomThemePage.ss",
92
			$this->loader->findTemplate('CustomThemePage', ['theme', '$default'])
93
		);
94
95
		$this->assertEquals(
96
			"$this->base/module/templates/Layout/CustomThemePage.ss",
97
			$this->loader->findTemplate(['type' => 'Layout', 'CustomThemePage'], ['theme', '$default'])
98
		);
99
	}
100
101
	protected function createTestTemplates($templates) {
102
		foreach ($templates as $template) {
103
			file_put_contents($template, '');
104
		}
105
	}
106
107
	protected function removeTestTemplates($templates) {
108
		foreach ($templates as $template) {
109
			unlink($template);
110
		}
111
	}
112
113
}
114