Skip to content

Commit

Permalink
Fix errors showing in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
LZRS committed Jul 26, 2024
1 parent 43881f3 commit d6948aa
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,45 +52,48 @@ import org.smartregister.fhircore.engine.domain.model.SyncLocationToggleableStat
import org.smartregister.fhircore.engine.robolectric.RobolectricTest
import org.smartregister.fhircore.engine.rule.CoroutineTestRule
import org.smartregister.fhircore.engine.util.DispatcherProvider
import org.smartregister.fhircore.engine.util.SecureSharedPreference
import org.smartregister.fhircore.engine.util.SharedPreferencesHelper

@HiltAndroidTest
@OptIn(ExperimentalCoroutinesApi::class)
class CustomSyncWorkerTest : RobolectricTest() {

@kotlinx.coroutines.ExperimentalCoroutinesApi
private val resourceService: FhirResourceService = mockk()

@OptIn(ExperimentalCoroutinesApi::class)
private var fhirResourceDataSource: FhirResourceDataSource =
spyk(FhirResourceDataSource(resourceService))

@get:Rule(order = 0) val hiltRule = HiltAndroidRule(this)

@get:Rule(order = 1) val coroutineTestRule = CoroutineTestRule()

private val applicationContext = ApplicationProvider.getApplicationContext<Context>()

private lateinit var sharedPreferencesHelper: SharedPreferencesHelper

@Inject lateinit var dispatcherProvider: DispatcherProvider
private lateinit var secureSharedPreference: SecureSharedPreference

private lateinit var configurationRegistry: ConfigurationRegistry
private lateinit var customSyncWorker: CustomSyncWorker

@Before
@kotlinx.coroutines.ExperimentalCoroutinesApi
fun setUp() {
hiltRule.inject()
secureSharedPreference = SecureSharedPreference(applicationContext)
initializeWorkManager()
}

@Test
fun `should create sync worker with expected properties`() {
sharedPreferencesHelper =
SharedPreferencesHelper(ApplicationProvider.getApplicationContext(), Gson())
SharedPreferencesHelper(applicationContext, Gson(), secureSharedPreference)
configurationRegistry = Faker.buildTestConfigurationRegistry(sharedPreferencesHelper)

customSyncWorker =
TestListenableWorkerBuilder<CustomSyncWorker>(
ApplicationProvider.getApplicationContext(),
applicationContext,
)
.setWorkerFactory(CustomSyncWorkerFactory())
.build()
Expand All @@ -103,7 +106,7 @@ class CustomSyncWorkerTest : RobolectricTest() {
@Test
fun `should create sync worker with organization`() = runTest {
sharedPreferencesHelper =
SharedPreferencesHelper(ApplicationProvider.getApplicationContext(), Gson())
SharedPreferencesHelper(applicationContext, Gson(), secureSharedPreference)

val organizationId1 = "organization-id1"
val organizationId2 = "organization-id2"
Expand All @@ -120,7 +123,7 @@ class CustomSyncWorkerTest : RobolectricTest() {

customSyncWorker =
TestListenableWorkerBuilder<CustomSyncWorker>(
ApplicationProvider.getApplicationContext(),
applicationContext,
)
.setWorkerFactory(CustomSyncWorkerFactory())
.build()
Expand All @@ -142,7 +145,7 @@ class CustomSyncWorkerTest : RobolectricTest() {

customSyncWorker =
TestListenableWorkerBuilder<CustomSyncWorker>(
ApplicationProvider.getApplicationContext(),
applicationContext,
)
.setWorkerFactory(CustomSyncWorkerFactory())
.build()
Expand All @@ -161,7 +164,7 @@ class CustomSyncWorkerTest : RobolectricTest() {

// Initialize WorkManager for instrumentation tests.
WorkManagerTestInitHelper.initializeTestWorkManager(
ApplicationProvider.getApplicationContext(),
applicationContext,
config,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import org.smartregister.fhircore.engine.configuration.ConfigurationRegistry
import org.smartregister.fhircore.engine.data.remote.fhir.resource.FhirResourceDataSource
import org.smartregister.fhircore.engine.data.remote.fhir.resource.FhirResourceService
import org.smartregister.fhircore.engine.util.DispatcherProvider
import org.smartregister.fhircore.engine.util.SecureSharedPreference
import org.smartregister.fhircore.engine.util.SharedPreferencesHelper
import org.smartregister.fhircore.quest.app.AppConfigService
import org.smartregister.fhircore.quest.ui.login.LoginActivity
Expand Down Expand Up @@ -114,6 +115,7 @@ object Faker {
SharedPreferencesHelper(
ApplicationProvider.getApplicationContext<Application>(),
Gson(),
SecureSharedPreference(ApplicationProvider.getApplicationContext()),
)

fun buildPatient(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,15 @@ class LoginActivityTest : RobolectricTest() {
private val loginActivityController =
Robolectric.buildActivity(Faker.TestLoginActivity::class.java)
private lateinit var loginActivity: LoginActivity
private val currentUserName: String = Faker.authCredentials.username

@Before
fun setUp() {
hiltRule.inject()
ApplicationProvider.getApplicationContext<Context>().apply { setTheme(R.style.AppTheme) }
every { secureSharedPreference.retrieveSessionPin() } returns null
every { secureSharedPreference.retrieveSessionUsername() } returns
Faker.authCredentials.username
every { secureSharedPreference.retrieveSessionUserPin(any()) } returns null
every { secureSharedPreference.retrieveSessionUsername() } returns currentUserName
loginActivity = loginActivityController.create().resume().get()
}

Expand Down Expand Up @@ -127,8 +128,8 @@ class LoginActivityTest : RobolectricTest() {
@Ignore("Weird: Cannot set session pin")
fun testNavigateToScreenShouldLaunchPinLoginWithoutSetup() {
// Return a session pin, login with pin is enabled by default
secureSharedPreference.saveSessionPin("1234".toCharArray())
every { secureSharedPreference.retrieveSessionPin() } returns "1234"
secureSharedPreference.saveSessionPin(currentUserName, "1234".toCharArray())
every { secureSharedPreference.retrieveSessionUserPin(currentUserName) } returns "1234"

loginActivity.loginViewModel.updateNavigateHome(true)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ internal class LoginViewModelTest : RobolectricTest() {
fun testSuccessfulOfflineLogin() {
val activity = mockedActivity()
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, this.thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, this.thisPassword.toCharArray())

every {
accountAuthenticator.validateLoginCredentials(thisUsername, thisPassword.toCharArray())
Expand All @@ -177,7 +177,7 @@ internal class LoginViewModelTest : RobolectricTest() {
val activity = mockedActivity()

updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, this.thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, this.thisPassword.toCharArray())

every {
accountAuthenticator.validateLoginCredentials(thisUsername, thisPassword.toCharArray())
Expand Down Expand Up @@ -209,7 +209,7 @@ internal class LoginViewModelTest : RobolectricTest() {
scope = "open_my_guy",
),
)
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
val practitioner =
practitionerDetails().apply { fhirPractitionerDetails.id = "$thisUsername-practitioner-id" }
sharedPreferencesHelper.write(
Expand Down Expand Up @@ -239,7 +239,7 @@ internal class LoginViewModelTest : RobolectricTest() {
fun testSuccessfulOnlineLoginForDifferentUserInTheSameLocationWithSyncStrategyLocation() =
runTest {
updateCredentials()
secureSharedPreference.saveCredentials("nativeUser", "n4t1veP5wd".toCharArray())
secureSharedPreference.saveMultiCredentials("nativeUser", "n4t1veP5wd".toCharArray())
sharedPreferencesHelper.write(ResourceType.Location.name, listOf("test-location"))
sharedPreferencesHelper.write(
SharedPreferenceKey.PRACTITIONER_ID.name,
Expand Down Expand Up @@ -296,7 +296,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testUnSuccessfulOnlineLoginForDifferentUserInDifferentLocationWithSyncStrategyLocation() {
updateCredentials()
secureSharedPreference.saveCredentials("nativeUser", "n4t1veP5wd".toCharArray())
secureSharedPreference.saveMultiCredentials("nativeUser", "n4t1veP5wd".toCharArray())
sharedPreferencesHelper.write(ResourceType.Location.name, listOf("test-location"))
sharedPreferencesHelper.write(
SharedPreferenceKey.PRACTITIONER_ID.name,
Expand Down Expand Up @@ -345,7 +345,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testSuccessfulNewOnlineLoginShouldFetchUserInfoAndPractitioner() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery {
tokenAuthenticator.fetchAccessToken(thisUsername, thisPassword.toCharArray())
Expand Down Expand Up @@ -395,7 +395,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testUnSuccessfulOnlineLoginUserInfoNotFetched() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery {
tokenAuthenticator.fetchAccessToken(thisUsername, thisPassword.toCharArray())
Expand Down Expand Up @@ -426,7 +426,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testUnSuccessfulOnlineLoginWhenAccessTokenNotReceived() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery {
tokenAuthenticator.fetchAccessToken(thisUsername, thisPassword.toCharArray())
Expand Down Expand Up @@ -461,7 +461,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testUnsuccessfulOnlineLoginWithUnknownHostExceptionEmitsError() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery {
tokenAuthenticator.fetchAccessToken(thisUsername, thisPassword.toCharArray())
Expand All @@ -476,7 +476,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testUnsuccessfulOnlineLoginWithHTTPHostExceptionCode400EmitsErrorFetchingUser() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false

coEvery {
Expand All @@ -493,7 +493,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun testUnsuccessfulOnlineLoginWithHTTPHostExceptionCode401EmitsInvalidCredentialsError() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false

coEvery {
Expand All @@ -510,7 +510,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun `loginViewModel#fetchPractitioner() should call onFetchUserInfo with exception when SocketTimeoutException is thrown`() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery { keycloakService.fetchUserInfo() }.throws(SocketTimeoutException())

Expand All @@ -533,7 +533,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun `loginViewModel#fetchPractitioner() should call onFetchUserInfo with exception when UnknownHostException is thrown`() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery { keycloakService.fetchUserInfo() }.throws(UnknownHostException())

Expand All @@ -556,7 +556,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun `loginViewModel#fetchPractitioner() should call onFetchPractitioner with exception when UnknownHostException is thrown`() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery { keycloakService.fetchUserInfo() } returns
Response.success(UserInfo(keycloakUuid = "awesome_uuid"))
Expand Down Expand Up @@ -585,7 +585,7 @@ internal class LoginViewModelTest : RobolectricTest() {
@Test
fun `loginViewModel#fetchPractitioner() should call onFetchPractitioner with exception when SocketTimeoutException is thrown`() {
updateCredentials()
secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray())
secureSharedPreference.saveMultiCredentials(thisUsername, thisPassword.toCharArray())
every { tokenAuthenticator.sessionActive() } returns false
coEvery { keycloakService.fetchUserInfo() } returns
Response.success(UserInfo(keycloakUuid = "awesome_uuid"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ class AppMainViewModelTest : RobolectricTest() {
fun setUp() {
hiltRule.inject()

sharedPreferencesHelper = SharedPreferencesHelper(application, gson)
sharedPreferencesHelper =
SharedPreferencesHelper(application, gson, SecureSharedPreference(application))

every { secureSharedPreference.retrieveSessionUsername() } returns "demo"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class PinViewModelTest : RobolectricTest() {
pinViewModel.onSetPin("1990".toCharArray())

val newPinSlot = slot<CharArray>()
verify { secureSharedPreference.saveSessionPin(capture(newPinSlot)) }
verify { secureSharedPreference.saveSessionPin(any(), capture(newPinSlot)) }

Assert.assertEquals("1990", newPinSlot.captured.concatToString())
Assert.assertEquals(true, pinViewModel.navigateToHome.value)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,12 @@ class UserInsightScreenFragmentTest : RobolectricTest() {
private lateinit var secureSharedPreference: SecureSharedPreference

init {
sharedPreferencesHelper = SharedPreferencesHelper(context = context, gson = mockk())
sharedPreferencesHelper =
SharedPreferencesHelper(
context = context,
gson = mockk(),
secureSharedPreference = SecureSharedPreference(context),
)
configService = AppConfigService(context = context)
fhirResourceDataSource = spyk(FhirResourceDataSource(resourceService))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,12 @@ class UserSettingFragmentTest : RobolectricTest() {
private lateinit var preferenceDataStore: PreferenceDataStore

init {
sharedPreferencesHelper = SharedPreferencesHelper(context = context, gson = mockk())
sharedPreferencesHelper =
SharedPreferencesHelper(
context = context,
gson = mockk(),
secureSharedPreference = SecureSharedPreference(context),
)
configService = AppConfigService(context = context)
fhirResourceDataSource = spyk(FhirResourceDataSource(resourceService))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,12 @@ class UserSettingViewModelTest : RobolectricTest() {
private val navController = mockk<NavController>(relaxUnitFun = true)

init {
sharedPreferencesHelper = SharedPreferencesHelper(context = context, gson = mockk())
sharedPreferencesHelper =
SharedPreferencesHelper(
context = context,
gson = mockk(),
secureSharedPreference = SecureSharedPreference(context),
)
configService = AppConfigService(context = context)
fhirResourceDataSource = spyk(FhirResourceDataSource(resourceService))
}
Expand Down

0 comments on commit d6948aa

Please sign in to comment.