From 4b3013984e1f3884ee681baed3d604a29c604ac4 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 18 Mar 2025 15:39:09 -0300 Subject: [PATCH] Add unit tests to check for unregistered state. --- .../jobs/InAppPaymentOneTimeContextJob.kt | 4 ++- .../jobs/InAppPaymentKeepAliveJobTest.kt | 31 ++++++++++++++++ .../jobs/InAppPaymentOneTimeContextJobTest.kt | 36 +++++++++++++++++++ .../jobs/InAppPaymentRedemptionJobTest.kt | 36 +++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentKeepAliveJobTest.kt create mode 100644 app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJobTest.kt create mode 100644 app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentRedemptionJobTest.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJob.kt index 1643b86d6f..af20ea164f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJob.kt @@ -5,6 +5,7 @@ package org.thoughtcrime.securesms.jobs +import androidx.annotation.VisibleForTesting import okio.ByteString.Companion.toByteString import org.signal.core.util.logging.Log import org.signal.core.util.orNull @@ -46,7 +47,8 @@ class InAppPaymentOneTimeContextJob private constructor( const val KEY = "InAppPurchaseOneTimeContextJob" - private fun create(inAppPayment: InAppPaymentTable.InAppPayment): Job { + @VisibleForTesting + fun create(inAppPayment: InAppPaymentTable.InAppPayment): Job { return InAppPaymentOneTimeContextJob( inAppPayment.id, parameters = Parameters.Builder() diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentKeepAliveJobTest.kt b/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentKeepAliveJobTest.kt new file mode 100644 index 0000000000..95af40237b --- /dev/null +++ b/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentKeepAliveJobTest.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.jobs + +import assertk.assertThat +import assertk.assertions.isTrue +import io.mockk.every +import org.junit.Rule +import org.junit.Test +import org.thoughtcrime.securesms.database.model.InAppPaymentSubscriberRecord +import org.thoughtcrime.securesms.testutil.MockSignalStoreRule + +class InAppPaymentKeepAliveJobTest { + + @get:Rule + val mockSignalStore = MockSignalStoreRule() + + @Test + fun `Given an unregistered local user, when I run, then I expect skip`() { + every { mockSignalStore.account.isRegistered } returns false + + val job = InAppPaymentKeepAliveJob.create(InAppPaymentSubscriberRecord.Type.DONATION) + + val result = job.run() + + assertThat(result.isSuccess).isTrue() + } +} diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJobTest.kt b/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJobTest.kt new file mode 100644 index 0000000000..28b4b776bb --- /dev/null +++ b/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentOneTimeContextJobTest.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.jobs + +import assertk.assertThat +import assertk.assertions.isTrue +import io.mockk.every +import org.junit.Rule +import org.junit.Test +import org.signal.donations.InAppPaymentType +import org.signal.donations.PaymentSourceType +import org.thoughtcrime.securesms.components.settings.app.subscription.InAppPaymentsTestRule +import org.thoughtcrime.securesms.testutil.MockSignalStoreRule + +class InAppPaymentOneTimeContextJobTest { + + @get:Rule + val mockSignalStore = MockSignalStoreRule() + + @get:Rule + val iapRule = InAppPaymentsTestRule() + + @Test + fun `Given an unregistered local user, when I run, then I expect failure`() { + every { mockSignalStore.account.isRegistered } returns false + + val job = InAppPaymentOneTimeContextJob.create(iapRule.createInAppPayment(InAppPaymentType.ONE_TIME_DONATION, PaymentSourceType.PayPal)) + + val result = job.run() + + assertThat(result.isFailure).isTrue() + } +} diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentRedemptionJobTest.kt b/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentRedemptionJobTest.kt new file mode 100644 index 0000000000..bbc10208d2 --- /dev/null +++ b/app/src/test/java/org/thoughtcrime/securesms/jobs/InAppPaymentRedemptionJobTest.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2025 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.jobs + +import android.app.Application +import assertk.assertThat +import assertk.assertions.isTrue +import io.mockk.every +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.thoughtcrime.securesms.testutil.MockSignalStoreRule + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE, application = Application::class) +class InAppPaymentRedemptionJobTest { + + @get:Rule + val mockSignalStore = MockSignalStoreRule() + + @Test + fun `Given an unregistered local user, when I run, then I expect failure`() { + every { mockSignalStore.account.isRegistered } returns false + + val job = InAppPaymentRedemptionJob.create() + + val result = job.run() + + assertThat(result.isFailure).isTrue() + } +}