@@ -352,4 +352,60 @@ public void changePatternHandling() {
352
352
assertThat (props .get ("patternAdded" ).getPattern ().getNewPattern ())
353
353
.isEqualTo ("^\\ d{3}-\\ d{2}-\\ d{4}$?" );
354
354
}
355
+
356
+ @ Test // issue #212
357
+ public void testAnyOfDiff () {
358
+ ChangedOpenApi changedOpenApi =
359
+ OpenApiCompare .fromLocations (
360
+ "schemaDiff/anyOf-diff-1.yaml" , "schemaDiff/anyOf-diff-2.yaml" );
361
+ ChangedSchema changedSchema =
362
+ getRequestBodyChangedSchema (changedOpenApi , POST , "/anyof/test" , "application/json" );
363
+
364
+ assertThat (changedSchema ).isNotNull ();
365
+ // The diff compares the *merged* schema resulting from anyOf, not the anyOf structure itself.
366
+ // See details in #772
367
+ assertThat (changedSchema .isChanged ()).isEqualTo (DiffResult .COMPATIBLE );
368
+
369
+ // fieldA only changed required status, not its schema
370
+ assertThat (changedSchema .getChangedProperties ()).isEmpty ();
371
+
372
+ // fieldB: Removed from the merged schema properties
373
+ assertThat (changedSchema .getMissingProperties ()).containsKey ("fieldB" );
374
+
375
+ // fieldC: Added to the merged schema properties
376
+ assertThat (changedSchema .getIncreasedProperties ()).containsKey ("fieldC" );
377
+
378
+ // Check the overall required list changes for the merged schema
379
+ assertThat (changedSchema .getRequired ().isChanged ()).isEqualTo (DiffResult .COMPATIBLE );
380
+ assertThat (changedSchema .getRequired ().getMissing ()).containsExactly ("fieldA" );
381
+ assertThat (changedSchema .getRequired ().getIncreased ()).isEmpty ();
382
+ }
383
+
384
+ @ Test // issue #212 - adapted for allOf
385
+ public void testAllOfDiff () {
386
+ ChangedOpenApi changedOpenApi =
387
+ OpenApiCompare .fromLocations (
388
+ "schemaDiff/allOf-diff-1.yaml" , "schemaDiff/allOf-diff-2.yaml" );
389
+ ChangedSchema changedSchema =
390
+ getRequestBodyChangedSchema (changedOpenApi , POST , "/allof/test" , "application/json" );
391
+
392
+ assertThat (changedSchema ).isNotNull ();
393
+ // The diff compares the *merged* schema resulting from allOf, not the allOf structure itself.
394
+ // See details in #772
395
+ assertThat (changedSchema .isChanged ()).isEqualTo (DiffResult .COMPATIBLE );
396
+
397
+ // fieldA only changed required status, commonField is unchanged
398
+ assertThat (changedSchema .getChangedProperties ()).isEmpty ();
399
+
400
+ // fieldB: Removed from the merged schema properties
401
+ assertThat (changedSchema .getMissingProperties ()).containsKey ("fieldB" );
402
+
403
+ // fieldC: Added to the merged schema properties
404
+ assertThat (changedSchema .getIncreasedProperties ()).containsKey ("fieldC" );
405
+
406
+ // Check the overall required list changes for the merged schema
407
+ assertThat (changedSchema .getRequired ().isChanged ()).isEqualTo (DiffResult .COMPATIBLE );
408
+ assertThat (changedSchema .getRequired ().getMissing ()).containsExactly ("fieldA" );
409
+ assertThat (changedSchema .getRequired ().getIncreased ()).isEmpty ();
410
+ }
355
411
}
0 commit comments