diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt index fb7db369895314f6977e0d6591e79c0b7279c02b..31230866a800a1d551dc06f1bcc42719cedcc688 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt @@ -49,6 +49,7 @@ class SubmissionRepository @Inject constructor( // to be used by new submission flow screens fun giveConsentToSubmission() { + Timber.d("giveConsentToSubmission()") submissionSettings.hasGivenConsent.update { true } @@ -56,6 +57,7 @@ class SubmissionRepository @Inject constructor( // to be used by new submission flow screens fun revokeConsentToSubmission() { + Timber.d("revokeConsentToSubmission()") submissionSettings.hasGivenConsent.update { false } @@ -63,6 +65,7 @@ class SubmissionRepository @Inject constructor( // to be set to true once the user has opened and viewed their test result fun setViewedTestResult() { + Timber.d("setViewedTestResult()") submissionSettings.hasViewedTestResult.update { true } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt index c0244d398feb2713db69050a3afa9a62ab95f3da..1ce2aa558c0f895c5e687f2535d8c307ffe8b147 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModel.kt @@ -10,6 +10,7 @@ import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.nearby.ENFClient import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository +import de.rki.coronawarnapp.submission.SubmissionRepository import de.rki.coronawarnapp.submission.auto.AutoSubmission import de.rki.coronawarnapp.submission.data.tekhistory.TEKHistoryUpdater import de.rki.coronawarnapp.util.coroutine.DispatcherProvider @@ -24,7 +25,8 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con private val enfClient: ENFClient, private val autoSubmission: AutoSubmission, tekHistoryUpdaterFactory: TEKHistoryUpdater.Factory, - interoperabilityRepository: InteroperabilityRepository + interoperabilityRepository: InteroperabilityRepository, + private val submissionRepository: SubmissionRepository ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { val routeToScreen = SingleLiveEvent<NavDirections>() @@ -75,6 +77,7 @@ class SubmissionResultPositiveOtherWarningNoConsentViewModel @AssistedInject con } fun onConsentButtonClicked() { + submissionRepository.giveConsentToSubmission() launch { if (enfClient.isTracingEnabled.first()) { tekHistoryUpdater.updateTEKHistoryOrRequestPermission() diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml deleted file mode 100644 index 9eaf8188bcfbbf2227025cdd7636c65150637435..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_positive_other_warning.xml +++ /dev/null @@ -1,81 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<layout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools"> - - <data> - <variable - name="uiState" - type="de.rki.coronawarnapp.ui.submission.warnothers.WarnOthersState" /> - </data> - - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/submission_positive_other_privacy_container" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:contentDescription="@string/submission_positive_other_warning_title" - android:fillViewport="true" - tools:context=".ui.submission.warnothers.SubmissionResultPositiveOtherWarningFragment"> - - <include - android:id="@+id/submission_positive_other_warning_header" - layout="@layout/include_header" - android:layout_width="0dp" - android:layout_height="wrap_content" - app:icon="@{@drawable/ic_back}" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:title="@{@string/submission_positive_other_warning_title}" /> - - <include - layout="@layout/include_submission_positive_other_warning" - android:layout_width="0dp" - android:layout_height="0dp" - app:countryData="@{uiState.countryList}" - app:layout_constraintBottom_toTopOf="@+id/guideline_action" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/submission_positive_other_warning_header" - app:layout_constraintVertical_bias="0.0" /> - - <Button - android:id="@+id/submission_positive_other_warning_button_next" - style="@style/buttonPrimary" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:enabled="@{uiState != null && uiState.isSubmitButtonEnabled()}" - android:text="@string/submission_accept_button" - android:textAllCaps="true" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="@id/guideline_end" - app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@id/guideline_action" /> - - <ProgressBar - android:id="@+id/submission_positive_other_warning_spinner" - style="?android:attr/progressBarStyleHorizontal" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_large" - android:indeterminate="true" - gone="@{uiState == null || !uiState.isSubmitSpinnerVisible()}" - app:layout_constraintBottom_toBottomOf="@+id/submission_positive_other_warning_button_next" - app:layout_constraintEnd_toEndOf="@+id/submission_positive_other_warning_button_next" - app:layout_constraintStart_toStartOf="@+id/submission_positive_other_warning_button_next" - app:layout_constraintTop_toTopOf="@+id/submission_positive_other_warning_button_next" /> - - <androidx.constraintlayout.widget.Guideline - android:id="@+id/guideline_action" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_action" /> - - <include layout="@layout/merge_guidelines_side" /> - - </androidx.constraintlayout.widget.ConstraintLayout> - -</layout> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..b9a3cd2ba311145208f19c1af628ee876f012c21 --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningNoConsentViewModelTest.kt @@ -0,0 +1,75 @@ +package de.rki.coronawarnapp.ui.submission.warnothers + +import de.rki.coronawarnapp.nearby.ENFClient +import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository +import de.rki.coronawarnapp.submission.SubmissionRepository +import de.rki.coronawarnapp.submission.auto.AutoSubmission +import de.rki.coronawarnapp.submission.data.tekhistory.TEKHistoryUpdater +import io.mockk.MockKAnnotations +import io.mockk.Runs +import io.mockk.clearAllMocks +import io.mockk.every +import io.mockk.impl.annotations.MockK +import io.mockk.just +import io.mockk.verify +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flowOf +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import testhelpers.BaseTest +import testhelpers.TestDispatcherProvider +import testhelpers.extensions.CoroutinesTestExtension +import testhelpers.extensions.InstantExecutorExtension + +@ExtendWith(InstantExecutorExtension::class, CoroutinesTestExtension::class) +class SubmissionResultPositiveOtherWarningNoConsentViewModelTest : BaseTest() { + + @MockK lateinit var submissionRepository: SubmissionRepository + @MockK lateinit var autoSubmission: AutoSubmission + @MockK lateinit var tekHistoryUpdater: TEKHistoryUpdater + @MockK lateinit var tekHistoryUpdaterFactory: TEKHistoryUpdater.Factory + @MockK lateinit var interoperabilityRepository: InteroperabilityRepository + @MockK lateinit var enfClient: ENFClient + + @BeforeEach + fun setUp() { + MockKAnnotations.init(this) + every { tekHistoryUpdaterFactory.create(any()) } returns tekHistoryUpdater + every { tekHistoryUpdater.updateTEKHistoryOrRequestPermission() } just Runs + + every { interoperabilityRepository.countryList } returns emptyFlow() + every { submissionRepository.giveConsentToSubmission() } just Runs + + every { enfClient.isTracingEnabled } returns flowOf(true) + } + + private fun createViewModel() = SubmissionResultPositiveOtherWarningNoConsentViewModel( + dispatcherProvider = TestDispatcherProvider, + tekHistoryUpdaterFactory = tekHistoryUpdaterFactory, + autoSubmission = autoSubmission, + enfClient = enfClient, + interoperabilityRepository = interoperabilityRepository, + submissionRepository = submissionRepository + ) + + @AfterEach + fun teardown() { + clearAllMocks() + } + + @Test + fun `consent is stored and tek history updated`() { + val consentMutable = MutableStateFlow(false) + every { submissionRepository.hasGivenConsentToSubmission } returns consentMutable + + val viewModel = createViewModel() + + viewModel.onConsentButtonClicked() + + verify { submissionRepository.giveConsentToSubmission() } + verify { tekHistoryUpdater.updateTEKHistoryOrRequestPermission() } + } +}