Passed
Push — 4 ( e0e8ca...dd8282 )
by Damian
09:29
created

GridFieldConfigTest::testAddComponentsByArray()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Forms\Tests\GridField;
4
5
use SilverStripe\Forms\Tests\GridField\GridFieldConfigTest\MyOtherComponent;
6
use SilverStripe\Forms\Tests\GridField\GridFieldConfigTest\MyComponent;
7
use SilverStripe\ORM\ArrayList;
8
use SilverStripe\Dev\SapphireTest;
9
use SilverStripe\Forms\GridField\GridFieldConfig;
10
use SilverStripe\Forms\GridField\GridField_URLHandler;
11
12
class GridFieldConfigTest extends SapphireTest
13
{
14
15
    public function testGetComponents()
16
    {
17
        $config = GridFieldConfig::create();
18
        $this->assertInstanceOf(ArrayList::class, $config->getComponents());
19
        $this->assertEquals($config->getComponents()->count(), 0);
20
21
        $config
22
            ->addComponent($c1 = new MyComponent())
23
            ->addComponent($c2 = new MyOtherComponent())
24
            ->addComponent($c3 = new MyOtherComponent());
25
26
        $this->assertEquals(
27
            new ArrayList(array($c1, $c2, $c3)),
28
            $config->getComponents()
29
        );
30
    }
31
32
    public function testGetComponentsByType()
33
    {
34
        $config = GridFieldConfig::create()
35
            ->addComponent($c1 = new MyComponent())
36
            ->addComponent($c2 = new MyOtherComponent())
37
            ->addComponent($c3 = new MyOtherComponent());
38
39
        $this->assertEquals(
40
            new ArrayList(array($c1)),
41
            $config->getComponentsByType(MyComponent::class)
42
        );
43
        $this->assertEquals(
44
            new ArrayList(array($c2, $c3)),
45
            $config->getComponentsByType(MyOtherComponent::class)
46
        );
47
        $this->assertEquals(
48
            new ArrayList(array($c1, $c2, $c3)),
49
            $config->getComponentsByType(GridField_URLHandler::class)
50
        );
51
        $this->assertEquals(
52
            new ArrayList(),
53
            $config->getComponentsByType('GridFieldConfigTest_UnknownComponent')
54
        );
55
    }
56
57
    public function testGetComponentByType()
58
    {
59
        $config = GridFieldConfig::create()
60
            ->addComponent($c1 = new MyComponent())
61
            ->addComponent($c2 = new MyOtherComponent())
62
            ->addComponent($c3 = new MyOtherComponent());
63
64
        $this->assertEquals(
65
            $c1,
66
            $config->getComponentByType(MyComponent::class)
67
        );
68
        $this->assertEquals(
69
            $c2,
70
            $config->getComponentByType(MyOtherComponent::class)
71
        );
72
        $this->assertNull(
73
            $config->getComponentByType('GridFieldConfigTest_UnknownComponent')
74
        );
75
    }
76
77
    public function testAddComponents()
78
    {
79
        $config = GridFieldConfig::create()
80
            ->addComponents(
81
                $c1 = new MyComponent(),
82
                $c2 = new MyOtherComponent()
83
            );
84
85
        $this->assertEquals(
86
            $c1,
87
            $config->getComponentByType(MyComponent::class)
88
        );
89
        $this->assertEquals(
90
            $c2,
91
            $config->getComponentByType(MyOtherComponent::class)
92
        );
93
    }
94
95
    public function testAddComponentsByArray()
96
    {
97
        $config = GridFieldConfig::create()
98
            ->addComponents([
99
                $c1 = new MyComponent(),
100
            ]);
101
102
        $this->assertEquals(
103
            $c1,
104
            $config->getComponentByType(MyComponent::class)
105
        );
106
    }
107
108
    public function testRemoveComponents()
109
    {
110
        $config = GridFieldConfig::create()
111
            ->addComponent($c1 = new MyComponent())
112
            ->addComponent($c2 = new MyComponent())
113
            ->addComponent($c3 = new MyOtherComponent())
114
            ->addComponent($c4 = new MyOtherComponent());
115
116
        $this->assertEquals(
117
            4,
118
            $config->getComponents()->count()
119
        );
120
121
        $config->removeComponent($c1);
122
        $this->assertEquals(
123
            3,
124
            $config->getComponents()->count()
125
        );
126
127
        $config->removeComponentsByType(MyComponent::class);
128
        $this->assertEquals(
129
            2,
130
            $config->getComponents()->count()
131
        );
132
133
        $config->removeComponentsByType(MyOtherComponent::class);
134
        $this->assertEquals(
135
            0,
136
            $config->getComponents()->count()
137
        );
138
    }
139
140
    /**
141
     * Test that components can be removed with an array of class names or interfaces
142
     */
143
    public function testRemoveMultipleComponents()
144
    {
145
        $config = GridFieldConfig::create()
146
            ->addComponent(new MyComponent)
147
            ->addComponent(new MyComponent)
148
            ->addComponent(new MyOtherComponent);
149
150
        $config->removeComponentsByType(
151
            [
152
                MyComponent::class,
153
                MyOtherComponent::class
154
            ]
155
        );
156
157
        $this->assertSame(0, $config->getComponents()->count());
158
    }
159
}
160