Completed
Pull Request — master (#6496)
by Robbie
10:52
created

testRemoveMultipleComponents()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 16
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 testRemoveComponents()
96
    {
97
        $config = GridFieldConfig::create()
98
            ->addComponent($c1 = new MyComponent())
99
            ->addComponent($c2 = new MyComponent())
100
            ->addComponent($c3 = new MyOtherComponent())
101
            ->addComponent($c4 = new MyOtherComponent());
102
103
        $this->assertEquals(
104
            4,
105
            $config->getComponents()->count()
106
        );
107
108
        $config->removeComponent($c1);
109
        $this->assertEquals(
110
            3,
111
            $config->getComponents()->count()
112
        );
113
114
        $config->removeComponentsByType(MyComponent::class);
115
        $this->assertEquals(
116
            2,
117
            $config->getComponents()->count()
118
        );
119
120
        $config->removeComponentsByType(MyOtherComponent::class);
121
        $this->assertEquals(
122
            0,
123
            $config->getComponents()->count()
124
        );
125
    }
126
127
    /**
128
     * Test that components can be removed with an array of class names or interfaces
129
     */
130
    public function testRemoveMultipleComponents()
131
    {
132
        $config = GridFieldConfig::create()
133
            ->addComponent(new MyComponent)
134
            ->addComponent(new MyComponent)
135
            ->addComponent(new MyOtherComponent);
136
137
        $config->removeComponentsByType(
138
            [
139
                MyComponent::class,
140
                MyOtherComponent::class
141
            ]
142
        );
143
144
        $this->assertSame(0, $config->getComponents()->count());
145
    }
146
}
147