Skip to content

Commit 36c820e

Browse files
committed
Add Helper methods parseResponseBody(), isValidResponseBody(), isValidRequestBody()
Helper::isValid() and Helper::parse() are now deprecated
1 parent b00818e commit 36c820e

File tree

2 files changed

+187
-4
lines changed

2 files changed

+187
-4
lines changed

src/Utils/Helper.php

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ final class Helper
3939
*
4040
* @throws ValidationException
4141
*/
42-
public static function parse($json_string)
42+
public static function parseResponseBody($json_string)
4343
{
4444
$data = static::decodeJson($json_string);
4545

@@ -78,16 +78,53 @@ public static function parseRequestBody($json_string)
7878
}
7979

8080
/**
81-
* Checks if a string is a valid JSON API
81+
*
82+
* @deprecated since version 0.9, to be removed in 1.0. Use parseResponseBody() instead
83+
*
84+
* @param string $json_string
85+
*
86+
* @return Document
87+
*
88+
* @throws ValidationException
89+
*/
90+
public static function parse($json_string)
91+
{
92+
@trigger_error(__METHOD__ . ' is deprecated since version 0.9 and will be removed in 1.0. Use parseResponseBody() instead', E_USER_DEPRECATED);
93+
94+
return static::parseResponseBody($json_string);
95+
}
96+
97+
/**
98+
* Checks if a string is a valid JSON API response body
8299
*
83100
* @param string $json_string
84101
* @return bool true, if $json_string contains valid JSON API, else false
85102
*/
86-
public static function isValid($json_string)
103+
public static function isValidResponseBody($json_string)
104+
{
105+
try
106+
{
107+
static::parseResponseBody($json_string);
108+
}
109+
catch ( Exception $e )
110+
{
111+
return false;
112+
}
113+
114+
return true;
115+
}
116+
117+
/**
118+
* Checks if a string is a valid JSON API request body
119+
*
120+
* @param string $json_string
121+
* @return bool true, if $json_string contains valid JSON API, else false
122+
*/
123+
public static function isValidRequestBody($json_string)
87124
{
88125
try
89126
{
90-
static::parse($json_string);
127+
static::parseRequestBody($json_string);
91128
}
92129
catch ( Exception $e )
93130
{
@@ -97,6 +134,21 @@ public static function isValid($json_string)
97134
return true;
98135
}
99136

137+
/**
138+
* Checks if a string is a valid JSON API
139+
*
140+
* @deprecated since version 0.9, to be removed in 1.0. Use isValidResponseBody() instead
141+
*
142+
* @param string $json_string
143+
* @return bool true, if $json_string contains valid JSON API, else false
144+
*/
145+
public static function isValid($json_string)
146+
{
147+
@trigger_error(__METHOD__ . ' is deprecated since version 0.9 and will be removed in 1.0. Use parseResponseBody() instead', E_USER_DEPRECATED);
148+
149+
return static::isValidResponseBody($json_string);
150+
}
151+
100152
/**
101153
* Decodes a json string
102154
*

tests/Unit/Utils/HelperTest.php

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,140 @@
2020
namespace Art4\JsonApiClient\Utils\Tests;
2121

2222
use Art4\JsonApiClient\Utils\Helper;
23+
use Art4\JsonApiClient\Exception\ValidationException;
2324

2425
class HelperTest extends \Art4\JsonApiClient\Tests\Fixtures\TestCase
2526
{
27+
/**
28+
* @test parseResponseBody() with valid JSON API returns Document Object
29+
*/
30+
public function testParseResponseBodyWithValidJsonapiReturnsDocument()
31+
{
32+
$jsonapi = '{"meta":{}}';
33+
34+
$this->assertInstanceOf('Art4\JsonApiClient\Document', Helper::parseResponseBody($jsonapi));
35+
}
36+
37+
/**
38+
* @test parseResponseBody throw Exception if input is invalid jsonapi
39+
*/
40+
public function testParseResponseBodyWithInvalidJsonapiThrowsException()
41+
{
42+
$invalid_jsonapi = '["This is valid JSON", "but invalid JSON API"]';
43+
44+
$this->expectException(ValidationException::class);
45+
46+
$output = Helper::parseResponseBody($invalid_jsonapi);
47+
}
48+
49+
/**
50+
* JSON API documents are defined in JavaScript Object Notation (JSON) [RFC4627].
51+
*/
52+
public function testParseResponseBodyWithInvalidJsonThrowsException()
53+
{
54+
$invalid_json = 'invalid_json_string';
55+
56+
$this->expectException(ValidationException::class);
57+
58+
$output = Helper::parseResponseBody($invalid_json);
59+
}
60+
61+
/**
62+
* @test isValidResponseBody() with valid JSON API returns true
63+
*/
64+
public function testIsValidResponseBodyWithValidJsonapi()
65+
{
66+
$jsonapi = '{"meta":{}}';
67+
68+
$this->assertTrue(Helper::isValidResponseBody($jsonapi));
69+
}
70+
71+
/**
72+
* @test isValidResponseBody() with invalid jsonapi
73+
*/
74+
public function testIsValidResponseBodyWithInvalidJsonapi()
75+
{
76+
$invalid_jsonapi = '["This is valid JSON", "but invalid JSON API"]';
77+
78+
$this->assertFalse(Helper::isValidResponseBody($invalid_jsonapi));
79+
}
80+
81+
/**
82+
* @test isValidResponseBody() with invalid json
83+
*/
84+
public function testIsValidResponseBodyWithInvalidJson()
85+
{
86+
$invalid_json = 'invalid_json_string';
87+
88+
$this->assertFalse(Helper::isValidResponseBody($invalid_json));
89+
}
90+
91+
/**
92+
* @test parseRequestBody() with valid JSON API returns Document Object
93+
*/
94+
public function testParseRequestBodyWithValidJsonapiReturnsDocument()
95+
{
96+
$jsonapi = '{"meta":{}}';
97+
98+
$this->assertInstanceOf('Art4\JsonApiClient\Document', Helper::parseRequestBody($jsonapi));
99+
}
100+
101+
/**
102+
* @test parseRequestBody() throw Exception if input is invalid jsonapi
103+
*/
104+
public function testParseRequestBodyWithInvalidJsonapiThrowsException()
105+
{
106+
$invalid_jsonapi = '["This is valid JSON", "but invalid JSON API"]';
107+
108+
$this->expectException(ValidationException::class);
109+
110+
$output = Helper::parseRequestBody($invalid_jsonapi);
111+
}
112+
113+
/**
114+
* JSON API documents are defined in JavaScript Object Notation (JSON) [RFC4627].
115+
*/
116+
public function testParseRequestBodyWithInvalidJsonThrowsException()
117+
{
118+
$invalid_json = 'invalid_json_string';
119+
120+
$this->expectException(ValidationException::class);
121+
122+
$output = Helper::parseRequestBody($invalid_json);
123+
}
124+
125+
/**
126+
* @test isValidRequestBody() with valid JSON API returns true
127+
*/
128+
public function testIsValidRequestBodyWithValidJsonapi()
129+
{
130+
$jsonapi = '{"meta":{}}';
131+
132+
$this->assertTrue(Helper::isValidRequestBody($jsonapi));
133+
}
134+
135+
/**
136+
* @test isValidRequestBody() with invalid jsonapi
137+
*/
138+
public function testIsValidRequestBodyWithInvalidJsonapi()
139+
{
140+
$invalid_jsonapi = '["This is valid JSON", "but invalid JSON API"]';
141+
142+
$this->assertFalse(Helper::isValidRequestBody($invalid_jsonapi));
143+
}
144+
145+
/**
146+
* @test isValidRequestBody() with invalid json
147+
*/
148+
public function testIsValidRequestBodyWithInvalidJson()
149+
{
150+
$invalid_json = 'invalid_json_string';
151+
152+
$this->assertFalse(Helper::isValidRequestBody($invalid_json));
153+
}
154+
155+
// Tests for deprecated methods
156+
26157
/**
27158
* @test parse() with valid JSON API returns Document Object
28159
*/

0 commit comments

Comments
 (0)