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
|
|||
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. ![]() |
|||
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 |
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.