diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/DevViewModel.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/DevViewModel.kt index 72297405f15..7a2f7aae977 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/DevViewModel.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/DevViewModel.kt @@ -88,7 +88,10 @@ constructor( log = "${log}Id,${group.key},Date" + "\n" + - group.value.joinToString(separator = "\n") { "${it.id},${it.version},${it.date}" } + + group.value.joinToString(separator = "\n") @ExcludeFromJacocoGeneratedReport + { + "${it.id},${it.version},${it.date}" + } + "" + "\n-----------------------------------------------------\n" } @@ -115,7 +118,8 @@ constructor( fun fetchDetails() { try { - viewModelScope.launch { + viewModelScope.launch @ExcludeFromJacocoGeneratedReport + { val userInfo = keycloakService.fetchUserInfo().body() if (userInfo != null && !userInfo.keycloakUuid.isNullOrEmpty()) { val bundle = diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/InfoCard.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/InfoCard.kt index 82135b076f0..b27dfa6995d 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/InfoCard.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/InfoCard.kt @@ -78,7 +78,8 @@ fun InfoCard(viewModel: SettingsViewModel) { ) } } - Card(Modifier.padding(6.dp)) { + Card(Modifier.padding(6.dp)) @ExcludeFromJacocoGeneratedReport + { Column(Modifier.padding(10.dp)) { generateData(data!!).forEach { Column(modifier = Modifier.fillMaxWidth().padding(8.dp)) { @@ -98,7 +99,11 @@ fun InfoCard(viewModel: SettingsViewModel) { fun FieldCard(fieldData: FieldData) { var show by remember { mutableStateOf(false) } - Card(onClick = { show = !show }, modifier = Modifier.fillMaxWidth()) { + Card( + onClick = { show = !show }, + modifier = Modifier.fillMaxWidth() + ) @ExcludeFromJacocoGeneratedReport + { Column(verticalArrangement = Arrangement.spacedBy(6.dp), modifier = Modifier.padding(8.dp)) { Text(text = fieldData.value) diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsScreen.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsScreen.kt index 276b8abf8ab..7d9ec81d3c8 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsScreen.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsScreen.kt @@ -81,30 +81,40 @@ fun SettingsScreen( ModalBottomSheetLayout( sheetState = viewResSheetState, sheetContent = { ViewResourceReport(devViewModel) } - ) { + ) @ExcludeFromJacocoGeneratedReport + { ModalBottomSheetLayout( sheetState = devMenuSheetState, - sheetContent = { - DevMenu(viewModel = devViewModel) { - scope.launch { - devMenuSheetState.hide() - viewResSheetState.show() + sheetContent = + @ExcludeFromJacocoGeneratedReport + { + DevMenu(viewModel = devViewModel) @ExcludeFromJacocoGeneratedReport + { + scope.launch @ExcludeFromJacocoGeneratedReport + { + devMenuSheetState.hide() + viewResSheetState.show() + } } } - } ) { Scaffold( - topBar = { - TopAppBar( - title = {}, - navigationIcon = { - IconButton(onClick = { navController?.popBackStack() }) { - Icon(Icons.Default.ArrowBack, "") - } - } - ) - } - ) { paddingValues -> + topBar = + @ExcludeFromJacocoGeneratedReport + { + TopAppBar( + title = {}, + navigationIcon = + @ExcludeFromJacocoGeneratedReport + { + IconButton( + onClick = { navController?.popBackStack() } + ) @ExcludeFromJacocoGeneratedReport { Icon(Icons.Default.ArrowBack, "") } + } + ) + } + ) @ExcludeFromJacocoGeneratedReport + { paddingValues -> Column( modifier = modifier @@ -129,14 +139,19 @@ fun SettingsScreen( UserProfileRow( icon = Icons.Rounded.BugReport, text = "Dev Menu", - clickListener = { scope.launch { devMenuSheetState.show() } }, + clickListener = + @ExcludeFromJacocoGeneratedReport + { + scope.launch @ExcludeFromJacocoGeneratedReport { devMenuSheetState.show() } + }, modifier = modifier ) UserProfileRow( icon = Icons.Rounded.Logout, text = stringResource(id = R.string.logout), - clickListener = { settingsViewModel.logoutUser(context) }, + clickListener = + @ExcludeFromJacocoGeneratedReport { settingsViewModel.logoutUser(context) }, modifier = modifier ) } @@ -157,7 +172,7 @@ fun UserProfileRow( modifier = modifier .fillMaxWidth() - .clickable { clickListener() } + .clickable @ExcludeFromJacocoGeneratedReport { clickListener() } .padding(vertical = 16.dp, horizontal = 20.dp), horizontalArrangement = Arrangement.SpaceBetween ) { diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsViewModel.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsViewModel.kt index 53e434b2bb3..ad11a4a9a21 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsViewModel.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/SettingsViewModel.kt @@ -69,7 +69,7 @@ constructor( val data = MutableLiveData() init { - viewModelScope.launch { fetchData() } + viewModelScope.launch @ExcludeFromJacocoGeneratedReport { fetchData() } } private suspend fun fetchData() { @@ -123,7 +123,8 @@ constructor( fun logoutUser(context: Context) { onLogout.postValue(true) - accountAuthenticator.logout { + accountAuthenticator.logout @ExcludeFromJacocoGeneratedReport + { context.getActivity()?.launchActivityWithNoBackStackHistory() } } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/DevMenu.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/DevMenu.kt index 74f95777f27..a5454279204 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/DevMenu.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/DevMenu.kt @@ -42,13 +42,18 @@ fun DevMenu(viewModel: DevViewModel, viewRes: () -> Unit) { ) { Button( modifier = Modifier.fillMaxWidth(), - onClick = { scope.launch { viewModel.createResourceReport(context) } } + onClick = + @ExcludeFromJacocoGeneratedReport + { + scope.launch @ExcludeFromJacocoGeneratedReport { viewModel.createResourceReport(context) } + } ) { Text(text = "Export Report Resources") } Button(modifier = Modifier.fillMaxWidth(), onClick = viewRes) { Text(text = "View Report Resources") } - Button(modifier = Modifier.fillMaxWidth(), onClick = { viewModel.fetchDetails() }) { - Text(text = "Test Fetch") - } + Button( + modifier = Modifier.fillMaxWidth(), + onClick = @ExcludeFromJacocoGeneratedReport { viewModel.fetchDetails() } + ) @ExcludeFromJacocoGeneratedReport { Text(text = "Test Fetch") } } } diff --git a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/ViewResources.kt b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/ViewResources.kt index 2129b1b6c73..10aca7ecf6a 100644 --- a/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/ViewResources.kt +++ b/android/engine/src/main/java/org/smartregister/fhircore/engine/ui/settings/views/ViewResources.kt @@ -47,23 +47,34 @@ import org.smartregister.fhircore.engine.util.annotation.ExcludeFromJacocoGenera fun ViewResourceReport(viewModel: DevViewModel) { var data by remember { mutableStateOf(mapOf>()) } - LaunchedEffect(viewModel) { data = viewModel.getResourcesToReport() } + LaunchedEffect(viewModel) @ExcludeFromJacocoGeneratedReport + { + data = viewModel.getResourcesToReport() + } - Scaffold { paddingValues -> + Scaffold @ExcludeFromJacocoGeneratedReport + { paddingValues -> LazyColumn( verticalArrangement = Arrangement.spacedBy(8.dp), modifier = Modifier.padding(paddingValues).padding(horizontal = 12.dp) - ) { + ) @ExcludeFromJacocoGeneratedReport + { data.entries.forEach { group -> run { - stickyHeader { Text(text = group.key, style = MaterialTheme.typography.h5) } + stickyHeader @ExcludeFromJacocoGeneratedReport + { + Text(text = group.key, style = MaterialTheme.typography.h5) + } items(group.value) { item -> Card(Modifier.fillMaxWidth()) { Column( verticalArrangement = Arrangement.spacedBy(4.dp), modifier = Modifier.padding(6.dp).fillMaxWidth() ) { - Chip(onClick = {}, enabled = false) { Text(text = item.version) } + Chip(onClick = {}, enabled = false) @ExcludeFromJacocoGeneratedReport + { + Text(text = item.version) + } Text(text = item.id) Text(text = item.date) diff --git a/android/engine/src/test/java/org/smartregister/fhircore/engine/ui/login/LoginViewModelTest.kt b/android/engine/src/test/java/org/smartregister/fhircore/engine/ui/login/LoginViewModelTest.kt index 3eb139854a0..dfbd5fac2f7 100644 --- a/android/engine/src/test/java/org/smartregister/fhircore/engine/ui/login/LoginViewModelTest.kt +++ b/android/engine/src/test/java/org/smartregister/fhircore/engine/ui/login/LoginViewModelTest.kt @@ -114,7 +114,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testSuccessfulOfflineLogin() { + fun testSuccessfulOfflineLogin() = runTest { val activity = mockedActivity() updateCredentials() @@ -134,7 +134,7 @@ internal class LoginViewModelTest : RobolectricTest() { Assert.assertTrue(loginViewModel.navigateToHome.value!!) } @Test - fun testUnSuccessfulOfflineLogin() { + fun testUnSuccessfulOfflineLogin() = runTest { val activity = mockedActivity() updateCredentials() @@ -155,7 +155,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testSuccessfulOnlineLoginWithActiveSessionWithSavedPractitionerDetails() { + fun testSuccessfulOnlineLoginWithActiveSessionWithSavedPractitionerDetails() = runTest { updateCredentials() sharedPreferencesHelper.write( SharedPreferenceKey.PRACTITIONER_DETAILS.name, @@ -187,7 +187,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testSuccessfulOnlineLoginWithActiveSessionWithNoPractitionerDetailsSaved() { + fun testSuccessfulOnlineLoginWithActiveSessionWithNoPractitionerDetailsSaved() = runTest { updateCredentials() every { tokenAuthenticator.sessionActive() } returns true loginViewModel.login(mockedActivity(isDeviceOnline = true)) @@ -196,7 +196,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testUnSuccessfulOnlineLoginUsingDifferentUsername() { + fun testUnSuccessfulOnlineLoginUsingDifferentUsername() = runTest { updateCredentials() secureSharedPreference.saveCredentials("nativeUser", "n4t1veP5wd".toCharArray()) every { tokenAuthenticator.sessionActive() } returns false @@ -209,7 +209,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testSuccessfulNewOnlineLoginShouldFetchUserInfoAndPractitioner() { + fun testSuccessfulNewOnlineLoginShouldFetchUserInfoAndPractitioner() = runTest { updateCredentials() secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray()) every { tokenAuthenticator.sessionActive() } returns false @@ -250,7 +250,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testUnSuccessfulOnlineLoginUserInfoNotFetched() { + fun testUnSuccessfulOnlineLoginUserInfoNotFetched() = runTest { updateCredentials() secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray()) every { tokenAuthenticator.sessionActive() } returns false @@ -281,7 +281,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testUnSuccessfulOnlineLoginPractitionerDetailsNotFetchedException() { + fun testUnSuccessfulOnlineLoginPractitionerDetailsNotFetchedException() = runTest { updateCredentials() secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray()) every { tokenAuthenticator.sessionActive() } returns false @@ -312,7 +312,7 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testUnSuccessfulOnlineLoginWhenAccessTokenNotReceived() { + fun testUnSuccessfulOnlineLoginWhenAccessTokenNotReceived() = runTest { updateCredentials() secureSharedPreference.saveCredentials(thisUsername, thisPassword.toCharArray()) every { tokenAuthenticator.sessionActive() } returns false @@ -360,14 +360,14 @@ internal class LoginViewModelTest : RobolectricTest() { } @Test - fun testUpdateNavigateShouldUpdateLiveData() { + fun testUpdateNavigateShouldUpdateLiveData() = runTest { loginViewModel.updateNavigateHome(true) Assert.assertNotNull(loginViewModel.navigateToHome.value) Assert.assertTrue(loginViewModel.navigateToHome.value!!) } @Test - fun testForgotPasswordLoadsContact() { + fun testForgotPasswordLoadsContact() = runTest { loginViewModel.forgotPassword() Assert.assertEquals("tel:0123456789", loginViewModel.launchDialPad.value) }