FakeWatchlistRepository.kt

  1. package com.louisfn.somovie.test.fixtures.data.repository

  2. import androidx.paging.PagingConfig
  3. import androidx.paging.PagingData
  4. import com.louisfn.somovie.data.repository.WatchlistRepository
  5. import com.louisfn.somovie.domain.model.Movie
  6. import com.louisfn.somovie.test.shared.FakeWebServer
  7. import kotlinx.coroutines.flow.Flow
  8. import kotlinx.coroutines.flow.MutableStateFlow
  9. import kotlinx.coroutines.flow.map
  10. import kotlinx.coroutines.flow.update

  11. class FakeWatchlistRepository(
  12.     var movies: List<Movie>,
  13.     val fakeWebServer: FakeWebServer,
  14. ) : WatchlistRepository {

  15.     private val watchlist = MutableStateFlow<List<Movie>>(emptyList())

  16.     override suspend fun addToWatchlist(movieId: Long) {
  17.         fakeWebServer.execute()

  18.         val movie = movies.first { it.id == movieId }
  19.         watchlist.update { it + movie }
  20.     }

  21.     override suspend fun removeFromWatchlist(movieId: Long) {
  22.         fakeWebServer.execute()

  23.         watchlist.update { list -> list.filter { it.id != movieId } }
  24.     }

  25.     override fun watchlistPagingChanges(
  26.         pagingConfig: PagingConfig,
  27.         cacheTimeout: Long,
  28.     ): Flow<PagingData<Movie>> =
  29.         watchlist
  30.             .map(PagingData.Companion::from)
  31. }