Remove unnecessary type parameters
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / NewPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.Post
4 import net.pterodactylus.sone.data.PostReply
5 import net.pterodactylus.sone.test.getInstance
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.utils.Pagination
9 import net.pterodactylus.sone.utils.asOptional
10 import net.pterodactylus.sone.web.baseInjector
11 import org.hamcrest.MatcherAssert.assertThat
12 import org.hamcrest.Matchers.contains
13 import org.hamcrest.Matchers.containsInAnyOrder
14 import org.hamcrest.Matchers.equalTo
15 import org.hamcrest.Matchers.notNullValue
16 import org.junit.Before
17 import org.junit.Test
18 import java.util.Arrays.asList
19
20 /**
21  * Unit test for [NewPage].
22  */
23 class NewPageTest: WebPageTest(::NewPage) {
24
25         @Before
26         fun setupNumberOfPostsPerPage() {
27                 webInterface.core.preferences.postsPerPage = 5
28         }
29
30         @Test
31         fun `page returns correct path`() {
32                 assertThat(page.path, equalTo("new.html"))
33         }
34
35         @Test
36         fun `page does not require login`() {
37                 assertThat(page.requiresLogin(), equalTo(false))
38         }
39
40         @Test
41         fun `page returns correct title`() {
42                 addTranslation("Page.New.Title", "new page title")
43                 assertThat(page.getPageTitle(freenetRequest), equalTo("new page title"))
44         }
45
46         @Test
47         fun `posts are not duplicated when they come from both new posts and new replies notifications`() {
48                 val extraPost = mock<Post>().withTime(2000)
49                 val posts = asList(mock<Post>().withTime(1000), mock<Post>().withTime(3000))
50                 val postReplies = asList(mock<PostReply>(), mock())
51                 whenever(postReplies[0].post).thenReturn(posts[0].asOptional())
52                 whenever(postReplies[1].post).thenReturn(extraPost.asOptional())
53                 whenever(webInterface.getNewPosts(currentSone)).thenReturn(posts)
54                 whenever(webInterface.getNewReplies(currentSone)).thenReturn(postReplies)
55
56                 verifyNoRedirect {
57                         val renderedPosts = templateContext.get<List<Post>>("posts", List::class.java)
58                         assertThat(renderedPosts, containsInAnyOrder(posts[1], extraPost, posts[0]))
59                 }
60         }
61
62         private fun Post.withTime(time: Long) = apply { whenever(this.time).thenReturn(time) }
63
64         @Test
65         @Suppress("UNCHECKED_CAST")
66         fun `posts are paginated properly`() {
67                 webInterface.core.preferences.postsPerPage = 2
68                 val posts = listOf(mock<Post>().withTime(2000), mock<Post>().withTime(3000), mock<Post>().withTime(1000))
69                 whenever(webInterface.getNewPosts(currentSone)).thenReturn(posts)
70                 verifyNoRedirect {
71                         assertThat((templateContext["pagination"] as Pagination<Post>).items, contains(posts[1], posts[0]))
72                 }
73         }
74
75         @Test
76         @Suppress("UNCHECKED_CAST")
77         fun `posts are paginated properly on second page`() {
78                 webInterface.core.preferences.postsPerPage = 2
79                 addHttpRequestParameter("page", "1")
80                 val posts = listOf(mock<Post>().withTime(2000), mock<Post>().withTime(3000), mock<Post>().withTime(1000))
81                 whenever(webInterface.getNewPosts(currentSone)).thenReturn(posts)
82                 verifyNoRedirect {
83                         assertThat((templateContext["pagination"] as Pagination<Post>).items, contains(posts[2]))
84                 }
85         }
86
87         @Test
88         fun `page can be created by dependency injection`() {
89             assertThat(baseInjector.getInstance<NewPage>(), notNullValue())
90         }
91
92 }