1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* Class GlobalAutoLinkSettingsTest |
5
|
|
|
* Run tests to check the GlobalAutoLinkSettings Object and it's functionality |
6
|
|
|
* |
7
|
|
|
* @method void assertTrue(boolean $test, string $message) |
8
|
|
|
*/ |
9
|
|
|
class GlobalAutoLinkSettingsTest extends SapphireTest { |
10
|
|
|
|
11
|
|
|
public static $fixture_file = 'fixtures/AutomatedLinkTest.yml'; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* Test Max Links per page |
15
|
|
|
*/ |
16
|
|
|
public function testMaxLinksPerPage(){ |
17
|
|
|
$this->objFromFixture('AutomatedLink','link'); |
18
|
|
|
$this->objFromFixture('AutomatedLink','link2'); |
19
|
|
|
$this->objFromFixture('AutomatedLink','link3'); |
20
|
|
|
|
21
|
|
|
$settings = GlobalAutoLinkSettings::get()->first(); |
22
|
|
|
$settings->MaxLinksPerPage = 1; |
23
|
|
|
$settings->write(); |
24
|
|
|
|
25
|
|
|
$page = AutomatedLinkTest::createPage('<p>Checking if only 1 link is created in phrase, properties, default</p>'); |
26
|
|
|
$links = AutomatedLinkTest::getLinksFromPage($page); |
27
|
|
|
$this->assertTrue($links->length === 1, 'Was not suppose to find 1 link. Found '.$links->length); |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* Test that links are not created inside of exclude tags |
32
|
|
|
*/ |
33
|
|
|
public function testExcludeTags(){ |
34
|
|
|
$settings = GlobalAutoLinkSettings::get()->first(); |
35
|
|
|
$settings->MaxLinksPerPage = 0; |
36
|
|
|
$settings->write(); |
37
|
|
|
|
38
|
|
|
$page = AutomatedLinkTest::createPage( |
39
|
|
|
'<p>Checking if only 2 links is created in default & phrase</p><h3>not in properties</h3>' |
40
|
|
|
); |
41
|
|
|
$links = AutomatedLinkTest::getLinksFromPage($page); |
42
|
|
|
$this->assertTrue($links->length === 2, 'Was not suppose to find 2 links. Found '.$links->length); |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
/** |
46
|
|
|
* Test that links are included in all the specified fields |
47
|
|
|
*/ |
48
|
|
|
public function testIncludeIn(){ |
49
|
|
|
$settings = GlobalAutoLinkSettings::get()->first(); |
50
|
|
|
$settings->IncludeIn = 'Content, Introduction'; |
51
|
|
|
$settings->write(); |
52
|
|
|
|
53
|
|
|
$page = TestPage::create(array( |
54
|
|
|
'Introduction' => '<div id="introduction">2 links should be created here. properties, phrase</div>', |
55
|
|
|
'Content' => '<div id="content">1 link should be created here. phrase</div>', |
56
|
|
|
)); |
57
|
|
|
|
58
|
|
|
$controller = Page_Controller::create($page); |
59
|
|
|
$controller->invokeWithExtensions('addAutomatedLinks'); |
60
|
|
|
|
61
|
|
|
$rendered = $controller->Introduction.$controller->Content; |
62
|
|
|
$dom = AutomatedLink::constructDOMDocument($rendered); |
63
|
|
|
|
64
|
|
|
// Introduction |
65
|
|
|
$xpath = new DOMXPath($dom); |
66
|
|
|
$intro = $xpath->query("//*[@id='introduction']")->item(0); |
67
|
|
|
$this->assertTrue( |
68
|
|
|
$intro->getElementsByTagName('a')->length === 2, |
69
|
|
|
'Was suppose to find 1 link in Introduction' |
70
|
|
|
); |
71
|
|
|
|
72
|
|
|
// Content |
73
|
|
|
$xpath = new DOMXPath($dom); |
74
|
|
|
$intro = $xpath->query("//*[@id='content']")->item(0); |
75
|
|
|
$this->assertTrue( |
76
|
|
|
$intro->getElementsByTagName('a')->length === 1, |
77
|
|
|
'Was suppose to find 1 link in Introduction' |
78
|
|
|
); |
79
|
|
|
} |
80
|
|
|
} |
81
|
|
|
|
82
|
|
|
/** |
83
|
|
|
* Simple test page to test settings |
84
|
|
|
*/ |
85
|
|
|
class TestPage extends Page implements TestOnly{ |
|
|
|
|
86
|
|
|
private static $db = array( |
|
|
|
|
87
|
|
|
'Introduction' => 'HTMLText' |
88
|
|
|
); |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
|
92
|
|
|
|
Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.