From 2fd6b7c49ed6d2528dcbaaf627365579d6786872 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 9 Jan 2023 15:20:41 -0400 Subject: [PATCH] Fix donation payment update issue. --- .../subscription/MonthlyDonationRepository.kt | 6 ++++++ .../manage/ManageDonationsState.kt | 2 +- .../subscriptions/ActiveSubscriptionTest.java | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 libsignal/service/src/test/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscriptionTest.java diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/MonthlyDonationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/MonthlyDonationRepository.kt index 6c0083e1d2..058bd522d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/MonthlyDonationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/MonthlyDonationRepository.kt @@ -11,6 +11,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobmanager.JobTracker import org.thoughtcrime.securesms.jobs.MultiDeviceSubscriptionSyncRequestJob +import org.thoughtcrime.securesms.jobs.SubscriptionKeepAliveJob import org.thoughtcrime.securesms.jobs.SubscriptionReceiptRequestResponseJob import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient @@ -43,6 +44,11 @@ class MonthlyDonationRepository(private val donationsService: DonationsService) Single.fromCallable { donationsService.getSubscription(localSubscription.subscriberId) } .subscribeOn(Schedulers.io()) .flatMap(ServiceResponse::flattenResult) + .doOnSuccess { activeSubscription -> + if (activeSubscription.isActive && activeSubscription.activeSubscription.endOfCurrentPeriod > SignalStore.donationsValues().getLastEndOfPeriod()) { + SubscriptionKeepAliveJob.enqueueAndTrackTime(System.currentTimeMillis()) + } + } } else { Single.just(ActiveSubscription.EMPTY) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt index a54acd5441..7c585b4bc0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsState.kt @@ -22,7 +22,7 @@ data class ManageDonationsState( } } - fun getStateFromActiveSubscription(activeSubscription: ActiveSubscription): SubscriptionRedemptionState? { + private fun getStateFromActiveSubscription(activeSubscription: ActiveSubscription): SubscriptionRedemptionState? { return when { activeSubscription.isFailedPayment -> SubscriptionRedemptionState.FAILED activeSubscription.isInProgress -> SubscriptionRedemptionState.IN_PROGRESS diff --git a/libsignal/service/src/test/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscriptionTest.java b/libsignal/service/src/test/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscriptionTest.java new file mode 100644 index 0000000000..f3b887291c --- /dev/null +++ b/libsignal/service/src/test/java/org/whispersystems/signalservice/api/subscriptions/ActiveSubscriptionTest.java @@ -0,0 +1,18 @@ +package org.whispersystems.signalservice.api.subscriptions; + +import org.junit.Test; +import org.whispersystems.signalservice.internal.util.JsonUtil; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ActiveSubscriptionTest { + @Test + public void givenActiveSubscription_whenIIsPaymentFailure_thenIExpectFalse() throws Exception { + String input = "{\"subscription\":{\"level\":2000,\"billingCycleAnchor\":1636124746.000000000,\"endOfCurrentPeriod\":1675609546.000000000,\"active\":true,\"cancelAtPeriodEnd\":false,\"currency\":\"USD\",\"amount\":2000,\"status\":\"active\"},\"chargeFailure\":null}"; + ActiveSubscription activeSubscription = JsonUtil.fromJson(input, ActiveSubscription.class); + + assertTrue(activeSubscription.isActive()); + assertFalse(activeSubscription.isFailedPayment()); + } +} \ No newline at end of file