diff --git a/partial-response/src/main/java/com/iluwatar/partialresponse/FieldJsonMapper.java b/partial-response/src/main/java/com/iluwatar/partialresponse/FieldJsonMapper.java index cb153e062..62ce17320 100644 --- a/partial-response/src/main/java/com/iluwatar/partialresponse/FieldJsonMapper.java +++ b/partial-response/src/main/java/com/iluwatar/partialresponse/FieldJsonMapper.java @@ -25,6 +25,7 @@ package com.iluwatar.partialresponse; import java.lang.reflect.Field; +import java.util.StringJoiner; /** * Map a video to json. @@ -39,18 +40,15 @@ public class FieldJsonMapper { * @return json of required fields from video */ public String toJson(Video video, String[] fields) throws Exception { - var json = new StringBuilder().append("{"); + var json = new StringJoiner(",", "{", "}"); var i = 0; var fieldsLength = fields.length; while (i < fieldsLength) { - json.append(getString(video, Video.class.getDeclaredField(fields[i]))); - if (i != fieldsLength - 1) { - json.append(","); - } + json.add(getString(video, Video.class.getDeclaredField(fields[i]))); i++; } - json.append("}"); + return json.toString(); } diff --git a/partial-response/src/main/java/com/iluwatar/partialresponse/Video.java b/partial-response/src/main/java/com/iluwatar/partialresponse/Video.java index 3f410a109..c0bcac7b2 100644 --- a/partial-response/src/main/java/com/iluwatar/partialresponse/Video.java +++ b/partial-response/src/main/java/com/iluwatar/partialresponse/Video.java @@ -43,7 +43,7 @@ public record Video(Integer id, String title, Integer length, String description + "\"length\": " + length + "," + "\"description\": \"" + description + "\"," + "\"director\": \"" + director + "\"," - + "\"language\": \"" + language + "\"," + + "\"language\": \"" + language + "\"" + "}"; } } diff --git a/partial-response/src/test/java/com/iluwatar/partialresponse/VideoResourceTest.java b/partial-response/src/test/java/com/iluwatar/partialresponse/VideoResourceTest.java index b54dc8712..1b6593d1a 100644 --- a/partial-response/src/test/java/com/iluwatar/partialresponse/VideoResourceTest.java +++ b/partial-response/src/test/java/com/iluwatar/partialresponse/VideoResourceTest.java @@ -63,7 +63,7 @@ class VideoResourceTest { var actualDetails = resource.getDetails(1); var expectedDetails = "{\"id\": 1,\"title\": \"Avatar\",\"length\": 178,\"description\": " - + "\"epic science fiction film\",\"director\": \"James Cameron\",\"language\": \"English\",}"; + + "\"epic science fiction film\",\"director\": \"James Cameron\",\"language\": \"English\"}"; Assertions.assertEquals(expectedDetails, actualDetails); } @@ -78,4 +78,17 @@ class VideoResourceTest { Assertions.assertEquals(expectedDetails, actualFieldsDetails); } -} \ No newline at end of file + + @Test + void shouldAllSpecifiedFieldsInformationOfVideo() throws Exception { + var fields = new String[]{"id", "title", "length", "description", "director", "language"}; + + var expectedDetails = "{\"id\": 1,\"title\": \"Avatar\",\"length\": 178,\"description\": " + + "\"epic science fiction film\",\"director\": \"James Cameron\",\"language\": \"English\"}"; + Mockito.when(fieldJsonMapper.toJson(any(Video.class), eq(fields))).thenReturn(expectedDetails); + + var actualFieldsDetails = resource.getDetails(1, fields); + + Assertions.assertEquals(expectedDetails, actualFieldsDetails); + } +}