From e2de2a8a7f052ee2564ae8257fd1059892329ca7 Mon Sep 17 00:00:00 2001 From: Aaron Klish Date: Thu, 19 Sep 2019 14:55:12 -0500 Subject: [PATCH] Fixed Swagger generation bug where an entity has nothing to sort by (#975) * Fixed Swagger generation bug where an entity has nothing to sort by * Changed logic so ID is now a sortable parameter * Removed unused imports: * Removed unused imports: * Reverting owasp check back to level 6 * Fixing checkstyles --- .../elide/contrib/swagger/SwaggerBuilder.java | 7 ++- .../contrib/swagger/SwaggerBuilderTest.java | 43 ++++++++++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/elide-contrib/elide-swagger/src/main/java/com/yahoo/elide/contrib/swagger/SwaggerBuilder.java b/elide-contrib/elide-swagger/src/main/java/com/yahoo/elide/contrib/swagger/SwaggerBuilder.java index 06ff27acc8..ca8f1798ed 100644 --- a/elide-contrib/elide-swagger/src/main/java/com/yahoo/elide/contrib/swagger/SwaggerBuilder.java +++ b/elide-contrib/elide-swagger/src/main/java/com/yahoo/elide/contrib/swagger/SwaggerBuilder.java @@ -281,10 +281,10 @@ public Path getCollectionPath() { path.get(new JsonApiOperation() .description(getDescription) - .tag(getTag()) + .parameter(getSortParameter()) .parameter(getSparseFieldsParameter()) .parameter(getIncludeParameter()) - .parameter(getSortParameter()) + .tag(getTag()) .response(200, okPluralResponse)); for (Parameter param : getFilterParameters()) { @@ -475,6 +475,9 @@ private Parameter getSortParameter() { .flatMap(Collection::stream) .collect(Collectors.toList()); + filterAttributes.add("id"); + filterAttributes.add("-id"); + return new QueryParameter() .name("sort") .type("array") diff --git a/elide-contrib/elide-swagger/src/test/java/com/yahoo/elide/contrib/swagger/SwaggerBuilderTest.java b/elide-contrib/elide-swagger/src/test/java/com/yahoo/elide/contrib/swagger/SwaggerBuilderTest.java index 49647ee379..7e8e346c75 100644 --- a/elide-contrib/elide-swagger/src/test/java/com/yahoo/elide/contrib/swagger/SwaggerBuilderTest.java +++ b/elide-contrib/elide-swagger/src/test/java/com/yahoo/elide/contrib/swagger/SwaggerBuilderTest.java @@ -5,6 +5,7 @@ */ package com.yahoo.elide.contrib.swagger; +import com.yahoo.elide.annotation.Include; import com.yahoo.elide.contrib.swagger.model.Resource; import com.yahoo.elide.contrib.swagger.models.Author; import com.yahoo.elide.contrib.swagger.models.Book; @@ -44,6 +45,8 @@ import java.util.Set; import java.util.stream.Collectors; +import javax.persistence.Entity; +import javax.persistence.Id; public class SwaggerBuilderTest { EntityDictionary dictionary; @@ -396,7 +399,7 @@ public void testSortParam() throws Exception { Assert.assertEquals(sortParam.getIn(), "query"); - List sortValues = Arrays.asList("title", "-title"); + List sortValues = Arrays.asList("id", "-id", "title", "-title"); Assert.assertTrue(((StringProperty) sortParam.getItems()).getEnum().containsAll(sortValues)); Assert.assertEquals(sortParam.getCollectionFormat(), "csv"); } @@ -420,8 +423,8 @@ public void testIncludeParam() throws Exception { Assert.assertEquals(includeParam.getIn(), "query"); - List sortValues = Arrays.asList("authors", "publisher"); - Assert.assertTrue(((StringProperty) includeParam.getItems()).getEnum().containsAll(sortValues)); + List includeValues = Arrays.asList("authors", "publisher"); + Assert.assertTrue(((StringProperty) includeParam.getItems()).getEnum().containsAll(includeValues)); Assert.assertEquals(includeParam.getCollectionFormat(), "csv"); } @@ -444,8 +447,8 @@ public void testSparseFieldsParam() throws Exception { Assert.assertEquals(fieldParam.getIn(), "query"); - List sortValues = Arrays.asList("title", "authors", "publisher"); - Assert.assertTrue(((StringProperty) fieldParam.getItems()).getEnum().containsAll(sortValues)); + List filterValues = Arrays.asList("title", "authors", "publisher"); + Assert.assertTrue(((StringProperty) fieldParam.getItems()).getEnum().containsAll(filterValues)); Assert.assertEquals(fieldParam.getCollectionFormat(), "csv"); } @@ -558,6 +561,36 @@ public void testGlobalErrorResponses() throws Exception { } } + @Test + public void testSortParameter() { + @Entity + @Include(rootLevel = true) + class NothingToSort { + @Id + long name; + } + EntityDictionary entityDictionary = new EntityDictionary(Maps.newHashMap()); + + entityDictionary.bindEntity(NothingToSort.class); + Info info = new Info().title("Test Service").version("1.0"); + + SwaggerBuilder builder = new SwaggerBuilder(entityDictionary, info); + Swagger testSwagger = builder.build(); + + List params = testSwagger.getPaths().get("/nothingToSort").getGet().getParameters(); + + QueryParameter sortParam = (QueryParameter) params.stream() + .filter((param) -> param.getName().equals("sort")) + .findFirst() + .get(); + + Assert.assertEquals(sortParam.getIn(), "query"); + + List sortValues = Arrays.asList("id", "-id"); + Assert.assertEquals(((StringProperty) sortParam.getItems()).getEnum(), sortValues); + } + + /** * Verifies that the given property is of type 'Data' containing a reference to the given model. * @param property The property to check