package com.trywildcard.pair.model.article;
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.model.creator.Creator;
import com.trywildcard.pair.model.creator.CreatorBuilderTest;
import com.trywildcard.pair.model.media.Image;
import com.trywildcard.pair.util.DummyAbstractCard;
import com.trywildcard.pair.util.DummyArticle;
import com.trywildcard.pair.util.TestUtil;
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 10/4/14.
*/
public class ArticleCardTest {
ObjectMapper mapper = TestUtil.getObjectMapper();
private static DummyArticle dummyArticle;
private static DummyAbstractCard dummyAbstractCard;
@BeforeClass
public static void prepare() throws ParseException, CardBuilderException {
dummyArticle = new DummyArticle();
dummyAbstractCard = new DummyAbstractCard();
}
private void testMinimalCardAttributes(ArticleCard card){
assertEquals("Article Title should match", dummyArticle.title, card.getArticle().getTitle());
assertEquals("Article AbstractContent should match", dummyArticle.abstractContent, card.getArticle().getAbstractContent());
assertEquals("Web url should match", dummyArticle.webUrl, card.getWebUrl().toString());
}
private ArticleCard buildMinimalArticleCard() throws CardBuilderException {
Article article = new ArticleBuilder(dummyArticle.title, dummyArticle.abstractContent).build();
ArticleCard articleCard = new ArticleCard(article, dummyArticle.webUrl);
return articleCard;
}
@Test
public void testMinimalArticleCard() throws JsonProcessingException, CardBuilderException {
ArticleCard card = buildMinimalArticleCard();
testMinimalCardAttributes(card);
}
@Test
public void testMinimalArticleCardWithMinimalConstructor() throws CardBuilderException {
Article article = new ArticleBuilder(dummyArticle.title, dummyArticle.abstractContent).build();
ArticleCard articleCard = new ArticleCard(article, dummyArticle.webUrl);
testMinimalCardAttributes(articleCard);
}
@Test
public void testNullKeywords() throws CardBuilderException {
Article article = new ArticleBuilder(dummyArticle.title, dummyArticle.abstractContent).build();
ArticleCard articleCard = new ArticleCard(article, dummyArticle.webUrl);
articleCard.setKeywords(null);
assertNull(articleCard.getKeywords());
}
@Test
public void testExtensiveWriteAsJsonMethod() throws JsonParseException, JsonMappingException, IOException, CardBuilderException, ParseException {
String inputString = TestUtil.readResourceAsString("example_article_card.json");
ArticleCard fixtureCard = mapper.readValue(inputString, ArticleCard.class);
Article generatedArticle = buildExtensiveArticle();
ArticleCard generatedCard = new ArticleCard(generatedArticle, dummyArticle.webUrl);
generatedCard.setKeywords(dummyAbstractCard.keywords);
generatedCard.setAppLinkIos(dummyAbstractCard.appLinkIos);
generatedCard.setAppLinkAndroid(dummyAbstractCard.appLinkAndroid);
CreatorBuilderTest creatorTest = new CreatorBuilderTest();
creatorTest.prepare();
Creator generatedCreator = creatorTest.buildExtensiveCreator();
generatedCard.setCreator(generatedCreator);
assertEquals(mapper.writeValueAsString(fixtureCard), generatedCard.writeAsJsonString());
}
@Test
public void testMinimalWriteAsJsonMethod() throws JsonParseException, JsonMappingException, IOException, CardBuilderException {
String inputString = TestUtil.readResourceAsString("example_minimal_article_card.json");
ArticleCard fixtureCard = mapper.readValue(inputString, ArticleCard.class);
ArticleCard generatedCard = buildMinimalArticleCard();
assertEquals(mapper.writeValueAsString(fixtureCard), generatedCard.writeAsJsonString());
}
@Test(expected = CardBuilderException.class)
public void isInvalidWithNullArticle() throws CardBuilderException {
ArticleCard card = new ArticleCard(null, dummyArticle.webUrl);
}
@Test(expected = CardBuilderException.class)
public void isInvalidWithBothNull() throws CardBuilderException {
ArticleCard card = new ArticleCard(null, null);
}
@Test(expected = CardBuilderException.class)
public void isInvalidWithNullWebUrl() throws CardBuilderException {
Article article = new ArticleBuilder(dummyArticle.title, dummyArticle.abstractContent).build();
ArticleCard card = new ArticleCard(article, null);
}
private Article buildExtensiveArticle() throws CardBuilderException {
ArticleBuilder builder = new ArticleBuilder(dummyArticle.title, dummyArticle.abstractContent);
builder.isBreaking(dummyArticle.isBreaking);
builder.htmlContent(dummyArticle.htmlContent);
builder.author(dummyArticle.author);
builder.media(dummyArticle.image);
builder.publicationDate(dummyArticle.publicationDate);
builder.updatedDate(dummyArticle.updatedDate);
builder.source(dummyArticle.source);
return builder.build();
}
@Test
public void testBuildArticleCardWithWebUrl() throws CardBuilderException {
ArticleCard articleCard = new ArticleCard("http://grantland.com/the-triangle/j-r-in-cleveland-an-ohio-nightlife-guide-for-the-famous-nyc-party-animal/");
assertEquals(articleCard.getArticle().getTitle(), "J.R. in Cleveland: An Ohio Nightlife Guide for the Famous NYC Party Animal");
assertEquals(((Image) articleCard.getArticle().getMedia()).getImageUrl().toString(), "https://espngrantland.files.wordpress.com/2015/01/jr-smith.jpg?w=1200");
}
}