5e32d847fb1128eaf2fe7d0e69468702c95c438e
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / UnlockSonePageTest.kt
1 package net.pterodactylus.sone.web.pages
2
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.sone.web.pages.UnlockSonePage
7 import net.pterodactylus.util.web.Method.POST
8 import org.junit.Test
9 import org.mockito.ArgumentMatchers.any
10 import org.mockito.Mockito.never
11 import org.mockito.Mockito.verify
12
13 /**
14  * Unit test for [UnlockSonePage].
15  */
16 class UnlockSonePageTest : WebPageTest() {
17
18         private val page = UnlockSonePage(template, webInterface)
19
20         override fun getPage() = page
21
22         @Test
23         fun `post request without sone redirects to return page`() {
24                 setMethod(POST)
25                 addHttpRequestPart("returnPage", "return.html")
26                 verifyRedirect("return.html") {
27                         verify(core, never()).unlockSone(any())
28                 }
29         }
30
31         @Test
32         fun `post request without invalid local sone does not unlock any sone and redirects to return page`() {
33                 setMethod(POST)
34                 addHttpRequestPart("returnPage", "return.html")
35                 addHttpRequestPart("sone", "invalid-sone")
36                 verifyRedirect("return.html") {
37                         verify(core, never()).unlockSone(any())
38                 }
39         }
40
41         @Test
42         fun `post request without remote sone does not unlock any sone and redirects to return page`() {
43                 setMethod(POST)
44                 addHttpRequestPart("returnPage", "return.html")
45                 addHttpRequestPart("sone", "remote-sone")
46                 addSone("remote-sone", mock<Sone>())
47                 verifyRedirect("return.html") {
48                         verify(core, never()).unlockSone(any())
49                 }
50         }
51
52         @Test
53         fun `post request with local sone unlocks sone and redirects to return page`() {
54                 setMethod(POST)
55                 addHttpRequestPart("returnPage", "return.html")
56                 addHttpRequestPart("sone", "local-sone")
57                 val sone = mock<Sone>().apply { whenever(isLocal).thenReturn(true) }
58                 addLocalSone("local-sone", sone)
59                 verifyRedirect("return.html") {
60                         verify(core).unlockSone(sone)
61                 }
62         }
63
64 }