From d76cef331d47f8bc37a7beede6f0f885f5887199 Mon Sep 17 00:00:00 2001 From: Alexander Pinchuk Date: Sun, 8 Dec 2019 22:03:00 +0300 Subject: [PATCH] #1267 - fix ArrayModel parsing to handle "uniqueItems" flag --- .../parser/util/SwaggerDeserializer.java | 7 ++- .../parser/util/SwaggerDeserializerTest.java | 48 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java index 11ab6e926f..a5999a33c8 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java @@ -793,7 +793,12 @@ public Model definition(ObjectNode node, String location, ParseResult result) { Integer minItems = getInteger("minItems", node, false, location, result); am.setMinItems(minItems); - + + Boolean uniqueItems = getBoolean("uniqueItems", node, false, location, result); + if(uniqueItems != null) { + am.setUniqueItems(uniqueItems); + } + // add xml specific information if available JsonNode xml = node.get("xml"); if(xml != null) { diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java index 95937eb647..5b2dae71a0 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/SwaggerDeserializerTest.java @@ -632,6 +632,54 @@ public void testArrayModelDefinition() { assertTrue(response instanceof MapProperty); } + @Test + public void testArrayModelWithUniqueItems() { + String json = "{\n" + + " \"swagger\": \"2.0\",\n" + + " \"info\": {\n" + + " \"title\": \"foo\"\n" + + " },\n" + + " \"paths\": {\n" + + " \"/test\": {\n" + + " \"post\": {\n" + + " \"parameters\": [\n" + + " {\n" + + " \"name\": \"AnyName\",\n" + + " \"in\": \"body\",\n" + + " \"schema\": {\n" + + " \"type\": \"array\",\n" + + " \"uniqueItems\": true,\n" + + " \"items\": {\n" + + " \"type\": \"string\"\n" + + " }\n" + + " }\n" + + " }\n" + + " ],\n" + + " \"responses\": {\n" + + " \"200\": {\n" + + " \"description\": \"ok\"\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + + SwaggerParser parser = new SwaggerParser(); + SwaggerDeserializationResult result = parser.readWithInfo(json); + Parameter parameter = result.getSwagger().getPath("/test") + .getPost().getParameters().get(0); + + assertTrue(parameter instanceof BodyParameter); + BodyParameter bodyParameter = (BodyParameter) parameter; + + Model model = bodyParameter.getSchema(); + assertTrue(model instanceof ArrayModel); + ArrayModel arrayModel = (ArrayModel) model; + assertNotNull(arrayModel.getUniqueItems()); + assertTrue(arrayModel.getUniqueItems()); + } + @Test public void testArrayQueryParam() throws Exception { String json = "{\n" +