import com.google.common.base.Optional.absent
import com.google.common.base.Optional.of
-import freenet.support.SimpleFieldSet
import net.pterodactylus.sone.core.Core
import net.pterodactylus.sone.data.Post
-import net.pterodactylus.sone.data.Sone
-import net.pterodactylus.sone.freenet.fcp.FcpException
import net.pterodactylus.sone.test.mock
import net.pterodactylus.sone.test.whenever
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.equalTo
import org.hamcrest.Matchers.notNullValue
-import org.junit.Before
-import org.junit.Rule
import org.junit.Test
-import org.junit.rules.ExpectedException
-import org.mockito.ArgumentMatchers.anyString
/**
* Unit test for [CreatePostCommand].
*/
-class CreatePostCommandTest {
+class CreatePostCommandTest : SoneCommandTest() {
- @Rule @JvmField val expectedException = ExpectedException.none()
- private val core = mock<Core>()
- private val command = CreatePostCommand(core)
-
- private val parameters = SimpleFieldSet(true)
- private val localSone = mock<Sone>().apply {
- whenever(isLocal).thenReturn(true)
- }
- private val remoteSone = mock<Sone>()
-
- @Before
- fun setupCore() {
- whenever(core.getSone(anyString())).thenReturn(absent())
- }
+ override fun createCommand(core: Core) = CreatePostCommand(core)
@Test
fun `command requires write access`() {
- assertThat(command.requiresWriteAccess(), equalTo(true))
+ assertThat(command.requiresWriteAccess, equalTo(true))
}
@Test
fun `request without any parameters results in fcp exception`() {
- expectedException.expect(FcpException::class.java)
- command.execute(parameters, null, null)
+ requestWithoutAnyParameterResultsInFcpException()
}
@Test
- fun `request with empty sone parameter results in fcp exception`() {
- parameters.putSingle("Sone", null)
- expectedException.expect(FcpException::class.java)
- command.execute(parameters, null, null)
+ fun `request with empty Sone parameter results in fcp exception`() {
+ requestWithEmptySoneParameterResultsInFcpException()
}
@Test
fun `request with invalid Sone parameter results in fcp exception`() {
- parameters.putSingle("Sone", "InvalidSoneId")
- expectedException.expect(FcpException::class.java)
- command.execute(parameters, null, null)
+ requestWithInvalidSoneParameterResultsInFcpException()
}
@Test
fun `request with valid remote Sone parameter results in fcp exception`() {
- parameters.putSingle("Sone", "RemoteSoneId")
- whenever(core.getSone("RemoteSoneId")).thenReturn(of(remoteSone))
- expectedException.expect(FcpException::class.java)
- command.execute(parameters, null, null)
+ requestWithValidRemoteSoneParameterResultsInFcpException()
}
@Test
fun `request without text results in fcp exception`() {
- parameters.putSingle("Sone", "LocalSoneId")
- whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
- expectedException.expect(FcpException::class.java)
- command.execute(parameters, null, null)
+ parameters += "Sone" to "LocalSoneId"
+ whenever(core.getSone("LocalSoneId")).thenReturn(localSone)
+ executeCommandAndExpectFcpException()
}
@Test
fun `request with text creates post`() {
- parameters.putSingle("Sone", "LocalSoneId")
- parameters.putSingle("Text", "Test")
- whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
+ parameters += "Sone" to "LocalSoneId"
+ parameters += "Text" to "Test"
+ whenever(core.getSone("LocalSoneId")).thenReturn(localSone)
val post = mock<Post>().apply { whenever(id).thenReturn("PostId") }
- whenever(core.createPost(localSone, absent(), "Test")).thenReturn(post)
- val response = command.execute(parameters, null, null)
+ whenever(core.createPost(localSone, null, "Test")).thenReturn(post)
+ val response = command.execute(parameters)
assertThat(response.replyParameters.get("Message"), equalTo("PostCreated"))
assertThat(response.replyParameters.get("Post"), equalTo("PostId"))
}
@Test
fun `request with invalid recipient results in fcp exception`() {
- parameters.putSingle("Sone", "LocalSoneId")
- parameters.putSingle("Text", "Test")
- parameters.putSingle("Recipient", "InvalidSoneId")
- whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
- expectedException.expect(FcpException::class.java)
- command.execute(parameters, null, null)
+ parameters += "Sone" to "LocalSoneId"
+ parameters += "Text" to "Test"
+ parameters += "Recipient" to "InvalidSoneId"
+ whenever(core.getSone("LocalSoneId")).thenReturn(localSone)
+ executeCommandAndExpectFcpException()
}
@Test
fun `request with recipient the same as the sender returns an error response`() {
- parameters.putSingle("Sone", "LocalSoneId")
- parameters.putSingle("Text", "Test")
- parameters.putSingle("Recipient", "LocalSoneId")
- whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
- val response = command.execute(parameters, null, null)
+ parameters += "Sone" to "LocalSoneId"
+ parameters += "Text" to "Test"
+ parameters += "Recipient" to "LocalSoneId"
+ whenever(core.getSone("LocalSoneId")).thenReturn(localSone)
+ val response = command.execute(parameters)
assertThat(response.replyParameters["Message"], equalTo("Error"))
assertThat(response.replyParameters["ErrorMessage"], notNullValue())
}
@Test
fun `request with text and recipient creates post`() {
- parameters.putSingle("Sone", "LocalSoneId")
- parameters.putSingle("Text", "Test")
- parameters.putSingle("Recipient", "RemoteSoneId")
- whenever(core.getSone("LocalSoneId")).thenReturn(of(localSone))
- whenever(core.getSone("RemoteSoneId")).thenReturn(of(remoteSone))
+ parameters += "Sone" to "LocalSoneId"
+ parameters += "Text" to "Test"
+ parameters += "Recipient" to "RemoteSoneId"
+ whenever(core.getSone("LocalSoneId")).thenReturn(localSone)
+ whenever(core.getSone("RemoteSoneId")).thenReturn(remoteSone)
val post = mock<Post>().apply { whenever(id).thenReturn("PostId") }
- whenever(core.createPost(localSone, of(remoteSone), "Test")).thenReturn(post)
- val response = command.execute(parameters, null, null)
+ whenever(core.createPost(localSone, remoteSone, "Test")).thenReturn(post)
+ val response = command.execute(parameters)
assertThat(response.replyParameters.get("Message"), equalTo("PostCreated"))
assertThat(response.replyParameters.get("Post"), equalTo("PostId"))
}