Completed
Push — 1.0.0-alpha ( c04b09...2436c2 )
by Alex
11s
created

src/Testing/JsonApiAssertions.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Huntie\JsonApi\Testing;
4
5
/**
6
 * Extend TestCase with additional JSON API related assertions.
7
 */
8
trait JsonApiAssertions
9
{
10
    /**
11
     * Assert that all given keys are set in an associative array. Nested
12
     * members may be specified using dot notation.
13
     *
14
     * @param array $keys
15
     * @param array $array
16
     *
17
     * @throws PHPUnit_Framework_AssertionFailedError
18
     */
19
    public function assertArrayHasAll(array $keys, array $array)
20
    {
21
        foreach ($keys as $key) {
22
            if (!array_has($array, $key)) {
23
                $this->fail('Failed asserting that key "' . $key . '" exists in input array.');
24
            }
25
        }
26
    }
27
28
    /**
29
     * Assert that an array contains a valid JSON API resource identifier.
30
     *
31
     * @param array       $array
32
     * @param string|null $type
33
     * @param mixed       $id
34
     *
35
     * @throws PHPUnit_Framework_AssertionFailedError
36
     */
37
    public function assertJsonApiResourceIdentifier(array $array, string $type = null, $id = null)
38
    {
39
        $this->assertArrayHasAll(['data.type', 'data.id'], $array);
40
41
        if ($type) {
42
            $this->assertEquals(array_get($array, 'data.type'), $type);
43
        }
44
45
        if ($id) {
46
            $this->assertEquals(array_get($array, 'data.id'), $id);
47
        }
48
    }
49
50
    /**
51
     * Assert that an array contains a valid JSON API resource object.
52
     *
53
     * @param array       $array
54
     * @param string|null $type
55
     * @param mixed       $id
56
     *
57
     * @throws PHPUnit_Framework_AssertionFailedError
58
     */
59
    public function assertJsonApiResourceObject(array $array, string $type = null, $id = null)
60
    {
61
        $this->assertJsonApiResourceIdentifier($array, $type, $id);
62
        $this->assertInternalType('array', array_get($array, 'data.attributes'));
63
    }
64
65
    /**
66
     * Assert that an array contains a valid JSON API resource identifier
67
     * object collection.
68
     *
69
     * @param array $array
70
     * @param int   $count
71
     *
72
     * @throws PHPUnit_Framework_AssertionFailedError
73
     */
74 View Code Duplication
    public function assertJsonApiIdentifierCollection(array $array, $count = null)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
75
    {
76
        $this->assertArrayHasKey('data', $array, 'No data key for collection');
77
78
        foreach ($array['data'] as $identifier) {
79
            $this->assertArrayHasAll(['type', 'id'], (array) $identifier);
80
        }
81
82
        $this->assertCount($count, $array['data'], 'Incorrect object count returned in collection');
83
    }
84
85
    /**
86
     * Assert that an array contains a valid JSON API resource object collection.
87
     *
88
     * @param array $array
89
     * @param int   $count
90
     *
91
     * @throws PHPUnit_Framework_AssertionFailedError
92
     */
93 View Code Duplication
    public function assertJsonApiObjectCollection(array $array, $count = null)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
94
    {
95
        $this->assertArrayHasKey('data', $array, 'No data key for collection');
96
97
        foreach ($array['data'] as $object) {
98
            $this->assertArrayHasAll(['type', 'id', 'attributes'], (array) $object);
99
        }
100
101
        if (!is_null($count)) {
102
            $this->assertCount($count, $array['data'], 'Incorrect object count returned in collection');
103
        }
104
    }
105
}
106