Completed
Pull Request — master (#219)
by Robbie
06:25 queued 01:41
created

BaseElementTest::testSameTitle()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 21
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 14
nc 2
nop 0
dl 0
loc 21
rs 9.3142
c 0
b 0
f 0
1
<?php
2
3
namespace DNADesign\Elemental\Tests;
4
5
use function class_exists;
6
use DNADesign\Elemental\Controllers\ElementController;
7
use DNADesign\Elemental\Extensions\ElementalPageExtension;
8
use DNADesign\Elemental\Models\BaseElement;
9
use DNADesign\Elemental\Models\ElementalArea;
10
use DNADesign\Elemental\Models\ElementContent;
11
use DNADesign\Elemental\Tests\Src\TestElement;
12
use DNADesign\Elemental\Tests\Src\TestPage;
13
use Page;
0 ignored issues
show
Bug introduced by
The type Page was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use SilverStripe\Core\Config\Config;
15
use SilverStripe\Dev\FunctionalTest;
16
use SilverStripe\Forms\GridField\GridField;
17
use SilverStripe\VersionedAdmin\Forms\HistoryViewerField;
18
19
class BaseElementTest extends FunctionalTest
20
{
21
    protected static $fixture_file = 'ElementalPageExtensionTest.yml';
22
23
    protected static $required_extensions = [
24
        Page::class => [
25
            ElementalPageExtension::class,
26
        ]
27
    ];
28
29
    protected static $extra_dataobjects = [
30
        TestPage::class,
31
        TestElement::class
32
    ];
33
34
    public function testSimpleClassName()
35
    {
36
        $element = $this->objFromFixture(ElementContent::class, 'content1');
37
38
        $this->assertEquals('dnadesign__elemental__models__elementcontent', $element->getSimpleClassName());
39
    }
40
41
    /**
42
     * Test to ensure backwards compatibility with old Anchor IDs.
43
     */
44
    public function testDisablePrettyAnchor()
45
    {
46
        Config::modify()->set(BaseElement::class, 'disable_pretty_anchor_name', true);
47
48
        $area = ElementalArea::create();
49
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 1)));
50
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 2)));
51
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 3)));
52
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 4)));
53
        $area->write();
54
55
        $recordSet = $area->Elements()->toArray();
56
        $this->assertEquals('e'.$recordSet[0]->ID, $recordSet[0]->getAnchor());
57
        $this->assertEquals('e'.$recordSet[1]->ID, $recordSet[1]->getAnchor());
58
        $this->assertEquals('e'.$recordSet[2]->ID, $recordSet[2]->getAnchor());
59
        $this->assertEquals('e'.$recordSet[3]->ID, $recordSet[3]->getAnchor());
60
    }
61
62
    /**
63
     * Test the stop-clashing logic if two BaseElement classes have the same $Title.
64
     */
65
    public function testSameTitle()
66
    {
67
        Config::modify()->set(BaseElement::class, 'enable_title_in_template', true);
68
69
        $area = ElementalArea::create();
70
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 1)));
71
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 2)));
72
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 3)));
73
        $area->Elements()->add(BaseElement::create(array('Title' => 'Element 1', 'Sort' => 4)));
74
        $area->write();
75
76
        $recordSet = $area->Elements()->toArray();
77
        foreach ($recordSet as $record) {
78
            // NOTE: This puts it into the $_anchor protected variable
79
            //       and caches it.
80
            $record->getAnchor();
81
        }
82
        $this->assertEquals('element-1', $recordSet[0]->getAnchor());
83
        $this->assertEquals('element-1-2', $recordSet[1]->getAnchor());
84
        $this->assertEquals('element-1-3', $recordSet[2]->getAnchor());
85
        $this->assertEquals('element-1-4', $recordSet[3]->getAnchor());
86
    }
87
88
    public function testGetCmsFields()
89
    {
90
        $this->markTestIncomplete();
91
    }
92
93
    public function testGetController()
94
    {
95
        $element = $this->objFromFixture(ElementContent::class, 'content1');
96
        $controller = $element->getController();
97
98
        $this->assertInstanceOf(ElementController::class, $controller);
99
100
        $this->assertEquals($element, $controller->getElement(), 'Controller has element');
101
        $this->assertEquals('Test Content', $controller->Title, 'Controller fallbacks to element');
102
    }
103
104
    public function testLink()
105
    {
106
        $this->markTestIncomplete();
107
    }
108
109
    public function testGetIcon()
110
    {
111
        $element = new ElementContent;
112
        $this->assertContains('class="font-icon-block-content"', $element->getIcon());
113
114
        Config::modify()->set(ElementContent::class, 'icon', '');
115
        $this->assertEmpty($element->getIcon());
116
    }
117
118
    public function testGetHistoryViewerField()
119
    {
120
        if (!class_exists(HistoryViewerField::class)) {
121
            $this->markTestSkipped('This test requires silverstripe/versioned-admin to be installed.');
122
        }
123
        $this->logInWithPermission();
124
125
        /** @var ElementContent $element */
126
        $element = $this->objFromFixture(ElementContent::class, 'content1');
127
        
128
        $history = $element->getCMSFields()->dataFieldByName('ElementHistory');
129
        $this->assertInstanceOf(HistoryViewerField::class, $history);
130
    }
131
132
    public function testStyleVariants()
133
    {
134
        $styles = [
135
            'option1' => 'Option 1',
136
            'option2' => 'Option 2'
137
        ];
138
139
        Config::modify()->set(ElementContent::class, 'styles', $styles);
140
        $element = $this->objFromFixture(ElementContent::class, 'content1');
141
142
        $this->assertEquals($styles, $element->getCMSFields()->dataFieldByName('Style')->getSource());
143
144
        $element->Style = 'option1';
145
        $this->assertEquals('option1', $element->getStyleVariant());
146
147
        // set a outdated style, should not add.
148
        $element->Style = 'old';
149
        $this->assertEquals('', $element->getStyleVariant());
150
    }
151
}
152