package net.pterodactylus.sone.database.memory
-import com.google.common.base.*
-import com.google.common.base.Optional.*
+import com.google.common.util.concurrent.RateLimiter
import net.pterodactylus.sone.data.*
import net.pterodactylus.sone.data.impl.*
import net.pterodactylus.sone.test.*
import org.mockito.Mockito.*
import org.mockito.invocation.*
import java.util.Arrays.*
-import java.util.UUID.*
import kotlin.test.*
/**
class MemoryDatabaseTest {
private val configuration = deepMock<Configuration>()
- private val memoryDatabase = MemoryDatabase(configuration)
+ private val memoryDatabase = MemoryDatabase(configuration, RateLimiter.create(0.001))
private val sone = mock<Sone>()
@BeforeTest
@Test
fun `post recipients are detected correctly`() {
- val postWithRecipient = createPost(of(RECIPIENT_ID))
+ val postWithRecipient = createPost(id = "p1", recipient = createRemoteSone(RECIPIENT_ID))
memoryDatabase.storePost(postWithRecipient)
- val postWithoutRecipient = createPost(absent())
+ val postWithoutRecipient = createPost(id = "p2", recipient = null)
memoryDatabase.storePost(postWithoutRecipient)
- assertThat(memoryDatabase.getDirectedPosts(RECIPIENT_ID), contains(postWithRecipient))
- }
-
- private fun createPost(recipient: Optional<String>): Post {
- val postWithRecipient = mock<Post>()
- whenever(postWithRecipient.id).thenReturn(randomUUID().toString())
- whenever(postWithRecipient.sone).thenReturn(sone)
- whenever(postWithRecipient.recipientId).thenReturn(recipient)
- return postWithRecipient
+ assertThat(memoryDatabase.getDirectedPosts(RECIPIENT_ID), contains(isPost(isRecipientId = equalTo(RECIPIENT_ID))))
}
@Test
fun `post replies are managed correctly`() {
- val firstPost = createPost(absent())
+ val firstPost = createPost()
val firstPostFirstReply = createPostReply(id = "p1r1", post = firstPost, time = 1000L)
- val secondPost = createPost(absent())
+ val secondPost = createPost()
val secondPostFirstReply = createPostReply(id = "p2r1", post = secondPost, time = 1000L)
val secondPostSecondReply = createPostReply(id = "p2r2", post = secondPost, time = 2000L)
memoryDatabase.storePost(firstPost)
}
@Test
- @Dirty("the rate limiter should be mocked")
fun `setting post replies as knows twice in a row only saves the database once`() {
prepareConfigurationValues()
val postReply = mock<PostReply>()