package org.resthub.web; import com.fasterxml.jackson.core.type.TypeReference; import org.fest.assertions.api.Assertions; import org.resthub.web.exception.SerializationException; import org.resthub.web.model.Book; import org.resthub.web.model.SampleResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.List; public class JsonSerializationHelperTest { private String json = "{\"id\": 123, \"name\": \"Albert\", \"description\": \"desc\"}"; @Test public void testSerialization() { SampleResource r = new SampleResource(); r.setId(123L); r.setName("Albert"); r.setDescription("desc"); String result = JsonHelper.serialize(r); Assertions.assertThat(result).contains("123"); Assertions.assertThat(result).contains("Albert"); Assertions.assertThat(result).contains("desc"); } @Test public void testDeserialization() { SampleResource r = JsonHelper.deserialize(json, SampleResource.class); Assertions.assertThat(r.getId()).isEqualTo(123); Assertions.assertThat(r.getName()).isEqualTo("Albert"); Assertions.assertThat(r.getDescription()).isEqualTo("desc"); } @Test(expectedExceptions = SerializationException.class) public void testInvalidDeserialization() { JsonHelper.deserialize("Invalid content", SampleResource.class); } @Test public void testPageSerialization() { SampleResource r1 = new SampleResource(); r1.setId(123L); r1.setName("Albert"); r1.setDescription("desc"); SampleResource r2 = new SampleResource(); r2.setId(123L); r2.setName("Albert"); r2.setDescription("desc"); List<SampleResource> l = new ArrayList<SampleResource>(); l.add(r1); l.add(r2); Page<SampleResource> p = new PageImpl<SampleResource>(l); String result = JsonHelper.serialize(p); Assertions.assertThat(result).contains("Albert"); } @Test public void testFullListJson() { List<Book> books = new ArrayList<Book>(); books.add(new Book("Effective Java","Joshua Bloch","Essential",1)); books.add(new Book("Breaking Dawn","Stephanie Myers","Just terrible",2)); String serializedBooks = JsonHelper.serialize(books); List<Book> unserializedBooks = JsonHelper.deserialize(serializedBooks, new TypeReference<List<Book>>() {}); Assertions.assertThat(unserializedBooks).isNotNull(); Assertions.assertThat(unserializedBooks.size()).isEqualTo(2); Assertions.assertThat(unserializedBooks).contains(new Book("Effective Java","Joshua Bloch","Essential",1)); Assertions.assertThat(unserializedBooks).contains(new Book("Breaking Dawn","Stephanie Myers","Just terrible",2)); } @Test public void testSummaryListJson() { List<Book> books = new ArrayList<Book>(); books.add(new Book("Effective Java","Joshua Bloch","Essential",1)); books.add(new Book("Breaking Dawn","Stephanie Myers","Just terrible",2)); String serializedBooks = JsonHelper.serialize(books, Book.SummaryView.class); List<Book> unserializedBooks = JsonHelper.deserialize(serializedBooks, new TypeReference<List<Book>>() {}); Assertions.assertThat(unserializedBooks).isNotNull(); Assertions.assertThat(unserializedBooks.size()).isEqualTo(2); Assertions.assertThat(unserializedBooks).contains(new Book(null,"Joshua Bloch",null,1)); Assertions.assertThat(unserializedBooks).contains(new Book(null,"Stephanie Myers",null,2)); } @Test public void testSummaryJson() { Book book = new Book("Effective Java","Joshua Bloch","Essential",1); String serializedBook = JsonHelper.serialize(book, Book.SummaryView.class); Book unserializedBook = JsonHelper.deserialize(serializedBook, Book.class); Assertions.assertThat(unserializedBook).isNotNull().isEqualTo(new Book(null,"Joshua Bloch",null,1)); } @Test public void testFullJson() { Book book = new Book("Effective Java","Joshua Bloch","Essential",1); String serializedBook = JsonHelper.serialize(book); Book unserializedBook = JsonHelper.deserialize(serializedBook, Book.class); Assertions.assertThat(unserializedBook).isNotNull().isEqualTo(new Book("Effective Java","Joshua Bloch","Essential",1)); } }