Replace AbstractSoneCommand with Kotlin version
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / fcp / GetSoneCommandTest.kt
1 package net.pterodactylus.sone.fcp
2
3 import net.pterodactylus.sone.core.Core
4 import net.pterodactylus.sone.freenet.fcp.FcpException
5 import net.pterodactylus.sone.test.whenever
6 import org.hamcrest.MatcherAssert.assertThat
7 import org.hamcrest.Matchers.equalTo
8 import org.hamcrest.Matchers.nullValue
9 import org.junit.Test
10
11 /**
12  * Unit test for [GetSoneCommand].
13  */
14 class GetSoneCommandTest : SoneCommandTest() {
15
16         private val sone = createSone("SoneId", "Sone", "Sone", "#1", 1000).apply {
17                 profile.addField("Test").value = "true"
18                 profile.addField("More Test").value = "also true"
19         }
20
21         override fun createCommand(core: Core) = GetSoneCommand(core)
22
23         @Test
24         fun `command does not require write access`() {
25                 assertThat(command.requiresWriteAccess, equalTo(false))
26         }
27
28         @Test
29         fun `request without any parameters results in fcp exception`() {
30                 requestWithoutAnyParameterResultsInFcpException()
31         }
32
33         @Test
34         fun `request with empty Sone parameter results in fcp exception`() {
35                 requestWithEmptySoneParameterResultsInFcpException()
36         }
37
38         @Test
39         fun `request with invalid Sone parameter results in fcp exception`() {
40                 requestWithInvalidSoneParameterResultsInFcpException()
41         }
42
43         @Test
44         fun `request with valid Sone parameter results in response with Sone information`() {
45                 whenever(core.getSone("SoneId")).thenReturn(sone)
46                 parameters += "Sone" to "SoneId"
47                 val replyParameters = command.execute(parameters).replyParameters
48                 assertThat(replyParameters["Message"], equalTo("Sone"))
49                 assertThat(replyParameters.parseSone("Sone."), matchesSone(sone))
50                 assertThat(replyParameters["Sone.Followed"], nullValue())
51         }
52
53         @Test
54         fun `request with local sone parameter results in followed being true for friend sone`() {
55                 whenever(core.getSone("SoneId")).thenReturn(sone)
56                 whenever(core.getSone("LocalSone")).thenReturn(localSone)
57                 whenever(localSone.id).thenReturn("LocalSone")
58                 whenever(localSone.hasFriend("SoneId")).thenReturn(true)
59                 parameters += "Sone" to "SoneId"
60                 parameters += "LocalSone" to "LocalSone"
61                 val replyParameters = command.execute(parameters).replyParameters
62                 assertThat(replyParameters["Message"], equalTo("Sone"))
63                 assertThat(replyParameters.parseSone("Sone."), matchesSone(sone))
64                 assertThat(replyParameters["Sone.Followed"], equalTo("true"))
65         }
66         
67         @Test
68         fun `request with local sone parameter results in followed being false for non-friend sone`() {
69                 whenever(core.getSone("SoneId")).thenReturn(sone)
70                 whenever(core.getSone("LocalSone")).thenReturn(localSone)
71                 whenever(localSone.id).thenReturn("LocalSone")
72                 parameters += "Sone" to "SoneId"
73                 parameters += "LocalSone" to "LocalSone"
74                 val replyParameters = command.execute(parameters).replyParameters
75                 assertThat(replyParameters["Message"], equalTo("Sone"))
76                 assertThat(replyParameters.parseSone("Sone."), matchesSone(sone))
77                 assertThat(replyParameters["Sone.Followed"], equalTo("false"))
78         }
79
80         @Test
81         fun `request with remote sone as local sone parameter results in fcp exception`() {
82                 whenever(core.getSone("SoneId")).thenReturn(sone)
83                 whenever(core.getSone("RemoteSone")).thenReturn(remoteSone)
84                 whenever(localSone.id).thenReturn("RemoteSone")
85                 parameters += "Sone" to "SoneId"
86                 parameters += "LocalSone" to "RemoteSone"
87                 expectedException.expect(FcpException::class.java)
88                 command.execute(parameters)
89         }
90
91 }