@@ -352,4 +352,60 @@ public void changePatternHandling() {
352352 assertThat (props .get ("patternAdded" ).getPattern ().getNewPattern ())
353353 .isEqualTo ("^\\ d{3}-\\ d{2}-\\ d{4}$?" );
354354 }
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+ }
355411}
0 commit comments