Skip to content

Commit

Permalink
NTV-359: Fix pledge with Reward+AddOns that are shippable (#1523)
Browse files Browse the repository at this point in the history
  • Loading branch information
Arkariang committed Jan 25, 2022
1 parent f0569f5 commit e65e565
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 1 deletion.
Expand Up @@ -478,6 +478,7 @@ interface PledgeFragmentViewModel {

val pledgeReason = arguments()
.map { it.getSerializable(ArgumentsKey.PLEDGE_PLEDGE_REASON) as PledgeReason }
.distinctUntilChanged()

val updatingPayment = pledgeReason
.map { it == PledgeReason.UPDATE_PAYMENT || it == PledgeReason.FIX_PLEDGE }
Expand Down Expand Up @@ -807,7 +808,7 @@ interface PledgeFragmentViewModel {
.filter { ObjectUtils.isNotNull(it) }
.map { requireNotNull(it) }
.compose<Pair<ShippingRule, PledgeReason>>(combineLatestPair(pledgeReason))
.filter { it.second == PledgeReason.PLEDGE || it.second == PledgeReason.UPDATE_REWARD }
.filter { it.second == PledgeReason.PLEDGE || it.second == PledgeReason.UPDATE_REWARD || it.second == PledgeReason.FIX_PLEDGE }
.map { it.first }
.compose<Pair<ShippingRule, Project>>(combineLatestPair(project))
.compose(bindToLifecycle())
Expand Down Expand Up @@ -855,9 +856,11 @@ interface PledgeFragmentViewModel {

val isRewardWithShipping = this.selectedReward
.filter { RewardUtils.isShippable(it) }
.distinctUntilChanged()

val isDigitalRw = this.selectedReward
.filter { RewardUtils.isDigital(it) }
.distinctUntilChanged()

// - Calculate total for Reward || Rewards + AddOns with Shipping location
val totalWShipping = Observable.combineLatest(isRewardWithShipping, pledgeAmountHeader, shippingAmount, this.bonusAmount, pledgeReason) {
Expand Down
Expand Up @@ -822,6 +822,30 @@ class PledgeFragmentViewModelTest : KSRobolectricTestCase() {
this.totalAmount.assertValue(expectedCurrency(environment, backedProject, 1.0))
}

@Test
fun testPledgeSummaryAmount_whenFixingPaymentMethod_whenRewardAddOnShipping() {
val testData = setUpBackedRewardWithAddOnsAndShippingTestData()
val backedProject = testData.project
val reward = testData.reward

val environment = environment()
setUpEnvironment(environment, reward, backedProject, PledgeReason.FIX_PLEDGE)

this.totalAmount.assertValue(expectedCurrency(environment, backedProject, 40.0))
}

@Test
fun testPledgeSummaryAmount_whenFixingPaymentMethod_whenRewardAddOnShippingBonusAmount() {
val testData = setUpBackedRewardWithAddOnsAndShippingAndBonusAmountTestData()
val backedProject = testData.project
val reward = testData.reward

val environment = environment()
setUpEnvironment(environment, reward, backedProject, PledgeReason.FIX_PLEDGE)

this.totalAmount.assertValue(expectedCurrency(environment, backedProject, 42.0))
}

@Test
fun testTotalAmount_whenUpdatingPledge() {
val testData = setUpBackedShippableRewardTestData()
Expand Down Expand Up @@ -2769,6 +2793,70 @@ class PledgeFragmentViewModelTest : KSRobolectricTestCase() {
return TestData(shippableReward, backedProject, backing, shippingRulesEnvelope, storedCards)
}

private fun setUpBackedRewardWithAddOnsAndShippingAndBonusAmountTestData(): TestData {
val backingCard = StoredCardFactory.visa()
val reward = RewardFactory.rewardWithShipping()
val addOns = RewardFactory.rewardWithShipping()
val bAmount = 2.0
val storedCards = listOf(StoredCardFactory.discoverCard(), backingCard, StoredCardFactory.visa())
val backing = BackingFactory.backing()
.toBuilder()
.paymentSource(
PaymentSourceFactory.visa()
.toBuilder()
.id(backingCard.id())
.build()
)
.bonusAmount(bAmount)
.reward(reward)
.rewardId(reward.id())
.addOns(listOf(addOns))
.build()

val backedProject = ProjectFactory.backedProject()
.toBuilder()
.backing(backing)
.build()

val shippingRulesEnvelope = ShippingRulesEnvelopeFactory.shippingRules()
.toBuilder()
.shippingRules(listOf(ShippingRuleFactory.usShippingRule(), ShippingRuleFactory.germanyShippingRule(), ShippingRuleFactory.mexicoShippingRule()))
.build()

return TestData(reward, backedProject, backing, shippingRulesEnvelope, storedCards)
}

private fun setUpBackedRewardWithAddOnsAndShippingTestData(): TestData {
val backingCard = StoredCardFactory.visa()
val reward = RewardFactory.rewardWithShipping()
val addOns = RewardFactory.rewardWithShipping()
val storedCards = listOf(StoredCardFactory.discoverCard(), backingCard, StoredCardFactory.visa())
val backing = BackingFactory.backing()
.toBuilder()
.paymentSource(
PaymentSourceFactory.visa()
.toBuilder()
.id(backingCard.id())
.build()
)
.reward(reward)
.rewardId(reward.id())
.addOns(listOf(addOns))
.build()

val backedProject = ProjectFactory.backedProject()
.toBuilder()
.backing(backing)
.build()

val shippingRulesEnvelope = ShippingRulesEnvelopeFactory.shippingRules()
.toBuilder()
.shippingRules(listOf(ShippingRuleFactory.usShippingRule(), ShippingRuleFactory.germanyShippingRule(), ShippingRuleFactory.mexicoShippingRule()))
.build()

return TestData(reward, backedProject, backing, shippingRulesEnvelope, storedCards)
}

private fun setUpBackedNoRewardTestData(): TestData {
val backingCard = StoredCardFactory.visa()
val noReward = RewardFactory.noReward()
Expand Down

0 comments on commit e65e565

Please sign in to comment.