Some checks failed
CI - Multi-Platform Native / Build iOS (RSSuper) (push) Has been cancelled
CI - Multi-Platform Native / Build macOS (push) Has been cancelled
CI - Multi-Platform Native / Build Android (push) Has been cancelled
CI - Multi-Platform Native / Build Linux (push) Has been cancelled
CI - Multi-Platform Native / Build Summary (push) Has been cancelled
74 lines
2.2 KiB
Kotlin
74 lines
2.2 KiB
Kotlin
package com.rssuper.viewmodel
|
|
|
|
import com.rssuper.repository.FeedRepository
|
|
import com.rssuper.state.State
|
|
import kotlinx.coroutines.flow.MutableStateFlow
|
|
import kotlinx.coroutines.test.runTest
|
|
import org.junit.Before
|
|
import org.junit.Test
|
|
import org.mockito.Mockito
|
|
import org.mockito.Mockito.`when`
|
|
|
|
class FeedViewModelTest {
|
|
|
|
private lateinit var feedRepository: FeedRepository
|
|
private lateinit var viewModel: FeedViewModel
|
|
|
|
@Before
|
|
fun setup() {
|
|
feedRepository = Mockito.mock(FeedRepository::class.java)
|
|
viewModel = FeedViewModel(feedRepository)
|
|
}
|
|
|
|
@Test
|
|
fun testInitialState() = runTest {
|
|
var stateEmitted = false
|
|
viewModel.feedState.collect { state ->
|
|
assert(state is State.Idle)
|
|
stateEmitted = true
|
|
}
|
|
assert(stateEmitted)
|
|
}
|
|
|
|
@Test
|
|
fun testLoadFeedItems() = runTest {
|
|
val items = listOf(
|
|
com.rssuper.database.entities.FeedItemEntity(
|
|
id = "1",
|
|
subscriptionId = "sub1",
|
|
title = "Test Item",
|
|
published = java.util.Date()
|
|
)
|
|
)
|
|
|
|
val stateFlow = MutableStateFlow<State<List<com.rssuper.database.entities.FeedItemEntity>>>(State.Success(items))
|
|
`when`(feedRepository.getFeedItems("sub1")).thenReturn(stateFlow)
|
|
|
|
viewModel.loadFeedItems("sub1")
|
|
|
|
var receivedState: State<List<com.rssuper.database.entities.FeedItemEntity>>? = null
|
|
viewModel.feedState.collect { state ->
|
|
receivedState = state
|
|
}
|
|
|
|
assert(receivedState is State.Success)
|
|
assert((receivedState as State.Success).data == items)
|
|
}
|
|
|
|
@Test
|
|
fun testMarkAsRead() = runTest {
|
|
`when`(feedRepository.markAsRead("1", true)).thenReturn(1)
|
|
`when`(feedRepository.getUnreadCount("sub1")).thenReturn(5)
|
|
|
|
viewModel.markAsRead("1", true)
|
|
|
|
var unreadCountState: State<Int>? = null
|
|
viewModel.unreadCount.collect { state ->
|
|
unreadCountState = state
|
|
}
|
|
|
|
assert(unreadCountState is State.Success)
|
|
assert((unreadCountState as State.Success).data == 5)
|
|
}
|
|
}
|