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 @@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.simprints.feature.troubleshooting.adapter.TroubleshootingItemViewData
import com.simprints.infra.authstore.AuthStore
import com.simprints.infra.enrolment.records.repository.EnrolmentRecordRepository
import com.simprints.infra.enrolment.records.repository.local.migration.RealmToRoomMigrationFlagsStore
import dagger.hilt.android.lifecycle.HiltViewModel
Expand All @@ -15,6 +16,7 @@ import javax.inject.Inject
internal class RealmToRoomRecordsMigrationViewModel @Inject constructor(
private val flagStore: RealmToRoomMigrationFlagsStore,
private val enrolmentRecordRepository: EnrolmentRecordRepository,
private val authStore: AuthStore,
) : ViewModel() {
private val _logs = MutableLiveData<List<TroubleshootingItemViewData>>(emptyList())
val logs: LiveData<List<TroubleshootingItemViewData>>
Expand All @@ -30,7 +32,11 @@ internal class RealmToRoomRecordsMigrationViewModel @Inject constructor(
),
TroubleshootingItemViewData(
title = "Local db info",
body = enrolmentRecordRepository.getLocalDBInfo(),
body = if (authStore.signedInProjectId.isNotEmpty()) {
enrolmentRecordRepository.getLocalDBInfo()
} else {
"No local db info available for logged out users."
},
),
),
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.simprints.feature.troubleshooting.reordsmigration

import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.*
import com.simprints.feature.troubleshooting.recordsmigration.RealmToRoomRecordsMigrationViewModel
import com.simprints.infra.authstore.AuthStore
import com.simprints.infra.enrolment.records.repository.EnrolmentRecordRepository
import com.simprints.infra.enrolment.records.repository.local.migration.RealmToRoomMigrationFlagsStore
import com.simprints.testtools.common.coroutines.TestCoroutineRule
import com.simprints.testtools.common.livedata.getOrAwaitValue
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.impl.annotations.*
import io.mockk.*
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Rule
Expand All @@ -28,12 +28,15 @@ class RealmToRoomRecordsMigrationViewModelTest {
@MockK
private lateinit var enrolmentRecordRepository: EnrolmentRecordRepository

@MockK
private lateinit var authStore: AuthStore

private lateinit var viewModel: RealmToRoomRecordsMigrationViewModel

@Before
fun setup() {
MockKAnnotations.init(this, relaxed = true)
viewModel = RealmToRoomRecordsMigrationViewModel(flagStore, enrolmentRecordRepository)
viewModel = RealmToRoomRecordsMigrationViewModel(flagStore, enrolmentRecordRepository, authStore)
}

@Test
Expand All @@ -42,6 +45,7 @@ class RealmToRoomRecordsMigrationViewModelTest {
val mockFlagState = "flags: ENABLED"
val mockDbInfo = "Database Version: 1"

every { authStore.signedInProjectId } returns "project_id"
coEvery { flagStore.getStoreStateAsString() } returns mockFlagState
coEvery { enrolmentRecordRepository.getLocalDBInfo() } returns mockDbInfo

Expand All @@ -58,4 +62,29 @@ class RealmToRoomRecordsMigrationViewModelTest {
assertThat(logs[1].title).isEqualTo("Local db info")
assertThat(logs[1].body).isEqualTo(mockDbInfo)
}

@Test
fun `collectData should post no local DB info when user is logged out`() = runTest {
// Given
val mockFlagState = "flags: ENABLED"
val mockDbInfo = "Database Version: 1"

every { authStore.signedInProjectId } returns ""
coEvery { flagStore.getStoreStateAsString() } returns mockFlagState
coEvery { enrolmentRecordRepository.getLocalDBInfo() } returns mockDbInfo

// When
viewModel.collectData()

// Then
val logs = viewModel.logs.getOrAwaitValue()

assertThat(logs).hasSize(2)
assertThat(logs[0].title).isEqualTo("Realm to Room migration flags:")
assertThat(logs[0].body).isEqualTo(mockFlagState)

assertThat(logs[1].title).isEqualTo("Local db info")
assertThat(logs[1].body).isEqualTo("No local db info available for logged out users.")
coVerify(exactly = 0) { enrolmentRecordRepository.getLocalDBInfo() }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.simprints.infra.logging

@Retention(AnnotationRetention.BINARY)
annotation class ExcludedFromGeneratedTestCoverageReports(
val reason: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import com.simprints.infra.logging.writers.AnalyticsPropertyLogWriter
import com.simprints.infra.logging.writers.CrashlyticsLogWriter
import com.simprints.infra.logging.writers.FileLogWriter

@ExcludedFromGeneratedTestCoverageReports("it is impossible to mockk the build types")
object SimberBuilder {
/**
* Initializes the Simber logging framework with appropriate writers and severity based on build type.
Expand Down