1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.Sone
4 import net.pterodactylus.sone.test.mock
5 import net.pterodactylus.sone.test.whenever
6 import net.pterodactylus.util.web.Method.GET
7 import net.pterodactylus.util.web.Method.POST
8 import org.hamcrest.MatcherAssert.assertThat
9 import org.hamcrest.Matchers.equalTo
11 import org.mockito.ArgumentMatchers
12 import org.mockito.ArgumentMatchers.any
13 import org.mockito.ArgumentMatchers.anyString
14 import org.mockito.Mockito.never
15 import org.mockito.Mockito.verify
18 * Unit test for [FollowSonePage].
20 class FollowSonePageTest : WebPageTest() {
22 private val page = FollowSonePage(template, webInterface)
24 override fun getPage() = page
27 fun `page returns correct path`() {
28 assertThat(page.path, equalTo("followSone.html"))
32 fun `page requires login`() {
33 assertThat(page.requiresLogin(), equalTo(true))
37 fun `page returns correct title`() {
38 whenever(l10n.getString("Page.FollowSone.Title")).thenReturn("follow sone page title")
39 assertThat(page.getPageTitle(freenetRequest), equalTo("follow sone page title"))
43 fun `get request does not redirect`() {
45 page.processTemplate(freenetRequest, templateContext)
49 fun `a single sone can be followed`() {
51 val sone = mock<Sone>()
52 addSone("sone-id", sone)
53 addHttpRequestParameter("sone", "sone-id")
54 addHttpRequestParameter("returnPage", "return.html")
55 verifyRedirect("return.html") {
56 verify(core).followSone(currentSone, "sone-id")
57 verify(core).markSoneKnown(sone)
62 fun `multiple sones can be followed`() {
64 val firstSone = mock<Sone>()
65 addSone("sone-id1", firstSone)
66 val secondSone = mock<Sone>()
67 addSone("sone-id2", secondSone)
68 addHttpRequestParameter("sone", "sone-id1,sone-id2")
69 addHttpRequestParameter("returnPage", "return.html")
70 verifyRedirect("return.html") {
71 verify(core).followSone(currentSone, "sone-id1")
72 verify(core).followSone(currentSone, "sone-id2")
73 verify(core).markSoneKnown(firstSone)
74 verify(core).markSoneKnown(secondSone)
79 fun `a non-existing sone is not followed`() {
81 addHttpRequestParameter("sone", "sone-id")
82 addHttpRequestParameter("returnPage", "return.html")
83 verifyRedirect("return.html") {
84 verify(core, never()).followSone(ArgumentMatchers.eq(currentSone), anyString())
85 verify(core, never()).markSoneKnown(any<Sone>())