package com.trywildcard.pair.model.media; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.trywildcard.pair.exception.CardBuilderException; import com.trywildcard.pair.util.DummyAbstractCard; import com.trywildcard.pair.util.DummyImage; import com.trywildcard.pair.util.TestUtil; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import java.io.IOException; import java.text.ParseException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; /** * Created by karthiksenthil on 1/22/15. */ public class ImageCardTest { ObjectMapper mapper = TestUtil.getObjectMapper(); private static DummyImage dummyImage; private static DummyAbstractCard dummyAbstractCard; @BeforeClass public static void prepare() throws ParseException, CardBuilderException { dummyImage = new DummyImage(); dummyAbstractCard = new DummyAbstractCard(); } private void testMinimalImageCardAttributes(ImageCard imageCard) { Assert.assertEquals("Name should match", dummyImage.imageUrl, imageCard.getMedia().getImageUrl().toString()); } private ImageCard buildMinimalImageCard() throws CardBuilderException { Image image = new Image(dummyImage.imageUrl); ImageCard imageCard = new ImageCard(image); return imageCard; } @Test public void testMinimalVideoCard() throws JsonProcessingException, CardBuilderException { ImageCard card = buildMinimalImageCard(); testMinimalImageCardAttributes(card); } @Test public void testNullKeywords() throws CardBuilderException { ImageCard card = buildMinimalImageCard(); card.setKeywords(null); assertNull(card.getKeywords()); } public void testNullAppLinkIos() throws CardBuilderException { ImageCard card = buildMinimalImageCard(); card.setAppLinkIos(null); assertNull(card.getAppLinkIos()); } public void testNullAppLinkAndroid() throws CardBuilderException { ImageCard card = buildMinimalImageCard(); card.setAppLinkAndroid(null); assertNull(card.getAppLinkAndroid()); } @Test public void testMinimalImageCardWithMinimalConstructor() throws CardBuilderException { Image image = new Image(dummyImage.imageUrl); ImageCard imageCard = new ImageCard(image); testMinimalImageCardAttributes(imageCard); } @Test public void testExtensiveWriteAsJsonMethod() throws JsonParseException, JsonMappingException, IOException, CardBuilderException { String inputString = TestUtil.readResourceAsString("example_image_card.json"); ImageCard fixtureCard = mapper.readValue(inputString, ImageCard.class); Image generatedImage = buildExtensiveImage(); ImageCard generatedCard = new ImageCard(generatedImage, dummyImage.webUrl); generatedCard.setKeywords(dummyAbstractCard.keywords); generatedCard.setAppLinkIos(dummyAbstractCard.appLinkIos); generatedCard.setAppLinkAndroid(dummyAbstractCard.appLinkAndroid); assertEquals(mapper.writeValueAsString(fixtureCard), generatedCard.writeAsJsonString()); } @Test public void testMinimalWriteAsJsonMethod() throws JsonParseException, JsonMappingException, IOException, CardBuilderException { String inputString = TestUtil.readResourceAsString("example_minimal_image_card.json"); ImageCard fixtureCard = mapper.readValue(inputString, ImageCard.class); ImageCard generatedCard = buildMinimalImageCard(); assertEquals(mapper.writeValueAsString(fixtureCard), generatedCard.writeAsJsonString()); } @Test(expected = CardBuilderException.class) public void isInvalidWithNullImage() throws CardBuilderException { ImageCard card = new ImageCard(null, dummyImage.webUrl); } @Test(expected = CardBuilderException.class) public void isInvalidWithBothNull() throws CardBuilderException { ImageCard card = new ImageCard(null, null); } public void isInvalidWithNullWebUrl() throws CardBuilderException { Image image = new Image(dummyImage.imageUrl); ImageCard card = new ImageCard(image, null); assertEquals(card.getErrors().size(), 1); } private Image buildExtensiveImage() throws CardBuilderException { Image image = new Image(dummyImage.imageUrl); image.setImageCaption(dummyImage.imageCaption); image.setWidth(dummyImage.imageWidth); image.setHeight(dummyImage.imageHeight); image.setPublicationDate(dummyImage.publicationDate); image.setAuthor(dummyImage.author); image.setTitle(dummyImage.title); return image; } }