From ef0cdfd320267576cd2232ca1263ac57f14e520f Mon Sep 17 00:00:00 2001 From: Alexandru Cristescu Date: Wed, 22 Mar 2023 16:31:43 +0000 Subject: [PATCH] Fixed unit tests --- .../java/io/zenandroid/onlinego/di/Modules.kt | 41 ++++++++++++++++--- .../screens/face2face/FaceToFaceViewModel.kt | 18 ++++---- .../face2face/FaceToFaceViewModelTest.kt | 6 +++ 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/zenandroid/onlinego/di/Modules.kt b/app/src/main/java/io/zenandroid/onlinego/di/Modules.kt index a1c34258..c7f447f2 100644 --- a/app/src/main/java/io/zenandroid/onlinego/di/Modules.kt +++ b/app/src/main/java/io/zenandroid/onlinego/di/Modules.kt @@ -1,25 +1,54 @@ package io.zenandroid.onlinego.di +import androidx.preference.PreferenceManager import androidx.room.Room +import com.google.firebase.crashlytics.FirebaseCrashlytics import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import io.reactivex.schedulers.Schedulers import io.zenandroid.onlinego.OnlineGoApplication import io.zenandroid.onlinego.data.db.Database -import io.zenandroid.onlinego.data.ogs.* -import io.zenandroid.onlinego.data.repositories.* +import io.zenandroid.onlinego.data.ogs.HTTPConnectionFactory +import io.zenandroid.onlinego.data.ogs.OGSBooleanJsonAdapter +import io.zenandroid.onlinego.data.ogs.OGSInstantJsonAdapter +import io.zenandroid.onlinego.data.ogs.OGSRestAPI +import io.zenandroid.onlinego.data.ogs.OGSRestService +import io.zenandroid.onlinego.data.ogs.OGSWebSocketService +import io.zenandroid.onlinego.data.repositories.ActiveGamesRepository +import io.zenandroid.onlinego.data.repositories.AutomatchRepository +import io.zenandroid.onlinego.data.repositories.BotsRepository +import io.zenandroid.onlinego.data.repositories.ChallengesRepository +import io.zenandroid.onlinego.data.repositories.ChatRepository +import io.zenandroid.onlinego.data.repositories.ClockDriftRepository +import io.zenandroid.onlinego.data.repositories.FinishedGamesRepository +import io.zenandroid.onlinego.data.repositories.JosekiRepository +import io.zenandroid.onlinego.data.repositories.PlayersRepository +import io.zenandroid.onlinego.data.repositories.ServerNotificationsRepository +import io.zenandroid.onlinego.data.repositories.SettingsRepository +import io.zenandroid.onlinego.data.repositories.TutorialsRepository +import io.zenandroid.onlinego.data.repositories.UserSessionRepository import io.zenandroid.onlinego.mvi.Store import io.zenandroid.onlinego.playstore.PlayStoreService -import io.zenandroid.onlinego.ui.screens.face2face.FaceToFaceScreen import io.zenandroid.onlinego.ui.screens.face2face.FaceToFaceViewModel import io.zenandroid.onlinego.ui.screens.game.GameViewModel -import io.zenandroid.onlinego.ui.screens.joseki.* +import io.zenandroid.onlinego.ui.screens.joseki.HotTrackMiddleware +import io.zenandroid.onlinego.ui.screens.joseki.JosekiExplorerReducer +import io.zenandroid.onlinego.ui.screens.joseki.JosekiExplorerState +import io.zenandroid.onlinego.ui.screens.joseki.JosekiExplorerViewModel +import io.zenandroid.onlinego.ui.screens.joseki.LoadPositionMiddleware +import io.zenandroid.onlinego.ui.screens.joseki.TriggerLoadingMiddleware import io.zenandroid.onlinego.ui.screens.learn.LearnViewModel import io.zenandroid.onlinego.ui.screens.localai.AiGameReducer import io.zenandroid.onlinego.ui.screens.localai.AiGameState import io.zenandroid.onlinego.ui.screens.localai.AiGameViewModel -import io.zenandroid.onlinego.ui.screens.localai.middlewares.* +import io.zenandroid.onlinego.ui.screens.localai.middlewares.AIMoveMiddleware import io.zenandroid.onlinego.ui.screens.localai.middlewares.AnalyticsMiddleware +import io.zenandroid.onlinego.ui.screens.localai.middlewares.EngineLifecycleMiddleware +import io.zenandroid.onlinego.ui.screens.localai.middlewares.GameTurnMiddleware +import io.zenandroid.onlinego.ui.screens.localai.middlewares.HintMiddleware +import io.zenandroid.onlinego.ui.screens.localai.middlewares.OwnershipMiddleware +import io.zenandroid.onlinego.ui.screens.localai.middlewares.StatePersistenceMiddleware +import io.zenandroid.onlinego.ui.screens.localai.middlewares.UserMoveMiddleware import io.zenandroid.onlinego.ui.screens.mygames.MyGamesViewModel import io.zenandroid.onlinego.ui.screens.newchallenge.selectopponent.searchplayer.SearchMiddleware import io.zenandroid.onlinego.ui.screens.newchallenge.selectopponent.searchplayer.SearchPlayerReducer @@ -180,7 +209,7 @@ private val viewModelsModule = module { } viewModel { - FaceToFaceViewModel(get()) + FaceToFaceViewModel(get(), PreferenceManager.getDefaultSharedPreferences(OnlineGoApplication.instance.baseContext), OnlineGoApplication.instance.analytics, FirebaseCrashlytics.getInstance()) } } diff --git a/app/src/main/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModel.kt b/app/src/main/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModel.kt index f2718795..7d99887b 100644 --- a/app/src/main/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModel.kt +++ b/app/src/main/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModel.kt @@ -16,13 +16,11 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.graphics.vector.ImageVector import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import androidx.preference.PreferenceManager import app.cash.molecule.AndroidUiDispatcher import app.cash.molecule.RecompositionClock.ContextClock import app.cash.molecule.launchMolecule import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics -import io.zenandroid.onlinego.OnlineGoApplication import io.zenandroid.onlinego.data.model.BoardTheme import io.zenandroid.onlinego.data.model.BoardTheme.WOOD import io.zenandroid.onlinego.data.model.Cell @@ -62,7 +60,9 @@ private const val HANDICAP_KEY = "FACE_TO_FACE_HANDICAP_KEY" class FaceToFaceViewModel( private val settingsRepository: SettingsRepository, - private val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(OnlineGoApplication.instance.baseContext), + private val prefs: SharedPreferences, + private val analytics: FirebaseAnalytics, + private val crashlytics: FirebaseCrashlytics, testing: Boolean = false ) : ViewModel() { @@ -82,7 +82,7 @@ class FaceToFaceViewModel( private var newGameParameters by mutableStateOf(GameParameters(BoardSize.LARGE, 0)) init { - FirebaseAnalytics.getInstance(OnlineGoApplication.instance).logEvent("face_to_face_opened", null) + analytics.logEvent("face_to_face_opened", null) viewModelScope.launch { loadSavedData() } @@ -154,7 +154,7 @@ class FaceToFaceViewModel( private suspend fun loadSavedData() { if(prefs.contains(HISTORY_KEY) && prefs.contains(BOARD_SIZE_KEY) && prefs.contains(HANDICAP_KEY)) { - FirebaseAnalytics.getInstance(OnlineGoApplication.instance).logEvent("face_to_face_loading", null) + analytics.logEvent("face_to_face_loading", null) var historyString: String var sizeString: String var handicap: Int @@ -177,12 +177,12 @@ class FaceToFaceViewModel( currentPosition = try { historyPosition(history.lastIndex) } catch (e: Exception) { - FirebaseCrashlytics.getInstance().log("FaceToFaceViewModel Cannot load history $history") + crashlytics.log("FaceToFaceViewModel Cannot load history $history") recordException(e) historyPosition(0) } loading = false - FirebaseAnalytics.getInstance(OnlineGoApplication.instance).logEvent("face_to_face_loaded", null) + analytics.logEvent("face_to_face_loaded", null) } override fun onCleared() { @@ -279,7 +279,7 @@ class FaceToFaceViewModel( handicap = currentGameParameters.handicap ) ?: run { val historyString = history.fold("") { acc, cell -> "$acc ${cell.x},${cell.y}}" } - FirebaseCrashlytics.getInstance().log("FaceToFaceViewModel Cannot replay history $historyString") + crashlytics.log("FaceToFaceViewModel Cannot replay history $historyString") recordException(IllegalStateException("Cannot replay history history=$historyString idx=$index historyIndex=$historyIndex")) Position( boardWidth = currentGameParameters.size.width, @@ -293,7 +293,7 @@ class FaceToFaceViewModel( } private fun onCellTapUp(cell: Cell) { - FirebaseCrashlytics.getInstance().log("onCellTapUp $cell") + crashlytics.log("onCellTapUp $cell") val pos = currentPosition val newPosition = RulesManager.makeMove(pos, pos.nextToMove, cell) if (newPosition != null) { diff --git a/app/src/test/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModelTest.kt b/app/src/test/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModelTest.kt index b39f1bbd..9780043e 100644 --- a/app/src/test/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModelTest.kt +++ b/app/src/test/java/io/zenandroid/onlinego/ui/screens/face2face/FaceToFaceViewModelTest.kt @@ -5,6 +5,8 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule import app.cash.molecule.RecompositionClock import app.cash.molecule.moleculeFlow import app.cash.turbine.test +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.crashlytics.FirebaseCrashlytics import com.nhaarman.mockito_kotlin.any import com.nhaarman.mockito_kotlin.mock import com.nhaarman.mockito_kotlin.whenever @@ -45,6 +47,8 @@ class FaceToFaceViewModelTest { } private val prefs: SharedPreferences = mock {} + private val analytics: FirebaseAnalytics = mock {} + private val crashlytics: FirebaseCrashlytics = mock {} private lateinit var viewModel: FaceToFaceViewModel @@ -53,6 +57,8 @@ class FaceToFaceViewModelTest { Dispatchers.setMain(StandardTestDispatcher()) viewModel = FaceToFaceViewModel( settingsRepository = settingsRepository, + analytics = analytics, + crashlytics = crashlytics, prefs = prefs, testing = true )