Completed
Push — master ( 1655ec...f71b23 )
by Robbie
20s
created

testColumnsGridFieldHasUniqueClassName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\CKANRegistry\Tests\Page;
4
5
use SilverStripe\CKANRegistry\Page\CKANRegistryPage;
6
use SilverStripe\CKANRegistry\Service\ResourceFieldPopulatorInterface;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Dev\SapphireTest;
9
use SilverStripe\Forms\GridField\GridField;
10
use Symbiote\GridFieldExtensions\GridFieldEditableColumns;
11
12
class CKANRegistryPageTest extends SapphireTest
13
{
14
    protected static $fixture_file = 'CKANRegistryPageTest.yml';
15
16
    protected function setUp()
17
    {
18
        // Mock the field populator, in case an action we perform in a unit test tries to contact the mock API.
19
        // Done before parent::setUp() so write hooks don't run during fixture population.
20
        $populator = $this->createMock(ResourceFieldPopulatorInterface::class);
21
        Injector::inst()->registerService($populator, ResourceFieldPopulatorInterface::class);
22
23
        parent::setUp();
24
    }
25
26
    public function testHasItemsPerPageSetting()
27
    {
28
        /** @var CKANRegistryPage $page */
29
        $page = $this->objFromFixture(CKANRegistryPage::class, 'animal_centers');
30
31
        $this->assertNotNull($page->getSettingsFields()->fieldByName('Root.Settings.ItemsPerPage'));
32
    }
33
34
    public function testColumnsGridFieldHasUniqueClassName()
35
    {
36
        /** @var CKANRegistryPage $page */
37
        $page = $this->objFromFixture(CKANRegistryPage::class, 'animal_centers');
38
39
        $field = $page->getCMSFields()->fieldByName('Root.Data.DataColumns');
40
        $this->assertInstanceOf(GridField::class, $field, 'Columns GridField was not found in fields');
41
        $this->assertTrue($field->hasClass('ckan-columns'), 'Columns GridField should have unique class');
42
    }
43
44
    public function testNoDataColumnsGridFieldGetsAddedWhenNoResourceIsDefined()
45
    {
46
        $page = new CKANRegistryPage();
47
        $page->write();
48
49
        $field = $page->getCMSFields()->fieldByName('Root.Data.DataColumns');
50
        $this->assertNull($field, 'Columns should not be added until a resource is defined');
51
    }
52
53
    public function testHasEditableColumnsComponent()
54
    {
55
        /** @var CKANRegistryPage $page */
56
        $page = $this->objFromFixture(CKANRegistryPage::class, 'animal_centers');
57
58
        /** @var GridField $field */
59
        $field = $page->getCMSFields()->fieldByName('Root.Data.DataColumns');
60
        $this->assertInstanceOf(GridField::class, $field, 'Columns GridField was not found in fields');
61
        $this->assertNotNull($field->getConfig()->getComponentByType(GridFieldEditableColumns::class));
62
    }
63
64
    public function testEditableColumnsHaveCorrectDisplayFields()
65
    {
66
        /** @var CKANRegistryPage $page */
67
        $page = $this->objFromFixture(CKANRegistryPage::class, 'animal_centers');
68
69
        /** @var GridField $field */
70
        $field = $page->getCMSFields()->fieldByName('Root.Data.DataColumns');
71
        $this->assertInstanceOf(GridField::class, $field, 'Columns GridField was not found in fields');
72
73
        /** @var GridFieldEditableColumns $component */
74
        $component = $field->getConfig()->getComponentByType(GridFieldEditableColumns::class);
75
        $this->assertNotNull($component, 'Component was not found in the GridField');
76
77
        $displayFields = $component->getDisplayFields($field);
78
        $this->assertEquals([
79
            'ShowInSummaryView' => _t('SilverStripe\\CKANRegistry\\Page\\CKANRegistryPage.IN_RESULTS', 'In Results'),
80
            'ShowInDetailView' => _t('SilverStripe\\CKANRegistry\\Page\\CKANRegistryPage.IN_DETAIL', 'In Detail'),
81
        ], $displayFields, 'Correct display fields were not found');
82
    }
83
}
84