FakeWatchlistRepository.kt
- package com.louisfn.somovie.test.fixtures.data.repository
- import androidx.paging.PagingConfig
- import androidx.paging.PagingData
- import com.louisfn.somovie.data.repository.WatchlistRepository
- import com.louisfn.somovie.domain.model.Movie
- import com.louisfn.somovie.test.shared.FakeWebServer
- import kotlinx.coroutines.flow.Flow
- import kotlinx.coroutines.flow.MutableStateFlow
- import kotlinx.coroutines.flow.map
- import kotlinx.coroutines.flow.update
- class FakeWatchlistRepository(
- var movies: List<Movie>,
- val fakeWebServer: FakeWebServer,
- ) : WatchlistRepository {
- private val watchlist = MutableStateFlow<List<Movie>>(emptyList())
- override suspend fun addToWatchlist(movieId: Long) {
- fakeWebServer.execute()
- val movie = movies.first { it.id == movieId }
- watchlist.update { it + movie }
- }
- override suspend fun removeFromWatchlist(movieId: Long) {
- fakeWebServer.execute()
- watchlist.update { list -> list.filter { it.id != movieId } }
- }
- override fun watchlistPagingChanges(
- pagingConfig: PagingConfig,
- cacheTimeout: Long,
- ): Flow<PagingData<Movie>> =
- watchlist
- .map(PagingData.Companion::from)
- }