ResourceTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
eloc 25
c 4
b 0
f 0
dl 0
loc 53
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 6 1
A testFieldsAndFiltersAreDeletedRatherThanJustUnassociated() 0 14 1
A testFieldsAndFiltersAreRemovedAfterChangingIdentifier() 0 24 1
1
<?php
2
3
namespace SilverStripe\CKANRegistry\Tests\Model;
4
5
use SilverStripe\CKANRegistry\Model\Resource;
6
use SilverStripe\CKANRegistry\Model\ResourceField;
7
use SilverStripe\CKANRegistry\Model\ResourceFilter;
8
use SilverStripe\CKANRegistry\Service\ResourcePopulator;
9
use SilverStripe\CKANRegistry\Service\ResourcePopulatorInterface;
10
use SilverStripe\Core\Injector\Injector;
11
use SilverStripe\Dev\SapphireTest;
12
13
class ResourceTest extends SapphireTest
14
{
15
    protected static $fixture_file = 'ResourceTest.yml';
16
17
    protected function setUp()
18
    {
19
        $populator = $this->createMock(ResourcePopulator::class);
20
        Injector::inst()->registerService($populator, ResourcePopulatorInterface::class);
21
22
        parent::setUp();
23
    }
24
25
    public function testFieldsAndFiltersAreRemovedAfterChangingIdentifier()
26
    {
27
        /** @var Resource $resource */
28
        $resource = $this->objFromFixture(Resource::class, 'teachers');
29
30
        $this->assertGreaterThan(0, $resource->Fields()->count(), 'Fixtures should load relationships');
31
        $this->assertGreaterThan(0, $resource->Filters()->count(), 'Fixtures should load relationships');
32
33
        // Change name, relationships should be retained
34
        $resource->Name = 'Primary Teachers';
35
        $resource->write();
36
37
        $this->assertGreaterThan(0, $resource->Fields()->count(), 'Changing name should not affect relations');
38
        $this->assertGreaterThan(0, $resource->Filters()->count(), 'Changing name should not affect relations');
39
40
        // Change identifier, relationships should be removed
41
        $resource->Identifier = 'something-different';
42
        $resource->write();
43
44
        $this->assertCount(0, $resource->Fields(), 'Changing identifier should clear fields');
45
        $this->assertCount(
46
            1,
47
            $resource->Filters(),
48
            'Changing identifier should clear filters (note that a default filter is added again as well)'
49
        );
50
    }
51
52
    public function testFieldsAndFiltersAreDeletedRatherThanJustUnassociated()
53
    {
54
        /** @var Resource $resource */
55
        $resource = $this->objFromFixture(Resource::class, 'teachers');
56
57
        $this->assertGreaterThan(0, $resource->Fields()->count(), 'Fixtures should load relationships');
58
        $this->assertGreaterThan(0, $resource->Filters()->count(), 'Fixtures should load relationships');
59
60
        // Change identifier, relationships should be deleted from the database
61
        $resource->Identifier = 'something-different';
62
        $resource->write();
63
64
        $this->assertCount(0, ResourceField::get(), 'Resource fields should be deleted');
65
        $this->assertCount(1, ResourceFilter::get(), 'Resource filters should be deleted (one gets added)');
66
    }
67
}
68