File tree Expand file tree Collapse file tree 3 files changed +132
-8
lines changed
Expand file tree Collapse file tree 3 files changed +132
-8
lines changed Original file line number Diff line number Diff line change 1010class MergeDiffsAction
1111{
1212 /**
13- * @param Collection<JsonDiff> $diffs
13+ * @param Collection<JsonDiff> $jsonDiffs
1414 */
15- public function execute (Collection $ diffs ): JsonDiff
15+ public function execute (Collection $ jsonDiffs ): JsonDiff
1616 {
17- /** @var JsonDiff $mergedDiff */
18- $ mergedDiff = $ diffs ->shift ();
19- $ diffs
20- ->each (function (JsonDiff $ diff ) use ($ mergedDiff ): void {
21- $ mergedDiff ->mergeChanges ($ diff );
17+ $ mergedJsonDiff = new JsonDiff ([], []);
18+ $ jsonDiffs
19+ ->each (function (JsonDiff $ jsonDiff ) use ($ mergedJsonDiff ): void {
20+ $ mergedJsonDiff ->mergeChanges ($ jsonDiff );
2221 });
2322
24- return $ mergedDiff ;
23+ return $ mergedJsonDiff ;
2524 }
2625}
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Jet \Tests \Factories ;
6+
7+ use Illuminate \Support \Collection ;
8+ use Jet \JsonDiff \JsonDiff ;
9+
10+ class JsonDiffFactory
11+ {
12+ /**
13+ * @var bool
14+ */
15+ protected $ createListArray = false ;
16+
17+ /**
18+ * @var array
19+ */
20+ protected $ original ;
21+
22+ /**
23+ * @var array
24+ */
25+ protected $ new ;
26+
27+ public static function new (): self
28+ {
29+ return new self ();
30+ }
31+
32+ public function create (?array $ original = null , ?array $ new = null ): JsonDiff
33+ {
34+ if ($ this ->createListArray ) {
35+ $ arrayFactory = ListArrayFactory::new ();
36+ } else {
37+ $ arrayFactory = AssociativeArrayFactory::new ();
38+ }
39+
40+ return new JsonDiff (
41+ $ original ?? $ this ->original ?? $ arrayFactory ->create (),
42+ $ new ?? $ this ->new ?? $ arrayFactory ->create ()
43+ );
44+ }
45+
46+ /**
47+ * @return Collection<JsonDiff>
48+ */
49+ public function createMany (int $ count ): Collection
50+ {
51+ $ jsonDiffs = collect ([]);
52+
53+ for ($ i = 0 ; $ i < $ count ; $ i ++) {
54+ $ jsonDiffs ->push ($ this ->create ());
55+ }
56+
57+ return $ jsonDiffs ;
58+ }
59+
60+ public function withOriginal (array $ original ): self
61+ {
62+ $ clone = clone $ this ;
63+ $ clone ->original = $ original ;
64+
65+ return $ clone ;
66+ }
67+
68+ public function withNew (array $ new ): self
69+ {
70+ $ clone = clone $ this ;
71+ $ clone ->new = $ new ;
72+
73+ return $ clone ;
74+ }
75+
76+ public function forAssociativeArray (): self
77+ {
78+ $ clone = clone $ this ;
79+ $ this ->createListArray = false ;
80+
81+ return $ clone ;
82+ }
83+
84+ public function forListArray (): self
85+ {
86+ $ clone = clone $ this ;
87+ $ this ->createListArray = true ;
88+
89+ return $ clone ;
90+ }
91+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Jet \Tests \Unit \Actions ;
6+
7+ use Illuminate \Container \Container ;
8+ use Jet \JsonDiff \Actions \MergeDiffsAction ;
9+ use Jet \JsonDiff \JsonDiff ;
10+ use Jet \Tests \Factories \JsonDiffFactory ;
11+ use PHPUnit \Framework \TestCase ;
12+
13+ class MergeDiffsActionTest extends TestCase
14+ {
15+ public function test_it_merges_all_json_diffs_into_one_json_diff (): void
16+ {
17+ $ jsonDiffs = JsonDiffFactory::new ()->createMany (2 );
18+
19+ /** @var JsonDiff $firstJsonDiff */
20+ $ firstJsonDiff = $ jsonDiffs ->first ();
21+ /** @var JsonDiff $secondJsonDiff */
22+ $ secondJsonDiff = $ jsonDiffs ->skip (1 )->first ();
23+
24+ /** @var MergeDiffsAction $action */
25+ $ action = Container::getInstance ()->make (MergeDiffsAction::class);
26+
27+ $ mergedJsonDiff = $ action ->execute ($ jsonDiffs );
28+
29+ $ this ->assertSame (
30+ $ firstJsonDiff ->getNumberOfChanges () + $ secondJsonDiff ->getNumberOfChanges (),
31+ $ mergedJsonDiff ->getNumberOfChanges ()
32+ );
33+ }
34+ }
You can’t perform that action at this time.
0 commit comments