package io.monokkel.core;
import com.google.common.collect.ImmutableList;
import io.monokkel.domain.PageData;
import io.monokkel.exceptions.ParseException;
import org.junit.Test;
import java.util.List;
import java.util.Set;
import static com.google.common.collect.ImmutableMap.of;
import static com.google.common.collect.Lists.newArrayList;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Created by tarjei on 12/10/14.
*/
public abstract class JsonSupportTest<T extends JsonSupport> {
@Test
public void shouldParse_withJSONContentAndUrl_expectTrue() throws ParseException {
JsonSupport jsonTransformer = createJsonParser();
final ImmutableList<String> typeList = ImmutableList.of("application/json");
final boolean should = jsonTransformer.shouldParse("http://url", "{\"id\":\"10154342691895026\",\"name\":\"Magne Nielsen\"}", typeList);
assertEquals(true, should);
}
@Test
public void shouldParse_withTypeTextHtml_expectFalse() throws ParseException {
JsonSupport jsonTransformer = createJsonParser();
final ImmutableList<String> typeList = ImmutableList.of("test/html");
final boolean should = jsonTransformer.shouldParse("http://url", "<html><body></body></html>", typeList);
assertEquals(false, should);
}
@Test
public void parse_withExampleContentAndPathToNextUrl_expectUrlsToBeContainedInList() throws ParseException {
final String expectedUrl = "https://graph.facebook.com/me/albums?limit=25&after=Mjk5MzE1MzcwMjQxMDc2";
JsonSupport jsonTransformer = createJsonParserWithUrlExtract(newArrayList("comments", "paging", "next"));
Long timestamp = -1L;
String url = "";
String response = createJSONFaceBookPost();
final PageData parse = jsonTransformer.parse(url, response, timestamp);
final Set<String> urlSet = parse.getUrlSet();
assertTrue(urlSet.contains(expectedUrl));
}
@Test
public void parse_withExampleContentAndPathToANoneExistingPath_expectNoUrlsToBeFoundInTheList() throws ParseException {
JsonSupport jsonTransformer = createJsonParserWithUrlExtract(newArrayList("comments", "paging", "non"));
Long timestamp = -1L;
String url = "";
String response = createJSONFaceBookPost();
final PageData parse = jsonTransformer.parse(url, response, timestamp);
final Set<String> urlSet = parse.getUrlSet();
assertTrue(urlSet.isEmpty());
}
protected abstract T createJsonParserWithUrlExtract(List<String> strings);
protected abstract T createJsonParser();
protected String createJSONFaceBookPost() {
return "{\n" +
" \"id\": \"270220003150613_299282336911046\", \n" +
" \"from\": {\n" +
" \"id\": \"10154342691895026\", \n" +
" \"name\": \"Magne Nielsen\"\n" +
" }, \n" +
" \"to\": {\n" +
" \"data\": [\n" +
" {\n" +
" \"location\": \"ARØY\", \n" +
" \"name\": \"ARØY-JAM\", \n" +
" \"start_time\": \"2014-07-12\", \n" +
" \"timezone\": \"Europe/Oslo\", \n" +
" \"id\": \"270220003150613\"\n" +
" }\n" +
" ]\n" +
" }, \n" +
" \"message\": \"Da begynner 12 juli å nærme seg . For å få litt oversikt er det fint at de som vet om noen som kommer og ikke står her sier i fra. Vi kommer til å lage mat og må vite litt hvor mange som kommer. kommer til å kreve ett lite bidrag i forhold til maten, men det kommer vi tilbake til.\\n\\nEllers ser programmet foreløpig slik ut:\\n\\nTorsdag - Fredag opprigging:(for de frivillige)\\n12:00 Lørdag: begynne å hente tilreisende Valle/Kragerø\\n16:00: Marius sin fantastiske kjøttsuppe.\\n19:00: Begynner vi å spille litt.\\n23:00: Akustisk.. den høye lyden må slåes av kl 23:00\", \n" +
" \"actions\": [\n" +
" {\n" +
" \"name\": \"Comment\", \n" +
" \"link\": \"https://www.facebook.com/270220003150613/posts/299282336911046\"\n" +
" }, \n" +
" {\n" +
" \"name\": \"Like\", \n" +
" \"link\": \"https://www.facebook.com/270220003150613/posts/299282336911046\"\n" +
" }\n" +
" ], \n" +
" \"privacy\": {\n" +
" \"value\": \"\"\n" +
" }, \n" +
" \"type\": \"status\", \n" +
" \"created_time\": \"2014-06-24T11:29:11+0000\", \n" +
" \"updated_time\": \"2014-06-25T05:48:03+0000\", \n" +
" \"likes\": {\n" +
" \"data\": [\n" +
" {\n" +
" \"id\": \"10154288941605416\", \n" +
" \"name\": \"Helene Huseland\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"10152493983690609\", \n" +
" \"name\": \"Tanja Thuve Jørgensen\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"10154269823385284\", \n" +
" \"name\": \"Christian Lund\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"10154369218105454\", \n" +
" \"name\": \"Jeanette Sivertsen\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"4249285766022\", \n" +
" \"name\": \"Jon A Pettersen\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"10154303281280599\", \n" +
" \"name\": \"Elisabeth Nilsen\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"10154307308380273\", \n" +
" \"name\": \"Marius Bodvin\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"663510335\", \n" +
" \"name\": \"Tarjei Romtveit\"\n" +
" }, \n" +
" {\n" +
" \"id\": \"10202987601184816\", \n" +
" \"name\": \"Kim Andre Næss\"\n" +
" }\n" +
" ], \n" +
" \"paging\": {\n" +
" \"cursors\": {\n" +
" \"after\": \"MTAyMDI5ODc2MDExODQ4MTY=\", \n" +
" \"before\": \"MTAxNTQyODg5NDE2MDU0MTY=\"\n" +
" }\n" +
" }\n" +
" }, \n" +
" \"comments\": {\n" +
" \"data\": [\n" +
" {\n" +
" \"id\": \"299315370241076\", \n" +
" \"from\": {\n" +
" \"id\": \"10154303281280599\", \n" +
" \"name\": \"Elisabeth Nilsen\"\n" +
" }, \n" +
" \"message\": \"Min bror Kim kommer (sier han)\", \n" +
" \"can_remove\": true, \n" +
" \"created_time\": \"2014-06-24T13:04:27+0000\", \n" +
" \"like_count\": 1, \n" +
" \"user_likes\": false\n" +
" }, \n" +
" {\n" +
" \"id\": \"299335196905760\", \n" +
" \"from\": {\n" +
" \"id\": \"10154303281280599\", \n" +
" \"name\": \"Elisabeth Nilsen\"\n" +
" }, \n" +
" \"message\": \"Skal jeg høre med Maria og pramila? Løwenborg?\", \n" +
" \"can_remove\": true, \n" +
" \"created_time\": \"2014-06-24T13:36:46+0000\", \n" +
" \"like_count\": 0, \n" +
" \"user_likes\": false\n" +
" }, \n" +
" {\n" +
" \"id\": \"299335450239068\", \n" +
" \"from\": {\n" +
" \"id\": \"10154303281280599\", \n" +
" \"name\": \"Elisabeth Nilsen\"\n" +
" }, \n" +
" \"message\": \"Kim hva med lilleFredrik?\", \n" +
" \"message_tags\": [\n" +
" {\n" +
" \"id\": \"10202987601184816\", \n" +
" \"name\": \"Kim\", \n" +
" \"type\": \"user\", \n" +
" \"offset\": 0, \n" +
" \"length\": 3\n" +
" }\n" +
" ], \n" +
" \"can_remove\": true, \n" +
" \"created_time\": \"2014-06-24T13:37:30+0000\", \n" +
" \"like_count\": 0, \n" +
" \"user_likes\": false\n" +
" }, \n" +
" {\n" +
" \"id\": \"299340540238559\", \n" +
" \"from\": {\n" +
" \"id\": \"10202987601184816\", \n" +
" \"name\": \"Kim Andre Næss\"\n" +
" }, \n" +
" \"message\": \"skal jeg høre med han?\", \n" +
" \"can_remove\": true, \n" +
" \"created_time\": \"2014-06-24T13:52:05+0000\", \n" +
" \"like_count\": 0, \n" +
" \"user_likes\": false\n" +
" }, \n" +
" {\n" +
" \"id\": \"299345746904705\", \n" +
" \"from\": {\n" +
" \"id\": \"10154303281280599\", \n" +
" \"name\": \"Elisabeth Nilsen\"\n" +
" }, \n" +
" \"message\": \"Ja :)\", \n" +
" \"can_remove\": true, \n" +
" \"created_time\": \"2014-06-24T14:04:41+0000\", \n" +
" \"like_count\": 0, \n" +
" \"user_likes\": false\n" +
" }, \n" +
" {\n" +
" \"id\": \"299613670211246\", \n" +
" \"from\": {\n" +
" \"id\": \"10154342691895026\", \n" +
" \"name\": \"Magne Nielsen\"\n" +
" }, \n" +
" \"message\": \"kan jo høre med de..\", \n" +
" \"can_remove\": true, \n" +
" \"created_time\": \"2014-06-25T05:48:03+0000\", \n" +
" \"like_count\": 0, \n" +
" \"user_likes\": false\n" +
" }\n" +
" ], \n" +
" \"paging\": {\n" +
" \"cursors\": {\n" +
" \"after\": \"Mjk5NjEzNjcwMjExMjQ2\", \n" +
" \"before\": \"Mjk5MzE1MzcwMjQxMDc2\"\n" +
" }\n" +
" \"previous\": \"https://graph.facebook.com/me/albums?limit=25&before=Mjk5NjEzNjcwMjExMjQ2\"\n" +
" \"next\": \"https://graph.facebook.com/me/albums?limit=25&after=Mjk5MzE1MzcwMjQxMDc2\" " +
" }\n" +
" }\n" +
"}";
}
}