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" + "}"; } }