Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/release-artefact.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ jobs:
- name: Build Distribution Zip
env:
USE_LOCAL_MOCKS: "false"
SERVER_URL: ${{ secrets.SERVER_URL }}
CLIENT_KEY: ${{ secrets.CLIENT_KEY }}
SERVER_URL: ${{ secrets.SUPABASE_SERVER_URL }}
CLIENT_KEY: ${{ secrets.SUPABASE_CLIENT_KEY }}
run: ./gradlew distZip --no-daemon

- name: Extract Version
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ kotlin.code.style=official
# Determines whether this project should use hardcoded mocks or Supabase-CLI.
# See https://github.com/PPartisan/Roky/wiki/Project-Setup
USE_LOCAL_MOCKS=true
version=0.1.2
version=0.1.0
17 changes: 0 additions & 17 deletions src/main/kotlin/chatroom/viewmessages/DisplayableMessages.kt

This file was deleted.

3 changes: 1 addition & 2 deletions src/main/kotlin/chatroom/viewmessages/ViewMessages.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ val viewMessagesModule =
ViewMessagesPresenter(
windowScope = get<ChatroomWindow>().windowScope,
dispatchers = get(),
read = get(),
read = get<ChatRepositories>().readMessages(),
channel = get<ChatRepositories>().subscribeMessages(),
)
}
scoped { DisplayableMessages(get()) }
}
}
17 changes: 12 additions & 5 deletions src/main/kotlin/chatroom/viewmessages/ViewMessagesPresenter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,33 @@ import arch.Presenter
import arch.RokyDispatchers
import chatroom.viewmessages.ViewMessagesViewState.Messages
import chatroom.viewmessages.ViewMessagesViewState.NoMessages
import chatserver.MessageResult
import chatserver.ReadChatRepository
import chatserver.SubscribeChatRepository
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class ViewMessagesPresenter(
private val windowScope: CoroutineScope,
private val read: DisplayableMessages,
private val read: ReadChatRepository<MessageResult>,
private val channel: SubscribeChatRepository,
dispatchers: RokyDispatchers,
) : Presenter<ViewMessagesView>(dispatchers) {
override fun onAttach(view: ViewMessagesView) {
view.show(NoMessages)
windowScope.launch(dispatchers.io) {
read().map(::Messages).collect { message ->
withContext(dispatchers.main) {
withView { it.show(message) }
read.observe()
.filter { it.isOk }
.map { it.item.lastOrNull()?.let { "${it.userId}: ${it.message}" }.orEmpty() }
.map(::Messages)
.collect { message ->
withContext(dispatchers.main) {
withView { it.show(message) }
}
}
}
}
channel.subscribe()
}
Expand Down
87 changes: 0 additions & 87 deletions src/test/kotlin/chatroom/viewmessages/DisplayableMessagesTest.kt

This file was deleted.

36 changes: 30 additions & 6 deletions src/test/kotlin/chatroom/viewmessages/ViewMessagesPresenterTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package chatroom.viewmessages
import arch.RokyDispatchers
import chatroom.viewmessages.ViewMessagesViewState.Messages
import chatroom.viewmessages.ViewMessagesViewState.NoMessages
import chatserver.Message
import chatserver.MessageResult
import chatserver.ReadChatRepository
import chatserver.SubscribeChatRepository
import io.mockk.*
import kotlinx.coroutines.CoroutineScope
Expand All @@ -19,7 +22,7 @@ import kotlin.test.assertTrue
@OptIn(ExperimentalCoroutinesApi::class)
class ViewMessagesPresenterTest {
private lateinit var channel: SubscribeChatRepository
private lateinit var read: DisplayableMessages
private lateinit var read: ReadChatRepository<MessageResult>
private lateinit var scope: CoroutineScope
private lateinit var view: ViewMessagesView
private lateinit var presenter: ViewMessagesPresenter
Expand All @@ -28,7 +31,7 @@ class ViewMessagesPresenterTest {
fun setUp() {
channel = mockk(relaxed = true)
read = mockk()
every { read() } returns flowOf()
every { read.observe() } returns flowOf()
view = mockk(relaxed = true)
view = mockk(relaxed = true)
val dispatchers: RokyDispatchers =
Expand All @@ -52,7 +55,8 @@ class ViewMessagesPresenterTest {
@Test
fun `given message exist, when attached, then show message`() =
runTest(dispatcher) {
every { read() } returns flowOf("Kai: Biggleswad ez badd")
val messages = listOf(Message("Kai", "Biggleswad ez badd"))
every { read.observe() } returns flowOf(MessageResult.ok(messages))
presenter.attach(view)
advanceUntilIdle()
verifyOrder {
Expand All @@ -61,6 +65,24 @@ class ViewMessagesPresenterTest {
}
}

@Test
fun `given message exist, and message is not ok, when attached, then show nothing`() =
runTest(dispatcher) {
every { read.observe() } returns flowOf(MessageResult.fail(RuntimeException("Connection with server failed")))
presenter.attach(view)
advanceUntilIdle()
verifyOrder {
view.show(NoMessages)
}
verify(exactly = 0) {
view.show(
withArg {
assertTrue { it is Messages }
},
)
}
}

@Test
fun `when attached, then subscribe to chat messages`() =
runTest(dispatcher) {
Expand All @@ -79,10 +101,12 @@ class ViewMessagesPresenterTest {
@Test
fun `given two messages exist, when attached, then show two messages`() =
runTest(dispatcher) {
every { read() } returns
val messageOne = listOf(Message("Kai", "Pokemon good"))
val messageTwo = listOf(Message("Allie", "Barry is the best"))
every { read.observe() } returns
flowOf(
"Kai: Pokemon good",
"Allie: Barry is the best",
MessageResult.ok(messageOne),
MessageResult.ok(messageOne + messageTwo),
)

presenter.attach(view)
Expand Down
Loading