@@ -380,4 +380,32 @@ public void testAnyOfDiff() {
380380 assertThat (changedSchema .getRequired ().getMissing ()).containsExactly ("fieldA" );
381381 assertThat (changedSchema .getRequired ().getIncreased ()).isEmpty ();
382382 }
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+ }
383411}
0 commit comments