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) { |
||
0 ignored issues
–
show
|
|||
42 | $this->assertEquals(array_get($array, 'data.type'), $type); |
||
0 ignored issues
–
show
It seems like
assertEquals() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the
Loading history...
|
|||
43 | } |
||
44 | |||
45 | if ($id) { |
||
46 | $this->assertEquals(array_get($array, 'data.id'), $id); |
||
0 ignored issues
–
show
It seems like
assertEquals() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the
Loading history...
|
|||
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')); |
||
0 ignored issues
–
show
It seems like
assertInternalType() must be provided by classes using this trait. How about adding it as abstract method to this trait?
This check looks for methods that are used by a trait but not required by it. To illustrate, let’s look at the following code example trait Idable {
public function equalIds(Idable $other) {
return $this->getId() === $other->getId();
}
}
The trait Adding the
Loading history...
|
|||
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) |
|
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) |
|
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 |
In PHP, under loose comparison (like
==
, or!=
, orswitch
conditions), values of different types might be equal.For
string
values, the empty string''
is a special case, in particular the following results might be unexpected: