Skip to content

Commit a1ad04f

Browse files
committed
Illustrate proper usage of the exclusion system. Add ability to change original.
1 parent 5fb0a83 commit a1ad04f

File tree

2 files changed

+101
-4
lines changed

2 files changed

+101
-4
lines changed

Diff for: src/JsonDiff.php

+30-4
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,21 @@ public function __construct($original = '')
3030
*/
3131
public function exclude($value)
3232
{
33-
$value = ! $value ? [] : $value;
33+
if (! empty($value)) {
34+
$this->exclude = is_array($value) ? $value : [$value];
35+
}
3436

35-
$this->exclude = is_array($value) ? $value : [$value];
37+
return $this;
38+
}
39+
40+
/**
41+
* Clear our exclusions
42+
*
43+
* @return $this
44+
*/
45+
public function clearExclusions()
46+
{
47+
$this->exclude = [];
3648

3749
return $this;
3850
}
@@ -51,6 +63,20 @@ public function setDivider($divider = null)
5163
return $this;
5264
}
5365

66+
/**
67+
* Allow us to set the original json for comparison
68+
*
69+
* @param $value
70+
*
71+
* @return $this
72+
*/
73+
public function setOriginal($value)
74+
{
75+
$this->original = $value;
76+
77+
return $this;
78+
}
79+
5480
/**
5581
* Simple factory method for cleaner usage
5682
*
@@ -70,10 +96,10 @@ public static function original($original)
7096
* @param string $new
7197
* @param array $exclude
7298
*
73-
* @return array
99+
* @return \Konsulting\JsonDiffResult
74100
* @throws \Konsulting\Exceptions\JsonDecodeFailed
75101
*/
76-
public static function compare($original, $new, $exclude = [])
102+
public static function compare($original, $new, $exclude = null)
77103
{
78104
return static::original($original)->exclude($exclude)->compareTo($new);
79105
}

Diff for: tests/Unit/JsonDiffTest.php

+71
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ public function it_diffs_simple_json_and_removes_a_column()
2424
$this->assertEquals(['a' => 1], $diff->compareTo('{"a":"1","b":"2"}')->added);
2525
}
2626

27+
/** @test */
28+
public function we_can_change_the_original()
29+
{
30+
$diff = new JsonDiff('{}');
31+
$diff->setOriginal('{"a":"1"}');
32+
33+
$this->assertFalse($diff->compareTo('{"a":"1"}')->changed);
34+
}
35+
2736
/** @test */
2837
public function it_decodes_to_an_array_properly()
2938
{
@@ -96,4 +105,66 @@ public function it_successfully_diffs_the_stub_files()
96105
$this->assertEquals(json_decode(stub('diff.json'), true), $result->diff);
97106
$this->assertTrue($result->changed);
98107
}
108+
109+
/** @test */
110+
public function it_ignores_keys()
111+
{
112+
$original = '[
113+
{
114+
"name": "Keoghan",
115+
"email": "[email protected]",
116+
"cost": 0
117+
}
118+
]';
119+
120+
$compareTo = '[
121+
{
122+
"name": "Keoghan",
123+
"email": "[email protected]",
124+
"cost": 100
125+
}
126+
]';
127+
128+
$diff = new JsonDiff($original);
129+
130+
$this->assertFalse($diff->exclude(['cost'])->compareTo($compareTo)->changed);
131+
132+
$this->assertFalse((new JsonDiff)->setOriginal($original)->exclude(['cost'])->compareTo($compareTo)->changed);
133+
$this->assertFalse(JsonDiff::compare($original, $compareTo, ['cost'])->changed);
134+
}
135+
136+
/** @test */
137+
public function it_ignores_deep_keys()
138+
{
139+
$original = '[
140+
{
141+
"name": "Keoghan",
142+
"email": "[email protected]",
143+
"cost": {
144+
"nested": {
145+
"price": 0
146+
}
147+
}
148+
}
149+
]';
150+
151+
$compareTo = '[
152+
{
153+
"name": "Keoghan",
154+
"email": "[email protected]",
155+
"cost": {
156+
"nested": {
157+
"price": 100
158+
}
159+
}
160+
}
161+
]';
162+
163+
$diff = new JsonDiff($original);
164+
165+
$this->assertFalse($diff->exclude(['price'])->compareTo($compareTo)->changed);
166+
167+
$this->assertFalse((new JsonDiff)->setOriginal($original)->exclude(['price'])->compareTo($compareTo)->changed);
168+
$this->assertFalse(JsonDiff::compare($original, $compareTo, ['price'])->changed);
169+
}
99170
}

0 commit comments

Comments
 (0)