Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import com.divinelink.core.network.media.model.details.toDomainMedia
import com.divinelink.core.network.media.model.details.videos.VideoResultsApi
import com.divinelink.core.network.media.model.details.videos.VideosResponseApi
import com.divinelink.core.network.media.model.details.watchlist.AddToWatchlistRequestApi
import com.divinelink.core.network.media.model.details.watchlist.SubmitOnAccountResponse
import com.divinelink.core.network.media.model.details.watchlist.TMDBResponse
import com.divinelink.core.network.media.model.rating.AddRatingRequestApi
import com.divinelink.core.network.media.model.rating.DeleteRatingRequestApi
import com.divinelink.core.network.media.model.states.AccountMediaDetailsRequestApi
Expand Down Expand Up @@ -470,7 +470,7 @@ class ProdDetailsRepositoryTest {
)

val response = Result.success(
SubmitOnAccountResponse(
TMDBResponse(
statusMessage = "Success",
statusCode = 1,
success = true,
Expand Down Expand Up @@ -499,7 +499,7 @@ class ProdDetailsRepositoryTest {
)

val response = Result.success(
SubmitOnAccountResponse(
TMDBResponse(
statusMessage = "Success",
statusCode = 1,
success = true,
Expand Down Expand Up @@ -528,7 +528,7 @@ class ProdDetailsRepositoryTest {
)

val response = Result.success(
SubmitOnAccountResponse(
TMDBResponse(
statusMessage = "Success",
statusCode = 1,
success = true,
Expand Down Expand Up @@ -559,7 +559,7 @@ class ProdDetailsRepositoryTest {
)

val response = Result.success(
SubmitOnAccountResponse(
TMDBResponse(
statusMessage = "Success",
statusCode = 1,
success = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,32 @@ import com.divinelink.core.datastore.auth.observedTmdbSession
import com.divinelink.core.fixtures.model.account.AccountDetailsFactory
import com.divinelink.core.fixtures.model.jellyseerr.JellyseerrProfileFactory
import com.divinelink.core.fixtures.model.session.TmdbSessionFactory
import com.divinelink.core.testing.dao.TestMediaDao
import com.divinelink.core.testing.factories.datastore.auth.JellyseerrAccountFactory
import com.divinelink.core.testing.storage.TestSavedStateStorage
import io.kotest.matchers.shouldBe
import kotlinx.coroutines.test.runTest
import kotlin.test.BeforeTest
import kotlin.test.Test

class ProdAuthRepositoryTest {

private lateinit var savedStateStorage: TestSavedStateStorage
private lateinit var repository: ProdAuthRepository
private lateinit var mediaDao: TestMediaDao

@BeforeTest
fun setup() {
mediaDao = TestMediaDao()
}

@Test
fun `test isJellyseerrEnabled is true when accountIds are not empty`() = runTest {
savedStateStorage = TestSavedStateStorage()
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

repository.isJellyseerrEnabled.test {
awaitItem() shouldBe false
Expand All @@ -38,7 +49,10 @@ class ProdAuthRepositoryTest {
@Test
fun `test jellyseerrAccounts`() = runTest {
savedStateStorage = TestSavedStateStorage()
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

repository.jellyseerrCredentials.test {
awaitItem() shouldBe emptyMap()
Expand All @@ -60,7 +74,10 @@ class ProdAuthRepositoryTest {
@Test
fun `test updateJellyseerrCredentials sets jellyseerrCredentials`() = runTest {
savedStateStorage = TestSavedStateStorage()
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

savedStateStorage.savedState.value.jellyseerrCredentials shouldBe emptyMap()

Expand All @@ -74,7 +91,10 @@ class ProdAuthRepositoryTest {
@Test
fun `test updateJellyseerrProfile sets jellyseerrProfile`() = runTest {
savedStateStorage = TestSavedStateStorage()
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

savedStateStorage.savedState.value.jellyseerrCredentials shouldBe emptyMap()

Expand Down Expand Up @@ -102,7 +122,10 @@ class ProdAuthRepositoryTest {
),
selectedJellyseerrAccountId = "account_1",
)
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

savedStateStorage.savedState.value.jellyseerrCredentials shouldBe mapOf(
"account_1" to JellyseerrAccountFactory.cup10(),
Expand Down Expand Up @@ -139,7 +162,10 @@ class ProdAuthRepositoryTest {
savedStateStorage = TestSavedStateStorage(
tmdbAccount = null,
)
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

repository.tmdbAccount.test {
awaitItem() shouldBe null
Expand All @@ -155,7 +181,10 @@ class ProdAuthRepositoryTest {
savedStateStorage = TestSavedStateStorage(
tmdbAccount = null,
)
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

savedStateStorage.observedTmdbSession.test {
awaitItem() shouldBe null
Expand All @@ -172,7 +201,10 @@ class ProdAuthRepositoryTest {
tmdbAccount = AccountDetailsFactory.Pinkman(),
tmdbSession = TmdbSessionFactory.full(),
)
repository = ProdAuthRepository(savedStateStorage)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

savedStateStorage.savedState.test {
awaitItem() shouldBe InitialSavedState.copy(
Expand All @@ -185,4 +217,24 @@ class ProdAuthRepositoryTest {
awaitItem() shouldBe InitialSavedState
}
}

@Test
fun `test clear tmdb session also clears episode ratings`() = runTest {
savedStateStorage = TestSavedStateStorage(
tmdbAccount = AccountDetailsFactory.Pinkman(),
tmdbSession = TmdbSessionFactory.full(),
)
repository = ProdAuthRepository(
savedStateStorage = savedStateStorage,
mediaDao = mediaDao.mock,
)

savedStateStorage.savedState.test {
awaitItem()
repository.clearTMDBSession()
awaitItem()

mediaDao.verifyClearAllEpisodeRatings()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,17 @@ interface AccountRepository {
accountId: String,
sessionId: String,
): Flow<Result<PaginationData<MediaItem.Media>>>

suspend fun submitEpisodeRating(
showId: Int,
season: Int,
number: Int,
rating: Int,
): Result<Unit>

suspend fun deleteEpisodeRating(
showId: Int,
season: Int,
number: Int,
): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.divinelink.core.data.account

import com.divinelink.core.database.media.dao.MediaDao
import com.divinelink.core.model.PaginationData
import com.divinelink.core.model.exception.AppException
import com.divinelink.core.model.media.MediaItem
import com.divinelink.core.model.media.MediaType
import com.divinelink.core.network.account.service.AccountService
Expand Down Expand Up @@ -118,4 +119,43 @@ class ProdAccountRepository(

Result.success(data.copy(list = updatedTvShows))
}

override suspend fun deleteEpisodeRating(
showId: Int,
season: Int,
number: Int,
): Result<Unit> = remote.clearEpisodeRating(
showId = showId,
season = season,
number = number,
).map { response ->
if (response.success) {
dao.deleteEpisodeRating(
showId = showId,
season = season,
number = number,
)
Result.success(Unit)
} else {
Result.failure<Exception>(AppException.Unknown())
}
}

override suspend fun submitEpisodeRating(
showId: Int,
season: Int,
number: Int,
rating: Int,
): Result<Unit> = remote.submitEpisodeRating(
showId = showId,
season = season,
number = number,
rating = rating,
).map { response ->
if (response.success) {
Result.success(Unit)
} else {
Result.failure(AppException.Unknown())
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.divinelink.core.data.auth

import com.divinelink.core.database.media.dao.MediaDao
import com.divinelink.core.datastore.auth.SavedState
import com.divinelink.core.datastore.auth.SavedStateStorage
import com.divinelink.core.datastore.auth.isJellyseerrEnabled
Expand All @@ -12,7 +13,10 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map

class ProdAuthRepository(private val savedStateStorage: SavedStateStorage) : AuthRepository {
class ProdAuthRepository(
private val savedStateStorage: SavedStateStorage,
private val mediaDao: MediaDao,
) : AuthRepository {

override val isJellyseerrEnabled: Flow<Boolean> = savedStateStorage
.savedState
Expand Down Expand Up @@ -67,6 +71,7 @@ class ProdAuthRepository(private val savedStateStorage: SavedStateStorage) : Aut
}

override suspend fun clearTMDBSession() {
mediaDao.clearAllEpisodeRatings()
savedStateStorage.clearTMDBSession()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,13 @@ interface MediaRepository {
showId: Int,
season: Int,
): Result<List<Int>>

fun insertEpisodeRating(
showId: Int,
season: Int,
number: Int,
rating: Int,
): Result<Unit>

fun clearAllEpisodeRatings(): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -365,12 +365,10 @@ class ProdMediaRepository(
episode = number,
season = season,
),
flowOf(
dao.fetchEpisode(
showId = showId,
episodeNumber = number,
seasonNumber = season,
),
dao.fetchEpisode(
showId = showId,
episodeNumber = number,
seasonNumber = season,
),
) { guestStars, episode ->
runCatching {
Expand All @@ -379,4 +377,22 @@ class ProdMediaRepository(
)
}
}

override fun insertEpisodeRating(
showId: Int,
season: Int,
number: Int,
rating: Int,
): Result<Unit> = runCatching {
dao.insertEpisodeRating(
showId = showId,
season = season,
number = number,
rating = rating,
)
}

override fun clearAllEpisodeRatings(): Result<Unit> = runCatching {
dao.clearAllEpisodeRatings()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ interface MediaDao {
showId: Int,
episodeNumber: Int,
seasonNumber: Int,
): Episode
): Flow<Episode>

fun fetchEpisodes(
showId: Int,
Expand All @@ -101,4 +101,19 @@ interface MediaDao {
season: Int,
showId: Int,
): List<Int>

fun insertEpisodeRating(
showId: Int,
season: Int,
number: Int,
rating: Int,
)

fun deleteEpisodeRating(
showId: Int,
season: Int,
number: Int,
)

fun clearAllEpisodeRatings()
}
Loading