ReadFileUsageQueryCreatorTest   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 32
c 2
b 0
f 0
dl 0
loc 84
rs 10
wmc 9

7 Methods

Rating   Name   Duplication   Size   Complexity  
A testUsageCount() 0 4 1
A setUp() 0 8 1
A testUsageCountForNonExistentFile() 0 4 1
A tearDown() 0 7 1
A fileUsageDataProvider() 0 8 1
A assertUsageCount() 0 11 2
A getResultsForSearch() 0 5 2
1
<?php
2
3
namespace SilverStripe\AssetAdmin\Tests\GraphQL;
4
5
use SilverStripe\AssetAdmin\GraphQL\ReadFileQueryCreator;
6
use SilverStripe\AssetAdmin\GraphQL\ReadFileUsageQueryCreator;
7
use SilverStripe\AssetAdmin\Tests\Controller\AssetAdminTest\FileExtension;
8
use SilverStripe\AssetAdmin\Tests\Controller\AssetAdminTest\FolderExtension;
9
use SilverStripe\Assets\File;
10
use SilverStripe\Assets\Folder;
11
use SilverStripe\Dev\SapphireTest;
12
use GraphQL\Type\Definition\ResolveInfo;
13
use SilverStripe\GraphQL\Manager;
14
use Silverstripe\Assets\Dev\TestAssetStore;
15
16
/**
17
 * Most of the search functionality is covered in {@link FileFilterInputTypeCreatorTest}
18
 */
19
class ReadFileUsageQueryCreatorTest extends SapphireTest
20
{
21
22
    protected $usesDatabase = true;
23
24
    protected static $fixture_file = '../fixtures.yml';
25
26
    protected function setUp() : void
27
    {
28
        parent::setUp();
29
30
        TestAssetStore::activate('AssetAdminTest');
31
32
        File::add_extension(FileExtension::class);
33
        Folder::add_extension(FolderExtension::class);
34
    }
35
36
    protected function tearDown() : void
37
    {
38
        File::remove_extension(FileExtension::class);
39
        Folder::remove_extension(FolderExtension::class);
40
41
        TestAssetStore::reset();
42
        parent::tearDown();
43
    }
44
45
    public function fileUsageDataProvider()
46
    {
47
        return [
48
            [File::class, 'rootfile', 2, 'rootfile file is used twice'],
49
            [File::class, 'file2', 0, 'file2 is not used'],
50
            [File::class, 'disallowCanView', false, 'disallowCanView should provide file usage data'],
51
            [Folder::class, 'folder1', 2, 'folder1 contains files used 2 times'],
52
            [Folder::class, 'folder1.1', 0, 'folder1.1 does not contained any used files'],
53
        ];
54
    }
55
56
    /**
57
     * @dataProvider fileUsageDataProvider
58
     * @param string $class
59
     * @param string $fixture
60
     * @param int|false $expectedCount
61
     * @param $message
62
     */
63
    public function testUsageCount(string $class, string $fixture, $expectedCount, $message)
64
    {
65
        $id = $this->idFromFixture($class, $fixture);
66
        $this->assertUsageCount($id, $expectedCount, $message);
67
    }
68
69
    public function testUsageCountForNonExistentFile()
70
    {
71
        $this->expectException('InvalidArgumentException');
72
        $this->assertUsageCount(999, false, 'File 999 should throw an exception because it does not exists.');
73
    }
74
75
    /**
76
     * @param array $args
77
     * @param array $context
78
     * @return array
79
     */
80
    protected function getResultsForSearch($args, $context = null)
81
    {
82
        $context = $context ? $context : ['currentUser' => null];
83
        $creator = new ReadFileUsageQueryCreator(new Manager());
84
        return $creator->resolve(null, $args, $context, new ResolveInfo([]));
85
    }
86
87
    /**
88
     * Assert the file usage of the provided file ID.
89
     * @param string $fixture
90
     * @param int|false $expectedCount $expectedCount or false, if no result should be returned
91
     */
92
    private function assertUsageCount($id, $expectedCount, $message)
93
    {
94
        $actual = $this->getResultsForSearch(['IDs' => [$id]]);
95
        if ($expectedCount === false) {
96
            $this->assertEmpty($actual, $message);
97
        } else {
98
            $expected = [[
99
                'id' => $id,
100
                'inUseCount' => $expectedCount
101
            ]];
102
            $this->assertEquals($expected, $actual, $message);
103
        }
104
    }
105
}
106