Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
FikriMilano committed Aug 19, 2022
1 parent 59abebf commit fbbe7e4
Showing 1 changed file with 116 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ import android.accounts.Account
import android.app.Application
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import androidx.test.core.app.ApplicationProvider
import com.google.android.fhir.FhirEngine
import com.google.gson.Gson
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import io.mockk.coEvery
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
Expand All @@ -32,6 +35,12 @@ import java.io.IOException
import java.net.UnknownHostException
import javax.inject.Inject
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.async
import kotlinx.coroutines.test.runTest
import org.hl7.fhir.r4.model.Bundle
import org.hl7.fhir.r4.model.CareTeam
import org.hl7.fhir.r4.model.Location
import org.hl7.fhir.r4.model.Organization
import org.junit.After
import org.junit.Assert
import org.junit.Before
Expand All @@ -48,8 +57,14 @@ import org.smartregister.fhircore.engine.data.remote.model.response.OAuthRespons
import org.smartregister.fhircore.engine.robolectric.AccountManagerShadow
import org.smartregister.fhircore.engine.robolectric.RobolectricTest
import org.smartregister.fhircore.engine.rule.CoroutineTestRule
import org.smartregister.fhircore.engine.util.DefaultDispatcherProvider
import org.smartregister.fhircore.engine.util.SecureSharedPreference
import org.smartregister.fhircore.engine.util.SharedPreferenceKey
import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
import org.smartregister.model.location.LocationHierarchy
import org.smartregister.model.practitioner.FhirPractitionerDetails
import org.smartregister.model.practitioner.KeycloakUserDetails
import org.smartregister.model.practitioner.PractitionerDetails
import retrofit2.Call
import retrofit2.Response

Expand All @@ -72,6 +87,8 @@ internal class LoginViewModelTest : RobolectricTest() {

@Inject lateinit var configurationRegistry: ConfigurationRegistry

@Inject lateinit var gsonn: Gson

private lateinit var loginViewModel: LoginViewModel

private lateinit var accountAuthenticatorSpy: AccountAuthenticator
Expand Down Expand Up @@ -235,4 +252,103 @@ internal class LoginViewModelTest : RobolectricTest() {
)
Assert.assertEquals(LoginErrorState.INVALID_CREDENTIALS, loginViewModel.loginErrorState.value)
}

private val application = ApplicationProvider.getApplicationContext<Application>()

@Test
fun savePractitionerDetails() {
val fhirEngine = mockk<FhirEngine>()
val configurationRegistry = mockk<ConfigurationRegistry>()
val accountAuthenticator = mockk<AccountAuthenticator>()
val dispatcher = DefaultDispatcherProvider()
// val gson = mockk<Gson>()
val sharedPreferences = SharedPreferencesHelper(application, gsonn)

val viewModel =
LoginViewModel(
fhirEngine = fhirEngine,
configurationRegistry = configurationRegistry,
accountAuthenticator = accountAuthenticator,
dispatcher = dispatcher,
sharedPreferences = sharedPreferences
)

val sampleKeycloakUserDetails = KeycloakUserDetails().apply { id = "12345" }
val sampleCareTeam = CareTeam().apply { id = "1" }
val sampleOrganization = Organization().apply { id = "12" }
val sampleLocation = Location().apply { id = "123" }
val sampleLocationHierarchy = LocationHierarchy().apply { id = "1234" }

val samplePractitionerDetails =
PractitionerDetails().apply {
userDetail = sampleKeycloakUserDetails
fhirPractitionerDetails =
FhirPractitionerDetails().apply {
careTeams = listOf(sampleCareTeam)
organizations = listOf(sampleOrganization)
locations = listOf(sampleLocation)
locationHierarchyList = listOf(sampleLocationHierarchy)
}
}

val bundle =
Bundle().apply {
entry = listOf(Bundle.BundleEntryComponent().apply { resource = samplePractitionerDetails })
}

coEvery {
fhirEngine.create(*samplePractitionerDetails.fhirPractitionerDetails.careTeams.toTypedArray())
} returns listOf("1")
coEvery {
fhirEngine.create(
*samplePractitionerDetails.fhirPractitionerDetails.organizations.toTypedArray()
)
} returns listOf("12")
coEvery {
fhirEngine.create(*samplePractitionerDetails.fhirPractitionerDetails.locations.toTypedArray())
} returns listOf("123")

runTest {
val savingDeferred = async { viewModel.savePractitionerDetails(bundle) }

if (savingDeferred.isCompleted) {

Assert.assertEquals(
sampleKeycloakUserDetails.id,
sharedPreferences.read<KeycloakUserDetails>(
SharedPreferenceKey.PRACTITIONER_DETAILS_USER_DETAIL.name
)
)

Assert.assertEquals(
listOf(sampleCareTeam.id),
sharedPreferences.read<List<String>>(
SharedPreferenceKey.PRACTITIONER_DETAILS_CARE_TEAM_IDS.name
)
)

Assert.assertEquals(
listOf(sampleOrganization.id),
sharedPreferences.read<List<String>>(
SharedPreferenceKey.PRACTITIONER_DETAILS_ORGANIZATION_IDS.name
)
)

Assert.assertEquals(
listOf(sampleLocation.id),
sharedPreferences.read<List<String>>(
SharedPreferenceKey.PRACTITIONER_DETAILS_LOCATION_IDS.name
)
)

Assert.assertEquals(
1,
sharedPreferences.read<List<LocationHierarchy>>(
SharedPreferenceKey.PRACTITIONER_DETAILS_LOCATION_HIERARCHIES.name
)!!
.size
)
}
}
}
}

0 comments on commit fbbe7e4

Please sign in to comment.