FolderTypeCreatorTest::getContext()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\AssetAdmin\Tests\GraphQL;
4
5
use GraphQL\Type\Definition\ResolveInfo;
6
use SilverStripe\AssetAdmin\GraphQL\FolderTypeCreator;
7
use SilverStripe\Assets\File;
8
use SilverStripe\Assets\Folder;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverStripe\GraphQL\Manager;
11
12
/**
13
 * Most of the search functionality is covered in {@link FileFilterInputTypeCreatorTest}
14
 */
15
class FolderTypeCreatorTest extends SapphireTest
16
{
17
    protected $usesTransactions = false;
18
19
    protected $usesDatabase = true;
20
21
    public function testItSortsChildrenOnTypeByDefault()
22
    {
23
        $rootFolder = Folder::singleton();
24
        $file = File::create(['Name' => 'aaa file']);
25
        $file->write();
26
        $folder = Folder::create(['Name' => 'bbb folder']);
27
        $folder->write();
28
        $list = $this->resolveChildrenConnection(
29
            $rootFolder,
30
            []
31
        );
32
        $this->assertEquals(
33
            [
34
                $folder->Name,
35
                $file->Name,
36
            ],
37
            $list['edges']->column('Name')
38
        );
39
    }
40
41
    public function testItDoesNotFilterByParentIdWithRecursiveFlag()
42
    {
43
        $rootFolder = Folder::singleton();
44
45
        $folder = Folder::create(['Name' => 'folder']);
46
        $folder->write();
47
48
        $nestedFile = File::create([
49
            'Name' => 'myNestedFile',
50
            'ParentID' => $folder->ID,
51
        ]);
52
        $nestedFile->write();
53
54
        $rootFile = File::create([
55
            'Name' => 'myRootFile',
56
            'ParentID' => 0,
57
        ]);
58
        $rootFile->write();
59
60
        $listWithoutRecursive = $this->resolveChildrenConnection(
61
            $rootFolder,
62
            ['filter' => [
63
                'recursive' => false
64
            ]]
65
        );
66
        $this->assertEquals(
67
            [
68
                $folder->Name,
69
                $rootFile->Name,
70
            ],
71
            $listWithoutRecursive['edges']->column('Name')
72
        );
73
74
        $listWithRecursive = $this->resolveChildrenConnection(
75
            $rootFolder,
76
            ['filter' => [
77
                'recursive' => true
78
            ]]
79
        );
80
        $this->assertEquals(
81
            [
82
                $folder->Name,
83
                $nestedFile->Name,
84
                $rootFile->Name,
85
            ],
86
            $listWithRecursive['edges']->column('Name')
87
        );
88
89
        // Test with partial tree search
90
        $listWithPartialTreeRecursive = $this->resolveChildrenConnection(
91
            $folder,
92
            ['filter' => [
93
                'recursive' => true
94
            ]]
95
        );
96
        $this->assertEquals(
97
            [
98
                $nestedFile->Name,
99
            ],
100
            $listWithPartialTreeRecursive['edges']->column('Name')
101
        );
102
    }
103
104
    public function testItShowsParents()
105
    {
106
        $folder1 = Folder::create(['Name' => 'folder1', 'ParentID' => 0]);
107
        $folder1->write();
108
109
        $folder1_1 = Folder::create(['Name' => 'folder1_1', 'ParentID' => $folder1->ID]);
110
        $folder1_1->write();
111
112
        $folder1_1_1 = Folder::create(['Name' => 'folder1_1_1', 'ParentID' => $folder1_1->ID]);
113
        $folder1_1_1->write();
114
115
        $folder2 = Folder::create(['Name' => 'folder2', 'ParentID' => 0]);
116
        $folder2->write();
117
118
        $managerMock = $this->getManagerMock();
119
        $creator = new FolderTypeCreator($managerMock->reveal());
120
        $parents = $creator->resolveParentsField(
121
            $folder1_1_1,
122
            [],
123
            $this->getContext(),
124
            new ResolveInfo([])
125
        );
126
        $this->assertEquals(
127
            [
128
                $folder1->Name,
129
                $folder1_1->Name
130
            ],
131
            array_map(function ($folder) {
132
                return $folder->Name;
133
            }, $parents)
134
        );
135
    }
136
137
    protected function getManagerMock()
138
    {
139
        $mock = $this->prophesize(Manager::class);
140
        return $mock;
141
    }
142
143
    protected function getContext()
144
    {
145
        return [
146
            'currentUser' => null
147
        ];
148
    }
149
150
    protected function resolveChildrenConnection($object, $args, $context = null)
151
    {
152
        $context = $context ? $context : $this->getContext();
153
154
        $managerMock = $this->getManagerMock();
155
        $creator = new FolderTypeCreator($managerMock->reveal());
156
        return $creator->resolveChildrenConnection(
157
            $object,
158
            $args,
159
            $context,
160
            new ResolveInfo([]),
161
            $creator->getChildrenConnection()
162
        );
163
    }
164
}
165