Passed
Pull Request — master (#429)
by
unknown
02:37
created

testOrderingByWrongElementalArea()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace DNADesign\Elemental\Tests\GraphQL;
4
5
use DNADesign\Elemental\GraphQL\AddElementToAreaMutation;
6
use DNADesign\Elemental\Models\ElementalArea;
7
use DNADesign\Elemental\Tests\Src\TestElement;
8
use GraphQL\Type\Definition\ResolveInfo;
0 ignored issues
show
Bug introduced by
The type GraphQL\Type\Definition\ResolveInfo was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
use InvalidArgumentException;
10
use SilverStripe\Dev\SapphireTest;
11
use SilverStripe\Security\Security;
12
13
class AddElementToAreaMutationTest extends SapphireTest
14
{
15
    protected static $fixture_file = 'AddElementToAreaMutationTest.yml';
16
17
    protected static $extra_dataobjects = [
18
        TestElement::class,
19
    ];
20
21
    public function testAddingBlocksInOrder()
22
    {
23
        $className = TestElement::class;
24
25
        $this->runMutation($className, 1);
26
        $this->assertIdsInOrder([1], 'The first element is added');
27
28
        $this->runMutation($className, 1, 1);
29
        $this->assertIdsInOrder([1, 2], 'The second element is added after the first');
30
31
        $this->runMutation($className, 1, 1);
32
        $this->assertIdsInOrder([1, 3, 2], 'The third element is added after the first');
33
34
        $this->runMutation($className, 1);
35
        $this->assertIdsInOrder([1, 3, 2, 4], 'The fourth element is added last, when no after ID parameter is given');
36
37
        $this->runMutation($className, 1, 0);
38
        $this->assertIdsInOrder([5, 1, 3, 2, 4], 'The fifth element is added first, after ID 0');
39
    }
40
41
    /**
42
     * @expectException InvalidArgumentException
43
     */
44
    public function testBadElementalArea()
45
    {
46
        $this->runMutation(TestElement::class, 2);
47
    }
48
49
    /**
50
     * @expectException InvalidArgumentException
51
     */
52
    public function testOrderingByWrongElementalArea()
53
    {
54
        $firstArea = ElementalArea::get()->first();
55
        $elementInFirstArea = TestElement::create();
56
        $firstArea->Elements()->add($elementInFirstArea);
57
58
        ElementalArea::create()->write();
59
        $this->expectException(InvalidArgumentException::class);
60
        $this->runMutation(TestElement::class, 2, $elementInFirstArea->ID);
61
    }
62
63
    protected function assertIdsInOrder($ids, $message = null)
64
    {
65
        $actualIDs = TestElement::get()->sort('Sort')->map()->keys();
66
67
        $this->assertSame($ids, $actualIDs, $message);
68
    }
69
70
    protected function runMutation($className, $elementalAreaID, $afterElementId = null)
71
    {
72
        $mutation = new AddElementToAreaMutation();
73
        $context = ['currentUser' => Security::getCurrentUser()];
74
        $resolveInfo = new ResolveInfo([]);
75
76
        $args = [
77
            'ClassName' => $className,
78
            'ElementalAreaID' => $elementalAreaID,
79
        ];
80
81
        if (!is_null($afterElementId)) {
82
            $args['AfterElementID'] = $afterElementId;
83
        }
84
85
        $mutation->resolve(null, $args, $context, $resolveInfo);
86
    }
87
}
88