Passed
Push — hans/code-cleanup ( ca2456...0eaecc )
by Simon
05:29
created

DataObjectExtensionTest::testGetViewStatus()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 38
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 15
Bugs 1 Features 0
Metric Value
eloc 28
c 15
b 1
f 0
dl 0
loc 38
rs 9.472
cc 2
nc 2
nop 0
1
<?php
2
3
namespace Firesphere\SolrSearch\Tests;
4
5
use Firesphere\SolrSearch\Extensions\DataObjectExtension;
6
use Firesphere\SolrSearch\Models\DirtyClass;
7
use Firesphere\SolrSearch\Services\SolrCoreService;
8
use Firesphere\SolrSearch\Tasks\SolrConfigureTask;
9
use Page;
10
use Psr\Log\NullLogger;
11
use SilverStripe\Control\NullHTTPRequest;
12
use SilverStripe\Dev\SapphireTest;
13
use SilverStripe\ORM\ArrayList;
14
use SilverStripe\Security\DefaultAdminService;
15
16
class DataObjectExtensionTest extends SapphireTest
17
{
18
    public function testGetViewStatus()
19
    {
20
        $page = new Page();
21
        $extension = new DataObjectExtension();
22
        $extension->setOwner($page);
23
24
        $this->assertEquals(['1-null'], $extension->getViewStatus());
25
        $page->ShowInSearch = false;
26
        $this->assertEmpty($extension->getViewStatus());
27
28
        $member = (new DefaultAdminService())->findOrCreateDefaultAdmin();
29
        $groups = $member->Groups();
30
        $group = $groups->first();
31
        $page->CanViewType = 'OnlyTheseUsers';
32
        $page->ShowInSearch = true;
33
        foreach ($groups as $group) {
34
            $page->ViewerGroups()->add($group);
35
        }
36
        $page->write();
37
        $extension->setOwner($page);
38
        DataObjectExtension::$canViewClasses = [];
39
        $this->assertContains('1-' . $group->Members()->first()->ID, $extension->getViewStatus());
40
        $page->delete();
41
42
        $item = new TestObject();
43
        $extension = new DataObjectExtension();
44
        $extension->setOwner($item);
45
46
        $this->assertEquals(['1-null'], $extension->getViewStatus());
47
        // TestObject has a ShowInSearch :)
48
        $this->assertArrayHasKey($item->ClassName, DataObjectExtension::$canViewClasses);
49
        $item = new TestRelationObject();
50
        $extension = new DataObjectExtension();
51
        $extension->setOwner($item);
52
53
        $this->assertEquals(['1-null'], $extension->getViewStatus());
54
        // TestObject has a ShowInSearch :)
55
        $this->assertArrayHasKey($item->ClassName, DataObjectExtension::$canViewClasses);
56
    }
57
58
    public function testOnAfterDelete()
59
    {
60
        $page = new Page(['Title' => 'Test']);
61
        $id = $page->write();
62
        $extension = new DataObjectExtension();
63
        $extension->setOwner($page);
64
        $service = new SolrCoreService();
65
        $service->setInDebugMode(false);
66
        $service->updateItems(ArrayList::create([$page]), SolrCoreService::CREATE_TYPE);
67
68
        $extension->onAfterDelete();
69
        /** @var DirtyClass $dirty */
70
        $dirty = DirtyClass::get()->filter(['Class' => Page::class, 'Type' => DataObjectExtension::DELETE])->first();
71
        $ids = json_decode($dirty->IDs, 1);
72
        $this->assertArrayNotHasKey($id, array_flip($ids));
73
        $page->delete();
74
    }
75
76
    protected function setUp()
77
    {
78
        $task = new SolrConfigureTask();
79
        $task->setLogger(new NullLogger());
80
        $task->run(new NullHTTPRequest());
81
82
        return parent::setUp();
83
    }
84
}
85