#631 - Partial Response : Implement Field to json conversion
This commit is contained in:
		| @@ -24,6 +24,8 @@ | ||||
|  | ||||
| package com.iluwatar.partialresponse; | ||||
|  | ||||
| import java.lang.reflect.Field; | ||||
|  | ||||
| /** | ||||
|  * Map a video to json | ||||
|  */ | ||||
| @@ -34,7 +36,25 @@ public class FieldJsonMapper { | ||||
|    * @param fields fields information to get | ||||
|    * @return json of required fields from video | ||||
|    */ | ||||
|   public String toJson(Video video, String[] fields) { | ||||
|     return null; | ||||
|   public String toJson(Video video, String[] fields) throws Exception { | ||||
|     StringBuilder json = new StringBuilder().append("{"); | ||||
|  | ||||
|     for (int i = 0, fieldsLength = fields.length; i < fieldsLength; i++) { | ||||
|       json.append(getString(video, Video.class.getDeclaredField(fields[i]))); | ||||
|       if (i != fieldsLength - 1) { | ||||
|         json.append(","); | ||||
|       } | ||||
|     } | ||||
|     json.append("}"); | ||||
|     return json.toString(); | ||||
|   } | ||||
|  | ||||
|   private String getString(Video video, Field declaredField) throws IllegalAccessException { | ||||
|     declaredField.setAccessible(true); | ||||
|     Object value = declaredField.get(video); | ||||
|     if (declaredField.get(video) instanceof Integer) { | ||||
|       return "\"" + declaredField.getName() + "\"" + ": " + value; | ||||
|     } | ||||
|     return "\"" + declaredField.getName() + "\"" + ": " + "\"" + value.toString() + "\""; | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -59,7 +59,7 @@ public class Video { | ||||
|   @Override | ||||
|   public String toString() { | ||||
|     return "{" | ||||
|         + "\"id\": \"" + id + "\"," | ||||
|         + "\"id\": " + id + "," | ||||
|         + "\"title\": \"" + title + "\"," | ||||
|         + "\"length\": " + length + "," | ||||
|         + "\"description\": \"" + description + "\"," | ||||
|   | ||||
| @@ -48,7 +48,7 @@ public class VideoResource { | ||||
|    * @param fields fields to get information about | ||||
|    * @return json of specified fields of particular video by id | ||||
|    */ | ||||
|   public String getDetails(Integer id, String... fields) { | ||||
|   public String getDetails(Integer id, String... fields) throws Exception { | ||||
|     if (fields.length == 0) { | ||||
|       return videos.get(id).toString(); | ||||
|     } | ||||
|   | ||||
| @@ -0,0 +1,53 @@ | ||||
| /* | ||||
|  * The MIT License (MIT) | ||||
|  * | ||||
|  * Copyright (c) 2017 Gopinath Langote | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| package com.iluwatar.partialresponse; | ||||
|  | ||||
| import org.junit.Before; | ||||
| import org.junit.Test; | ||||
|  | ||||
| import static org.junit.Assert.assertEquals; | ||||
|  | ||||
| /** | ||||
|  * tests {@link FieldJsonMapper}. | ||||
|  */ | ||||
| public class FieldJsonMapperTest { | ||||
|   private FieldJsonMapper mapper; | ||||
|  | ||||
|   @Before | ||||
|   public void setUp() { | ||||
|     mapper = new FieldJsonMapper(); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void shouldReturnJsonForSpecifiedFieldsInVideo() throws Exception { | ||||
|     String[] fields = new String[]{"id", "title", "length"}; | ||||
|     Video video = new Video(2, "Godzilla Resurgence", 120, "Action & drama movie|", "Hideaki Anno", "Japanese"); | ||||
|  | ||||
|     String jsonFieldResponse = mapper.toJson(video, fields); | ||||
|  | ||||
|     String expectedDetails = "{\"id\": 2,\"title\": \"Godzilla Resurgence\",\"length\": 120}"; | ||||
|     assertEquals(expectedDetails, jsonFieldResponse); | ||||
|   } | ||||
| } | ||||
| @@ -58,19 +58,19 @@ public class VideoResourceTest { | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void shouldGiveVideoDetailsById() { | ||||
|   public void shouldGiveVideoDetailsById() throws Exception { | ||||
|     String actualDetails = resource.getDetails(1); | ||||
|  | ||||
|     String expectedDetails = "{\"id\": \"1\",\"title\": \"Avatar\",\"length\": 178,\"description\": " | ||||
|     String expectedDetails = "{\"id\": 1,\"title\": \"Avatar\",\"length\": 178,\"description\": " | ||||
|         + "\"epic science fiction film\",\"director\": \"James Cameron\",\"language\": \"English\",}"; | ||||
|     assertEquals(expectedDetails, actualDetails); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   public void shouldGiveSpecifiedFieldsInformationOfVideo() { | ||||
|     String[] fields = new String[]{"title", "length"}; | ||||
|   public void shouldGiveSpecifiedFieldsInformationOfVideo() throws Exception { | ||||
|     String[] fields = new String[]{"id", "title", "length"}; | ||||
|  | ||||
|     String expectedDetails = "{\"id\": \"1\",\"title\": \"Avatar\",\"length\": 178}"; | ||||
|     String expectedDetails = "{\"id\": 1,\"title\": \"Avatar\",\"length\": 178}"; | ||||
|     when(fieldJsonMapper.toJson(any(Video.class), eq(fields))).thenReturn(expectedDetails); | ||||
|  | ||||
|     String actualFieldsDetails = resource.getDetails(2, fields); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user