Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NT-330] Set initial amount from Backing #863

Merged
merged 6 commits into from Oct 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 10 additions & 0 deletions KsApi/models/Backing.swift
Expand Up @@ -69,3 +69,13 @@ extension Backing: EncodableType {
}

extension Backing.Status: Argo.Decodable {}

extension Backing {
/// Returns the pledge amount subtracting the shipping amount
public var pledgeAmount: Double {
let shippingAmount = Double(self.shippingAmount ?? 0)
let pledgeAmount = Decimal(amount) - Decimal(shippingAmount)

return (pledgeAmount as NSDecimalNumber).doubleValue
}
}
12 changes: 12 additions & 0 deletions KsApi/models/BackingTests.swift
@@ -1,4 +1,5 @@
@testable import KsApi
import Prelude
import XCTest

final class BackingTests: XCTestCase {
Expand Down Expand Up @@ -43,4 +44,15 @@ final class BackingTests: XCTestCase {
XCTAssertEqual(1, backing.value?.sequence)
XCTAssertEqual(Backing.Status.pledged, backing.value?.status)
}

func testPledgeAmount() {
let backing = Backing.template
|> Backing.lens.reward .~ Reward.postcards
|> Backing.lens.rewardId .~ Reward.postcards.id
|> Backing.lens.shippingAmount .~ 100
|> Backing.lens.amount .~ 700.50

XCTAssertEqual(backing.amount, 700.50)
XCTAssertEqual(backing.pledgeAmount, 600.50)
}
}
14 changes: 8 additions & 6 deletions Library/ViewModels/ManagePledgeSummaryViewModel.swift
Expand Up @@ -39,22 +39,24 @@ public class ManagePledgeSummaryViewModel: ManagePledgeSummaryViewModelType,
.map(formattedPledgeDate)

self.pledgeAmountText = projectAndBacking
.map { attributedCurrency(with: $0.0, amount: $0.1.amount) }
.map { project, backing in
attributedCurrency(with: project, amount: backing.pledgeAmount)
}
.skipNil()

let shippingAmount = backing
.map { Double($0.shippingAmount ?? 0) }

self.shippingAmountText = self.projectSignal
.combineLatest(with: shippingAmount)
.map { shippingValue(with: $0.0, with: $0.1) }
.map { project, shippingAmount in
shippingValue(with: project, with: shippingAmount)
}
.skipNil()

self.totalAmountText = projectAndBacking
.combineLatest(with: shippingAmount)
.map(unpack)
.map { project, backing, shippingAmount in
attributedCurrency(with: project, amount: backing.amount + shippingAmount)
.map { project, backing in
attributedCurrency(with: project, amount: backing.amount)
}
.skipNil()

Expand Down
4 changes: 2 additions & 2 deletions Library/ViewModels/ManagePledgeSummaryViewModelTests.swift
Expand Up @@ -47,10 +47,10 @@ final class ManagePledgeSummaryViewModelTests: TestCase {

self.backerNumberText.assertValue("Backer #999")
self.backingDateText.assertValue("As of September 16, 2019")
self.pledgeAmountText.assertValue("$30.00")
self.pledgeAmountText.assertValue("$23.00")
self.shippingAmountText.assertValue("+$7.00")
self.shippingLocationText.assertValue("Shipping: United States")
self.totalAmountText.assertValue("$37.00")
self.totalAmountText.assertValue("$30.00")
}

func testShippingLocationStackViewIsHidden_isFalse_WithShippableRewards() {
Expand Down
9 changes: 8 additions & 1 deletion Library/ViewModels/PledgeAmountViewModel.swift
Expand Up @@ -67,8 +67,15 @@ public final class PledgeAmountViewModel: PledgeAmountViewModelType,
.skipNil()
.map(rounded)

let initialValue = Signal.combineLatest(
project
.map { $0.personalization.backing?.pledgeAmount },
minValue
)
.map { backedAmount, minValue in backedAmount ?? minValue }

let stepperValue = Signal.merge(
minValue,
initialValue,
textFieldInputValue,
self.stepperValueProperty.signal
)
Expand Down
23 changes: 23 additions & 0 deletions Library/ViewModels/PledgeAmountViewModelTests.swift
Expand Up @@ -43,6 +43,29 @@ internal final class PledgeAmountViewModelTests: TestCase {
self.vm.outputs.textFieldValue.observe(self.textFieldValue.observer)
}

func testAmountCurrencyAndStepper_FromBacking() {
let project = Project.template
|> Project.lens.personalization.isBacking .~ true
|> Project.lens.personalization.backing .~ (
.template
|> Backing.lens.reward .~ Reward.postcards
|> Backing.lens.rewardId .~ Reward.postcards.id
|> Backing.lens.shippingAmount .~ 10
|> Backing.lens.amount .~ 700
)

self.vm.inputs.configureWith(project: project, reward: Reward.postcards)

self.amountIsValid.assertValues([true])
self.amountValue.assertValues([690])
self.currency.assertValues(["$"])
self.stepperMinValue.assertValue(PledgeAmountStepperConstants.min)
self.stepperMaxValue.assertValue(PledgeAmountStepperConstants.max)
self.stepperStepValue.assertValue(6)
self.stepperValue.assertValues([6, 690])
self.textFieldValue.assertValues(["690"])
}

func testAmountCurrencyAndStepper_NoReward() {
self.vm.inputs.configureWith(project: .template, reward: Reward.noReward)

Expand Down