Skip to content

Commit

Permalink
adding send message tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ouchadam committed Nov 6, 2022
1 parent 623639d commit aab6170
Showing 1 changed file with 139 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package app.dapk.st.engine

import app.dapk.st.matrix.common.RichText
import app.dapk.st.matrix.message.MessageService
import app.dapk.st.matrix.message.internal.ImageContentReader
import fake.FakeLocalIdFactory
import fixture.aRoomMember
import fixture.aRoomOverview
import fixture.anEventId
import io.mockk.every
import io.mockk.mockk
import org.junit.Test
import test.delegateReturn
import test.runExpectTest
import java.time.Clock

private const val AN_IMAGE_URI = ""
private val AN_IMAGE_META = ImageContentReader.ImageContent(
height = 50,
width = 100,
size = 1000L,
fileName = "a file name",
mimeType = "image/png"
)
private const val A_CURRENT_TIME = 2000L
private const val A_LOCAL_ID = "a local id"
private val A_ROOM_OVERVIEW = aRoomOverview(
isEncrypted = true
)
private val A_REPLY = SendMessage.TextMessage.Reply(
aRoomMember(),
originalMessage = "",
anEventId(),
timestampUtc = 7000
)
private const val A_TEXT_MESSAGE_CONTENT = "message content"

class SendMessageUseCaseTest {

private val fakeMessageService = FakeMessageService()
private val fakeLocalIdFactory = FakeLocalIdFactory().apply { givenCreate().returns(A_LOCAL_ID) }
private val fakeImageContentReader = FakeImageContentReader()
private val fakeClock = FakeClock().apply { givenMillis().returns(A_CURRENT_TIME) }

private val useCase = SendMessageUseCase(
fakeMessageService,
fakeLocalIdFactory.instance,
fakeImageContentReader,
fakeClock.instance
)

@Test
fun `when sending image message, then schedules message`() = runExpectTest {
fakeImageContentReader.givenMeta(AN_IMAGE_URI).returns(AN_IMAGE_META)
val expectedImageMessage = createExpectedImageMessage(A_ROOM_OVERVIEW)
fakeMessageService.expect { it.scheduleMessage(expectedImageMessage) }

useCase.send(SendMessage.ImageMessage(uri = AN_IMAGE_URI), A_ROOM_OVERVIEW)

verifyExpects()
}

@Test
fun `when sending text message, then schedules message`() = runExpectTest {
val expectedTextMessage = createExpectedTextMessage(A_ROOM_OVERVIEW, A_TEXT_MESSAGE_CONTENT, reply = null)
fakeMessageService.expect { it.scheduleMessage(expectedTextMessage) }

useCase.send(
SendMessage.TextMessage(
content = A_TEXT_MESSAGE_CONTENT,
reply = null,
),
A_ROOM_OVERVIEW
)

verifyExpects()
}

@Test
fun `given a reply, when sending text message, then schedules message with reply`() = runExpectTest {
val expectedTextMessage = createExpectedTextMessage(A_ROOM_OVERVIEW, A_TEXT_MESSAGE_CONTENT, reply = A_REPLY)
fakeMessageService.expect { it.scheduleMessage(expectedTextMessage) }

useCase.send(
SendMessage.TextMessage(
content = A_TEXT_MESSAGE_CONTENT,
reply = A_REPLY,
),
A_ROOM_OVERVIEW
)

verifyExpects()
}


private fun createExpectedImageMessage(roomOverview: RoomOverview) = MessageService.Message.ImageMessage(
MessageService.Message.Content.ImageContent(
uri = AN_IMAGE_URI,
MessageService.Message.Content.ImageContent.Meta(
height = AN_IMAGE_META.height,
width = AN_IMAGE_META.width,
size = AN_IMAGE_META.size,
fileName = AN_IMAGE_META.fileName,
mimeType = AN_IMAGE_META.mimeType,
)
),
roomId = roomOverview.roomId,
sendEncrypted = roomOverview.isEncrypted,
localId = A_LOCAL_ID,
timestampUtc = A_CURRENT_TIME,
)

private fun createExpectedTextMessage(roomOverview: RoomOverview, messageContent: String, reply: SendMessage.TextMessage.Reply?) =
MessageService.Message.TextMessage(
content = MessageService.Message.Content.TextContent(RichText.of(messageContent)),
roomId = roomOverview.roomId,
sendEncrypted = roomOverview.isEncrypted,
localId = A_LOCAL_ID,
timestampUtc = A_CURRENT_TIME,
reply = reply?.let {
MessageService.Message.TextMessage.Reply(
author = it.author,
originalMessage = RichText.of(it.originalMessage),
replyContent = messageContent,
eventId = it.eventId,
timestampUtc = it.timestampUtc,
)
}
)
}

class FakeImageContentReader : ImageContentReader by mockk() {
fun givenMeta(uri: String) = every { meta(uri) }.delegateReturn()
}

class FakeClock {
val instance = mockk<Clock>()
fun givenMillis() = every { instance.millis() }.delegateReturn()
}

0 comments on commit aab6170

Please sign in to comment.