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.'); |
||
0 ignored issues
–
show
|
|||
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
The expression
$type of type null|string is loosely compared to true ; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.
In PHP, under loose comparison (like For '' == false // true
'' == null // true
'ab' == false // false
'ab' == null // false
// It is often better to use strict comparison
'' === false // false
'' === null // false
Loading history...
|
|||
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) |
|
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'); |
||
0 ignored issues
–
show
It seems like
assertArrayHasKey() 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...
|
|||
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'); |
||
0 ignored issues
–
show
It seems like
assertCount() 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...
|
|||
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'); |
||
0 ignored issues
–
show
It seems like
assertArrayHasKey() 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...
|
|||
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'); |
||
0 ignored issues
–
show
It seems like
assertCount() 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...
|
|||
103 | } |
||
104 | } |
||
105 | } |
||
106 |
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
The trait
Idable
provides a methodequalsId
that in turn relies on the methodgetId()
. If this method does not exist on a class mixing in this trait, the method will fail.Adding the
getId()
as an abstract method to the trait will make sure it is available.