Skip to content

Commit 6450c04

Browse files
authored
Merge pull request #41 from reinfi/merge-response-and-request-bodies
Merge response and request bodies
2 parents c0d0c17 + 6cf1b9b commit 6450c04

File tree

5 files changed

+121
-1
lines changed

5 files changed

+121
-1
lines changed

src/Merge/ComponentsMerger.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,26 @@ public function merge(
4141
);
4242
}
4343

44+
if (
45+
count($existingComponents->requestBodies ?? []) > 0
46+
|| count($newComponents->requestBodies ?? []) > 0
47+
) {
48+
$mergedComponents->requestBodies = array_merge(
49+
$existingComponents->requestBodies ?? [],
50+
$newComponents->requestBodies ?? [],
51+
);
52+
}
53+
54+
if (
55+
count($existingComponents->responses ?? []) > 0
56+
|| count($newComponents->responses ?? []) > 0
57+
) {
58+
$mergedComponents->responses = array_merge(
59+
$existingComponents->responses ?? [],
60+
$newComponents->responses ?? [],
61+
);
62+
}
63+
4464
$clonedSpec = new OpenApi(Json::toArray($existingSpec->getSerializableData()));
4565

4666
$clonedSpec->components = $mergedComponents;

src/OpenApiMerge.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ public function mergeFiles(File $baseFile, array $additionalFiles, bool $resolve
5050
}
5151

5252
if ($resolveReference && $mergedOpenApiDefinition->components !== null) {
53-
$mergedOpenApiDefinition->components->schemas = [];
53+
$mergedOpenApiDefinition->components->schemas = [];
54+
$mergedOpenApiDefinition->components->responses = [];
55+
$mergedOpenApiDefinition->components->requestBodies = [];
5456
}
5557

5658
return new SpecificationFile(

tests/Acceptance/Fixtures/expected.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ components:
9797
type: http
9898
BasicAuth:
9999
type: http
100+
responses: { }
101+
requestBodies: { }
100102
security: []
101103
tags:
102104
-

tests/Acceptance/Fixtures/expected_yaml610.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ components:
9797
type: http
9898
BasicAuth:
9999
type: http
100+
responses: { }
101+
requestBodies: { }
100102
security: []
101103
tags:
102104
-

tests/Merge/ComponentsMergerTest.php

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,5 +152,99 @@ public function mergeDataProvider(): iterable
152152
],
153153
]),
154154
];
155+
156+
yield 'request bodies first' => [
157+
new Components([
158+
'requestBodies' => [
159+
'RequestBody' => [],
160+
],
161+
]),
162+
null,
163+
new Components([
164+
'requestBodies' => [
165+
'RequestBody' => [],
166+
],
167+
]),
168+
];
169+
170+
yield 'request bodies second' => [
171+
null,
172+
new Components([
173+
'requestBodies' => [
174+
'RequestBody' => [],
175+
],
176+
]),
177+
new Components([
178+
'requestBodies' => [
179+
'RequestBody' => [],
180+
],
181+
]),
182+
];
183+
184+
yield 'request bodies both' => [
185+
new Components([
186+
'requestBodies' => [
187+
'RequestBody' => [],
188+
],
189+
]),
190+
new Components([
191+
'requestBodies' => [
192+
'AnotherRequestBody' => [],
193+
],
194+
]),
195+
new Components([
196+
'requestBodies' => [
197+
'RequestBody' => [],
198+
'AnotherRequestBody' => [],
199+
],
200+
]),
201+
];
202+
203+
yield 'responses first' => [
204+
new Components([
205+
'responses' => [
206+
'ProblemResponse' => [],
207+
],
208+
]),
209+
null,
210+
new Components([
211+
'responses' => [
212+
'ProblemResponse' => [],
213+
],
214+
]),
215+
];
216+
217+
yield 'responses second' => [
218+
null,
219+
new Components([
220+
'responses' => [
221+
'ProblemResponse' => [],
222+
],
223+
]),
224+
new Components([
225+
'responses' => [
226+
'ProblemResponse' => [],
227+
],
228+
]),
229+
];
230+
231+
yield 'responses both' => [
232+
new Components([
233+
'responses' => [
234+
'ProblemResponse' => [],
235+
],
236+
]),
237+
new Components([
238+
'responses' => [
239+
'AnotherProblemResponse' => [],
240+
],
241+
]),
242+
new Components([
243+
'responses' => [
244+
'ProblemResponse' => [],
245+
'AnotherProblemResponse' => [],
246+
],
247+
]),
248+
];
155249
}
156250
}

0 commit comments

Comments
 (0)