restructure
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
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
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user