✅ Fix comic site filter test
[rhynodge.git] / src / test / java / net / pterodactylus / rhynodge / filters / ComicSiteFilterTest.java
1 package net.pterodactylus.rhynodge.filters;
2
3 import static com.google.common.base.Optional.fromNullable;
4 import static java.util.Arrays.asList;
5 import static org.hamcrest.MatcherAssert.assertThat;
6 import static org.hamcrest.Matchers.contains;
7 import static org.hamcrest.Matchers.hasSize;
8 import static org.hamcrest.Matchers.is;
9
10 import java.util.Collections;
11 import java.util.List;
12
13 import net.pterodactylus.rhynodge.State;
14 import net.pterodactylus.rhynodge.states.ComicState;
15 import net.pterodactylus.rhynodge.states.ComicState.Comic;
16 import net.pterodactylus.rhynodge.states.ComicState.Strip;
17 import net.pterodactylus.rhynodge.states.FailedState;
18 import net.pterodactylus.rhynodge.states.HtmlState;
19
20 import com.google.common.base.Optional;
21 import org.jsoup.nodes.Document;
22 import org.junit.Test;
23
24 /**
25  * Unit test for {@link ComicSiteFilter}.
26  *
27  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
28  */
29 public class ComicSiteFilterTest {
30
31         @Test(expected = IllegalArgumentException.class)
32         public void comicSiteFilterRequiresHtmlState() {
33                 State state = new FailedState();
34                 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter(null, null, null);
35                 comicSiteFilter.filter(state);
36         }
37
38         @Test
39         public void htmlWithoutImagesIsNotRecognizedAsComic() {
40                 State state = new HtmlState("http://foo/", null);
41                 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", Collections.<String>emptyList(), null);
42                 State newState = comicSiteFilter.filter(state);
43                 assertThat(newState.success(), is(false));
44         }
45
46         @Test
47         public void everyUrlGetAStrip() {
48                 State state = new HtmlState("http://foo/", null);
49                 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", asList("url1.gif", "url2.gif", "url3.gif"), asList("Comment 1", "Comment 2"));
50                 State newState = comicSiteFilter.filter(state);
51                 assertThat(newState instanceof ComicState, is(true));
52                 ComicState comicState = (ComicState) newState;
53                 assertThat(comicState.comics(), hasSize(1));
54                 Comic comic = comicState.comics().get(0);
55                 assertThat(comic.strips(), contains(new Strip("http://foo/url1.gif", "Comment 1"), new Strip("http://foo/url2.gif", "Comment 2"), new Strip("http://foo/url3.gif", "")));
56         }
57
58         @Test(expected = IllegalStateException.class)
59         public void illegalUrlThrowsException() {
60                 State state = new HtmlState("http://foo/^", null);
61                 ComicSiteFilter comicSiteFilter = new TestComicSiteFilter("Title", asList("url1.gif"), Collections.<String>emptyList());
62                 comicSiteFilter.filter(state);
63         }
64
65         private static class TestComicSiteFilter extends ComicSiteFilter {
66
67                 private final String title;
68                 private final List<String> urls;
69                 private final List<String> comments;
70
71                 public TestComicSiteFilter(String title, List<String> urls, List<String> comments) {
72                         this.title = title;
73                         this.urls = urls;
74                         this.comments = comments;
75                 }
76
77                 @Override
78                 protected Optional<String> extractTitle(Document document) {
79                         return fromNullable(title);
80                 }
81
82                 @Override
83                 protected List<String> extractImageUrls(Document document) {
84                         return urls;
85                 }
86
87                 @Override
88                 protected List<String> extractImageComments(Document document) {
89                         return comments;
90                 }
91
92         }
93
94 }