Skip to content

Commit f986c36

Browse files
authored
Merge pull request #18 from GitHubHubus/tests
Add test for several methods
2 parents 174c5df + 3f46eab commit f986c36

File tree

2 files changed

+121
-44
lines changed

2 files changed

+121
-44
lines changed

src/JsonQueriable.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public function isJson($value, $isReturnMap = false)
185185
}
186186

187187
/**
188-
* prepare data for result
188+
* Prepare data for result
189189
*
190190
* @param mixed $data
191191
* @param bool $isObject
@@ -206,10 +206,10 @@ protected function prepareResult($data, $isObject)
206206
}
207207

208208
/**
209-
* read JSON data from file
209+
* Read JSON data from file
210210
*
211-
* @param $file string
212-
* @param $type string
211+
* @param string $file
212+
* @param string $type
213213
* @return bool|string|array
214214
* @throws FileNotFoundException
215215
*/

tests/JsonQueriableTest.php

Lines changed: 117 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44

55
use Nahid\JsonQ\Jsonq;
66
use Nahid\JsonQ\Exceptions\FileNotFoundException;
7+
use Nahid\JsonQ\Exceptions\InvalidJsonException;
78

89
class JsonQueriableTest extends AbstractTestCase
910
{
1011
const FILE_NAME = 'data.json';
12+
const FILE_INVALID_NAME = 'invalid_data.json';
1113

1214
/**
1315
* @var Jsonq
@@ -19,53 +21,66 @@ class JsonQueriableTest extends AbstractTestCase
1921
*/
2022
protected $file;
2123

22-
protected function createFile()
23-
{
24-
$json = [
25-
'level1.1' => [
26-
'level2.1' => [
27-
'level3.1' => 'data31',
28-
'level3.2' => 32,
29-
'level3.3' => true,
30-
],
31-
'level2.2' => [
32-
'level3.4' => 'data34',
33-
'level3.5' => 35,
34-
'level3.6' => false,
35-
],
36-
'level2.3' => [
37-
'level3.7' => 'data37',
38-
'level3.8' => 38,
39-
'level3.9' => true,
40-
]
24+
/**
25+
* @var string
26+
*/
27+
protected $fileInvalid;
28+
29+
protected static $testData = [
30+
'level1.1' => [
31+
'level2.1' => [
32+
'level3.1' => 'data31',
33+
'level3.2' => 32,
34+
'level3.3' => true,
4135
],
42-
'level1.2' => [
43-
'level2.4' => [
44-
'level3.10' => 'data310',
45-
'level3.11' => 311,
46-
'level3.12' => true,
47-
],
48-
'level2.5' => [
49-
'level3.13' => 'data313',
50-
'level3.14' => 314,
51-
'level3.15' => false,
52-
],
53-
'level2.6' => [
54-
'level3.16' => 'data316',
55-
'level3.17' => 317,
56-
'level3.18' => true,
57-
]
36+
'level2.2' => [
37+
'level3.4' => 'data34',
38+
'level3.5' => 35,
39+
'level3.6' => false,
40+
],
41+
'level2.3' => [
42+
'level3.7' => 'data37',
43+
'level3.8' => 38,
44+
'level3.9' => true,
5845
]
59-
];
60-
61-
file_put_contents(self::FILE_NAME, json_encode($json));
46+
],
47+
'level1.2' => [
48+
'level2.4' => [
49+
'level3.10' => 'data310',
50+
'level3.11' => 311,
51+
'level3.12' => true,
52+
],
53+
'level2.5' => [
54+
'level3.13' => 'data313',
55+
'level3.14' => 314,
56+
'level3.15' => false,
57+
],
58+
'level2.6' => [
59+
'level3.16' => 'data316',
60+
'level3.17' => 317,
61+
'level3.18' => true,
62+
]
63+
]
64+
];
65+
66+
protected function createFile()
67+
{
68+
file_put_contents(self::FILE_NAME, json_encode(self::$testData));
6269
$this->file = self::FILE_NAME;
6370
}
6471

65-
protected function removeFile()
72+
protected function createInvalidFile()
73+
{
74+
file_put_contents(self::FILE_INVALID_NAME, 'invalid_data');
75+
$this->fileInvalid = self::FILE_INVALID_NAME;
76+
}
77+
78+
protected function removeFiles()
6679
{
6780
unlink(self::FILE_NAME);
81+
unlink(self::FILE_INVALID_NAME);
6882
$this->file = null;
83+
$this->fileInvalid = null;
6984
}
7085

7186
/**
@@ -84,12 +99,13 @@ private function getTestObject()
8499
protected function setUp()
85100
{
86101
$this->createFile();
102+
$this->createInvalidFile();
87103
$this->jsonq = new Jsonq(self::FILE_NAME);
88104
}
89105

90106
protected function tearDown()
91107
{
92-
$this->removeFile();
108+
$this->removeFiles();
93109
}
94110

95111
/**
@@ -146,6 +162,67 @@ public function testIsJson($input, $isReturnMap, $result = null)
146162
$this->assertEquals($result, $this->jsonq->isJson($input, $isReturnMap));
147163
}
148164

165+
/**
166+
* @param mixed $input
167+
* @param bool $isObject
168+
* @param array $result
169+
*
170+
* @dataProvider prepareResultProvider
171+
*/
172+
public function testPrepareResult($input, $isObject, $result)
173+
{
174+
$method = $this->makeCallable($this->jsonq, 'prepareResult');
175+
176+
$this->assertEquals($result, $method->invokeArgs($this->jsonq, [$input, $isObject]));
177+
}
178+
179+
/**
180+
* @param mixed $file
181+
* @param array $result
182+
*
183+
* @dataProvider getDataFromFileProvider
184+
*/
185+
public function testGetDataFromFile($file, $result)
186+
{
187+
$method = $this->makeCallable($this->jsonq, 'getDataFromFile');
188+
189+
if (is_string($result)) {
190+
$this->expectException($result);
191+
$method->invokeArgs($this->jsonq, [$file]);
192+
} else {
193+
$this->assertEquals($result, $method->invokeArgs($this->jsonq, [$file]));
194+
}
195+
}
196+
197+
public function getDataFromFileProvider()
198+
{
199+
return [
200+
[self::FILE_NAME, self::$testData],
201+
[null, FileNotFoundException::class],
202+
[true, FileNotFoundException::class],
203+
[1, FileNotFoundException::class],
204+
['invalid_path.json', FileNotFoundException::class],
205+
[self::FILE_INVALID_NAME, InvalidJsonException::class]
206+
];
207+
}
208+
209+
public function prepareResultProvider()
210+
{
211+
$obj = new \stdClass();
212+
$obj->scalar = 'test';
213+
$obj2 = new \stdClass();
214+
$obj2->scalar = 'test2';
215+
216+
return [
217+
[['test', 'test2'], false, ['test', 'test2']],
218+
[['key1' => 'test','key2' => 'test2'], false, ['key1' => 'test','key2' => 'test2']],
219+
[['test', 'test2'], true, [$obj, $obj2]],
220+
[['key1' => 'test','key2' => 'test2'], true, ['key1' => $obj, 'key2' => $obj2]],
221+
['["test", "test2"]', false, '["test", "test2"]'],
222+
['["test", "test2"]', true, '["test", "test2"]']
223+
];
224+
}
225+
149226
public function isJsonProvider()
150227
{
151228
return [

0 commit comments

Comments
 (0)