@@ -6805,6 +6805,113 @@ public void generateSortValidationNotAppliedWhenNoSortEnum() throws IOException
68056805 .doesNotContainWithName ("ValidSort" );
68066806 }
68076807
6808+ @ Test
6809+ public void generateSortValidationWorksForArraySortEnum () throws IOException {
6810+ Map <String , Object > props = new HashMap <>();
6811+ props .put (SpringCodegen .INTERFACE_ONLY , "true" );
6812+ props .put (SpringCodegen .SKIP_DEFAULT_INTERFACE , "true" );
6813+ props .put (SpringCodegen .USE_TAGS , "true" );
6814+ props .put (SpringCodegen .USE_SPRING_BOOT3 , "true" );
6815+ props .put (SpringCodegen .GENERATE_SORT_VALIDATION , "true" );
6816+
6817+ Map <String , File > files = generateFromContract (
6818+ "src/test/resources/3_0/spring/petstore-sort-validation.yaml" , SPRING_BOOT , props );
6819+
6820+ // findPetsWithArraySortEnum: sort is type:array, items have inline enum → @ValidSort with Java {} syntax
6821+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6822+ .assertMethod ("findPetsWithArraySortEnum" )
6823+ .assertParameter ("pageable" )
6824+ .assertParameterAnnotations ()
6825+ .containsWithName ("ValidSort" );
6826+
6827+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6828+ .fileContains ("@ValidSort(allowedValues = {" )
6829+ .fileContains ("\" id,asc\" " )
6830+ .fileContains ("\" id,desc\" " )
6831+ .fileContains ("\" name,asc\" " )
6832+ .fileContains ("\" name,desc\" " );
6833+ }
6834+
6835+ @ Test
6836+ public void generateSortValidationWorksForArraySortRefEnum () throws IOException {
6837+ Map <String , Object > props = new HashMap <>();
6838+ props .put (SpringCodegen .INTERFACE_ONLY , "true" );
6839+ props .put (SpringCodegen .SKIP_DEFAULT_INTERFACE , "true" );
6840+ props .put (SpringCodegen .USE_TAGS , "true" );
6841+ props .put (SpringCodegen .USE_SPRING_BOOT3 , "true" );
6842+ props .put (SpringCodegen .GENERATE_SORT_VALIDATION , "true" );
6843+
6844+ Map <String , File > files = generateFromContract (
6845+ "src/test/resources/3_0/spring/petstore-sort-validation.yaml" , SPRING_BOOT , props );
6846+
6847+ // findPetsWithArraySortRefEnum: sort is type:array, items $ref to PetSort enum → @ValidSort with PetSort values
6848+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6849+ .assertMethod ("findPetsWithArraySortRefEnum" )
6850+ .assertParameter ("pageable" )
6851+ .assertParameterAnnotations ()
6852+ .containsWithName ("ValidSort" );
6853+
6854+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6855+ .fileContains ("\" id,asc\" " )
6856+ .fileContains ("\" id,desc\" " )
6857+ .fileContains ("\" createdAt,asc\" " )
6858+ .fileContains ("\" createdAt,desc\" " );
6859+ }
6860+
6861+ @ Test
6862+ public void generateSortValidationWorksForExternalParamRefArraySort () throws IOException {
6863+ Map <String , Object > props = new HashMap <>();
6864+ props .put (SpringCodegen .INTERFACE_ONLY , "true" );
6865+ props .put (SpringCodegen .SKIP_DEFAULT_INTERFACE , "true" );
6866+ props .put (SpringCodegen .USE_TAGS , "true" );
6867+ props .put (SpringCodegen .USE_SPRING_BOOT3 , "true" );
6868+ props .put (SpringCodegen .GENERATE_SORT_VALIDATION , "true" );
6869+
6870+ Map <String , File > files = generateFromContract (
6871+ "src/test/resources/3_0/spring/petstore-sort-validation.yaml" , SPRING_BOOT , props );
6872+
6873+ // findPetsWithExternalParamRefArraySort: sort param $ref to external components file,
6874+ // type:array with items $ref to PetSortEnum in the same external file
6875+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6876+ .assertMethod ("findPetsWithExternalParamRefArraySort" )
6877+ .assertParameter ("pageable" )
6878+ .assertParameterAnnotations ()
6879+ .containsWithName ("ValidSort" );
6880+
6881+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6882+ .fileContains ("\" name,asc\" " )
6883+ .fileContains ("\" name,desc\" " )
6884+ .fileContains ("\" id,asc\" " )
6885+ .fileContains ("\" id,desc\" " );
6886+ }
6887+
6888+ @ Test
6889+ public void generateSortValidationWorksForNonExplodedExternalParamRefArraySort () throws IOException {
6890+ Map <String , Object > props = new HashMap <>();
6891+ props .put (SpringCodegen .INTERFACE_ONLY , "true" );
6892+ props .put (SpringCodegen .SKIP_DEFAULT_INTERFACE , "true" );
6893+ props .put (SpringCodegen .USE_TAGS , "true" );
6894+ props .put (SpringCodegen .USE_SPRING_BOOT3 , "true" );
6895+ props .put (SpringCodegen .GENERATE_SORT_VALIDATION , "true" );
6896+
6897+ Map <String , File > files = generateFromContract (
6898+ "src/test/resources/3_0/spring/petstore-sort-validation.yaml" , SPRING_BOOT , props );
6899+
6900+ // findPetsWithNonExplodedExternalParamRefArraySort: sort param $ref to external file,
6901+ // explode: false — @ValidSort works identically since it validates the deserialized Pageable
6902+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6903+ .assertMethod ("findPetsWithNonExplodedExternalParamRefArraySort" )
6904+ .assertParameter ("pageable" )
6905+ .assertParameterAnnotations ()
6906+ .containsWithName ("ValidSort" );
6907+
6908+ JavaFileAssert .assertThat (files .get ("PetApi.java" ))
6909+ .fileContains ("\" name,asc\" " )
6910+ .fileContains ("\" name,desc\" " )
6911+ .fileContains ("\" id,asc\" " )
6912+ .fileContains ("\" id,desc\" " );
6913+ }
6914+
68086915 // -------------------------------------------------------------------------
68096916 // generatePageableConstraintValidation tests
68106917 // -------------------------------------------------------------------------
0 commit comments