Skip to content

Commit

Permalink
[MBL-1329] Calculate total cost for each add-on (#2033)
Browse files Browse the repository at this point in the history
* Calculate the total cost of each add-on

* Fix and add tests
  • Loading branch information
ifosli committed Apr 11, 2024
1 parent 21dd603 commit c9585e6
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 10 deletions.
4 changes: 4 additions & 0 deletions Kickstarter.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,7 @@
39B5E10E2B86C56600FFB720 /* RefInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39B5E10D2B86C56600FFB720 /* RefInfo.swift */; };
39B5E1102B86C56E00FFB720 /* RefInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39B5E10F2B86C56E00FFB720 /* RefInfoTests.swift */; };
39B5E1122B89120F00FFB720 /* CreateAttributionEvent.graphql in Resources */ = {isa = PBXBuildFile; fileRef = 39B5E1112B89120E00FFB720 /* CreateAttributionEvent.graphql */; };
39C6169E2BC83DB000732410 /* PostCampaignPledgeRewardsSummaryViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39C6169D2BC83DB000732410 /* PostCampaignPledgeRewardsSummaryViewModelTests.swift */; };
4705D8982742E20900A13BBE /* ProjectHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4705D8972742E20900A13BBE /* ProjectHeaderCell.swift */; };
470B771A26FCDC8900EBD5CA /* RiskMessagingViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470B771926FCDC8900EBD5CA /* RiskMessagingViewModel.swift */; };
470B771C26FD022900EBD5CA /* RiskMessagingViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470B771B26FD022900EBD5CA /* RiskMessagingViewModelTests.swift */; };
Expand Down Expand Up @@ -1952,6 +1953,7 @@
39B5E10D2B86C56600FFB720 /* RefInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefInfo.swift; sourceTree = "<group>"; };
39B5E10F2B86C56E00FFB720 /* RefInfoTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefInfoTests.swift; sourceTree = "<group>"; };
39B5E1112B89120E00FFB720 /* CreateAttributionEvent.graphql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CreateAttributionEvent.graphql; sourceTree = "<group>"; };
39C6169D2BC83DB000732410 /* PostCampaignPledgeRewardsSummaryViewModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostCampaignPledgeRewardsSummaryViewModelTests.swift; sourceTree = "<group>"; };
3D1363951F0191FB00B53420 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
4705D8972742E20900A13BBE /* ProjectHeaderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectHeaderCell.swift; sourceTree = "<group>"; };
470B771926FCDC8900EBD5CA /* RiskMessagingViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RiskMessagingViewModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -6547,6 +6549,7 @@
395A3BC82BA8D43F0091A379 /* PostCampaignCheckoutViewModel.swift */,
E1972EA12BB4722D002517E6 /* PostCampaignCheckoutViewModelTests.swift */,
6044532D2BA0905600B8F485 /* PostCampaignPledgeRewardsSummaryViewModel.swift */,
39C6169D2BC83DB000732410 /* PostCampaignPledgeRewardsSummaryViewModelTests.swift */,
A7808BEF1D625C6A001CF96A /* ProjectCreatorViewModel.swift */,
A7ED1F971E831C5C00BFFA01 /* ProjectCreatorViewModelTests.swift */,
4751A676272B31D000F81DD5 /* ProjectTabCategoryDescriptionCellViewModel.swift */,
Expand Down Expand Up @@ -8163,6 +8166,7 @@
77C9122B23C5079200F3D2C9 /* MockApplePayCapable.swift in Sources */,
D08CD201219216BA009F89F0 /* WatchProjectViewModelTests.swift in Sources */,
A7ED1F291E830FDC00BFFA01 /* EnvironmentTests.swift in Sources */,
39C6169E2BC83DB000732410 /* PostCampaignPledgeRewardsSummaryViewModelTests.swift in Sources */,
A7ED1F2E1E830FDC00BFFA01 /* LaunchedCountriesTests.swift in Sources */,
3705CF48222EE77F0025D37E /* EnvironmentVariablesTests.swift in Sources */,
194154D628D931AA004648C8 /* CreatePaymentSourceSetupIntentClientSecret+ConstructorTests.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,11 @@ private func items(
guard let title = reward.title else { return nil }

let quantity = selectedQuantities[reward.id] ?? 0

let itemString = quantity > 1 ? "\(Format.wholeNumber(quantity)) x \(title)" : title

let amount = quantity > 1 ? reward.minimum * Double(quantity) : reward.minimum
let amountAttributedText = attributedRewardCurrency(
with: data.projectCountry, amount: reward.minimum, omitUSCurrencyCode: data.omitCurrencyCode
with: data.projectCountry, amount: amount, omitUSCurrencyCode: data.omitCurrencyCode
)

return PledgeExpandableRewardsHeaderItem.reward((
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ final class PledgeExpandableRewardsHeaderViewModelTests: TestCase {

let data = PledgeExpandableRewardsHeaderViewData(
rewards: [reward1, reward2, reward3],
selectedQuantities: [reward1.id: 1, reward2.id: 1, reward3.id: 2],
selectedQuantities: [reward1.id: 1, reward2.id: 2, reward3.id: 3],
projectCountry: .us,
omitCurrencyCode: false
)
Expand All @@ -58,7 +58,7 @@ final class PledgeExpandableRewardsHeaderViewModelTests: TestCase {
XCTAssertEqual(itemData.count, 4)

XCTAssertEqual(itemData[0].data.text, "Estimated delivery October 2016")
XCTAssertEqual(itemData[0].data.amount.string, " US$ 160")
XCTAssertEqual(itemData[0].data.amount.string, " US$ 220")
XCTAssertEqual(itemData[0].isHeader, true)
XCTAssertEqual(itemData[0].isReward, false)

Expand All @@ -67,13 +67,13 @@ final class PledgeExpandableRewardsHeaderViewModelTests: TestCase {
XCTAssertEqual(itemData[1].isHeader, false)
XCTAssertEqual(itemData[1].isReward, true)

XCTAssertEqual(itemData[2].data.text, "Reward 2")
XCTAssertEqual(itemData[2].data.amount.string, "US$ 20")
XCTAssertEqual(itemData[2].data.text, "2 x Reward 2")
XCTAssertEqual(itemData[2].data.amount.string, "US$ 40")
XCTAssertEqual(itemData[2].isHeader, false)
XCTAssertEqual(itemData[2].isReward, true)

XCTAssertEqual(itemData[3].data.text, "2 x Reward 3")
XCTAssertEqual(itemData[3].data.amount.string, "US$ 40")
XCTAssertEqual(itemData[3].data.text, "3 x Reward 3")
XCTAssertEqual(itemData[3].data.amount.string, "US$ 120")
XCTAssertEqual(itemData[3].isHeader, false)
XCTAssertEqual(itemData[3].isReward, true)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,11 +160,11 @@ private func items(
guard let title = reward.title else { return nil }

let quantity = selectedQuantities[reward.id] ?? 0

let itemString = quantity > 1 ? "\(Format.wholeNumber(quantity)) x \(title)" : title

let amount = quantity > 1 ? reward.minimum * Double(quantity) : reward.minimum
let amountAttributedText = attributedRewardCurrency(
with: data.projectCountry, amount: reward.minimum, omitUSCurrencyCode: data.omitCurrencyCode
with: data.projectCountry, amount: amount, omitUSCurrencyCode: data.omitCurrencyCode
)

return PostCampaignRewardsSummaryItem.reward((
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
@testable import KsApi
@testable import Library
import Prelude
import ReactiveExtensions_TestHelpers
import XCTest

final class PostCampaignPledgeRewardsSummaryViewModelTests: TestCase {
internal let vm: PostCampaignPledgeRewardsSummaryViewModelType =
PostCampaignPledgeRewardsSummaryViewModel()

private let loadRewardsIntoDataSource = TestObserver<[PostCampaignRewardsSummaryItem], Never>()

override func setUp() {
super.setUp()

self.vm.outputs.loadRewardsIntoDataSource.observe(self.loadRewardsIntoDataSource.observer)
}

func testLoadRewardsIntoDataSource() {
self.loadRewardsIntoDataSource.assertDidNotEmitValue()

let reward1 = Reward.template
|> Reward.lens.id .~ Int(1)
|> Reward.lens.title .~ "Reward 1"
|> Reward.lens.estimatedDeliveryOn .~ 1_475_361_315
|> Reward.lens.minimum .~ 60

let reward2 = Reward.template
|> Reward.lens.id .~ Int(2)
|> Reward.lens.title .~ "Reward 2"
|> Reward.lens.estimatedDeliveryOn .~ 1_475_461_315
|> Reward.lens.minimum .~ 20

let reward3 = Reward.template
|> Reward.lens.id .~ Int(3)
|> Reward.lens.title .~ "Reward 3"
|> Reward.lens.estimatedDeliveryOn .~ 1_475_561_315
|> Reward.lens.minimum .~ 40

let bonus = 10.0
let total: Double = 60.0 + 2 * 20.0 + 3 * 40.0 + bonus

let rewardsData = PostCampaignRewardsSummaryViewData(
rewards: [reward1, reward2, reward3],
selectedQuantities: [reward1.id: 1, reward2.id: 2, reward3.id: 3],
projectCountry: .us,
omitCurrencyCode: false,
shipping: nil
)

let pledgeData = PledgeSummaryViewData(
project: Project.template,
total: total,
confirmationLabelHidden: true
)

self.vm.inputs.configureWith(
rewardsData: rewardsData,
bonusAmount: bonus,
pledgeData: pledgeData
)

self.vm.inputs.viewDidLoad()

self.loadRewardsIntoDataSource.assertValueCount(1)

guard let itemData = self.loadRewardsIntoDataSource.lastValue else {
XCTFail("Should have data")
return
}

XCTAssertEqual(itemData.count, 5)

XCTAssertEqual(itemData[0].data.text, "Estimated delivery October 2016")
XCTAssertEqual(itemData[0].data.amount.string, "")
XCTAssertEqual(itemData[0].isHeader, true)
XCTAssertEqual(itemData[0].isReward, false)

XCTAssertEqual(itemData[1].data.text, "Reward 1")
XCTAssertEqual(itemData[1].data.amount.string, "US$ 60")
XCTAssertEqual(itemData[1].isHeader, false)
XCTAssertEqual(itemData[1].isReward, true)

XCTAssertEqual(itemData[2].data.text, "2 x Reward 2")
XCTAssertEqual(itemData[2].data.amount.string, "US$ 40")
XCTAssertEqual(itemData[2].isHeader, false)
XCTAssertEqual(itemData[2].isReward, true)

XCTAssertEqual(itemData[3].data.text, "3 x Reward 3")
XCTAssertEqual(itemData[3].data.amount.string, "US$ 120")
XCTAssertEqual(itemData[3].isHeader, false)
XCTAssertEqual(itemData[3].isReward, true)

XCTAssertEqual(itemData[4].data.text, "Bonus support")
XCTAssertEqual(itemData[4].data.amount.string, "US$ 10")
XCTAssertEqual(itemData[4].isHeader, false)
XCTAssertEqual(itemData[4].isReward, true)
}
}

0 comments on commit c9585e6

Please sign in to comment.