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.Success(items)) `when`(feedRepository.getFeedItems("sub1")).thenReturn(stateFlow) viewModel.loadFeedItems("sub1") var receivedState: State>? = 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? = null viewModel.unreadCount.collect { state -> unreadCountState = state } assert(unreadCountState is State.Success) assert((unreadCountState as State.Success).data == 5) } }