From 172be4b6530b558e12d3378b09a71a77ac6b7de1 Mon Sep 17 00:00:00 2001 From: Tony Teate Date: Tue, 21 Oct 2025 14:30:26 -0400 Subject: [PATCH] MBL-2842: Only show 'manage pledge' menu if backing the project (#2435) --- .../helpers/ManagePledgeMenuOptionsFactory.kt | 12 +++++----- .../viewmodels/ProjectPageViewModelTest.kt | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/kickstarter/ui/helpers/ManagePledgeMenuOptionsFactory.kt b/app/src/main/java/com/kickstarter/ui/helpers/ManagePledgeMenuOptionsFactory.kt index f744df74a..b3f9932d6 100644 --- a/app/src/main/java/com/kickstarter/ui/helpers/ManagePledgeMenuOptionsFactory.kt +++ b/app/src/main/java/com/kickstarter/ui/helpers/ManagePledgeMenuOptionsFactory.kt @@ -24,12 +24,12 @@ fun createManagePledgeMenuOptions( val isFeatureFlagOn = ffClient.getBoolean(FlagKey.ANDROID_PLOT_EDIT_PLEDGE) == true val isPlotProject = project.isPledgeOverTimeAllowed() == true // If the project allows pledge over time, it is considered a plot project. val isPledgeOverTime = !backing?.paymentIncrements.isNullOrEmpty() // If the backing has payment increments, it is considered a pledge over time. - val showEditPledge = when { + val showEditPledge = project.isBacking() && when { isFeatureFlagOn && isPlotProject -> project.isLive && !isBackingStatusPreAuth else -> false } - val showChooseAnotherReward = when { + val showChooseAnotherReward = project.isBacking() && when { !isFeatureFlagOn -> !isPledgeOverTime isFeatureFlagOn -> !isPlotProject else -> false @@ -38,9 +38,9 @@ fun createManagePledgeMenuOptions( return ManagePledgeMenuOptions( showEditPledge = showEditPledge, showChooseAnotherReward = showChooseAnotherReward, - showUpdatePayment = project.isLive && !isBackingStatusPreAuth, - showSeeRewards = !project.isLive, - showCancelPledge = project.isLive && !isBackingStatusPreAuth, - showContactCreator = true + showUpdatePayment = project.isBacking() && project.isLive && !isBackingStatusPreAuth, + showSeeRewards = project.isBacking() && !project.isLive, + showCancelPledge = project.isBacking() && project.isLive && !isBackingStatusPreAuth, + showContactCreator = project.isBacking() ) } diff --git a/app/src/test/java/com/kickstarter/viewmodels/ProjectPageViewModelTest.kt b/app/src/test/java/com/kickstarter/viewmodels/ProjectPageViewModelTest.kt index 9a0b7d30c..dec478c87 100644 --- a/app/src/test/java/com/kickstarter/viewmodels/ProjectPageViewModelTest.kt +++ b/app/src/test/java/com/kickstarter/viewmodels/ProjectPageViewModelTest.kt @@ -2445,6 +2445,8 @@ class ProjectPageViewModelTest : KSRobolectricTestCase() { assertTrue(callbackInvoked.get()) } + /* TODO: 2025-10-21 Refactor the tests using a mocked Activity to use the ViewModel directly */ + @Test fun `manage pledge menu is inflated when project is backed`() { val project = ProjectFactory.backedProject() @@ -2578,6 +2580,28 @@ class ProjectPageViewModelTest : KSRobolectricTestCase() { assertFalse(options.showChooseAnotherReward) } + @Test + fun `manage pledge options are hidden when project is not backed`() { + val project = ProjectFactory.project() + + val mockFeatureFlagClient = object : MockFeatureFlagClient() { + override fun getBoolean(flagKey: FlagKey): Boolean { + return when (flagKey) { + FlagKey.ANDROID_PLOT_EDIT_PLEDGE -> true + else -> false + } + } + } + + val options = createManagePledgeMenuOptions(project, mockFeatureFlagClient) + assertFalse(options.showEditPledge) + assertFalse(options.showChooseAnotherReward) + assertFalse(options.showUpdatePayment) + assertFalse(options.showSeeRewards) + assertFalse(options.showCancelPledge) + assertFalse(options.showContactCreator) + } + private fun deepLinkIntent(): Intent { val uri = Uri.parse("https://www.kickstarter.com/projects/1186238668/skull-graphic-tee") return Intent(Intent.ACTION_VIEW, uri)