diff --git a/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewController.swift b/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewController.swift index 33b5bc422d..d47b5324fd 100644 --- a/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewController.swift +++ b/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewController.swift @@ -100,16 +100,14 @@ final class PledgePaymentPlansViewController: UIViewController { type: .pledgeInFull, selectedType: data.selectedPlan, paymentIncrements: data.paymentIncrements, - project: data.project, - thresholdAmount: data.thresholdAmount + project: data.project )) self.pledgeOverTimeOption.configureWith(value: PledgePaymentPlanOptionData( ineligible: data.ineligible, type: .pledgeOverTime, selectedType: data.selectedPlan, paymentIncrements: data.paymentIncrements, - project: data.project, - thresholdAmount: data.thresholdAmount + project: data.project )) } diff --git a/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewControllerTest.swift b/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewControllerTest.swift index 24e39c0a89..14b1e5babc 100644 --- a/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewControllerTest.swift +++ b/Kickstarter-iOS/Features/PledgeOverTime/Controller/PledgePaymentPlansViewControllerTest.swift @@ -6,7 +6,6 @@ import SnapshotTesting import UIKit final class PledgePaymentPlansViewControllerTest: TestCase { - private let thresholdAmount = 125.0 override func setUp() { super.setUp() AppEnvironment.pushEnvironment(mainBundle: Bundle.framework) @@ -46,8 +45,7 @@ final class PledgePaymentPlansViewControllerTest: TestCase { let data = PledgePaymentPlansAndSelectionData( selectedPlan: .pledgeInFull, - project: project, - thresholdAmount: thresholdAmount + project: project ) controller.configure(with: data) @@ -73,8 +71,7 @@ final class PledgePaymentPlansViewControllerTest: TestCase { selectedPlan: .pledgeOverTime, increments: testIncrements, ineligible: false, - project: project, - thresholdAmount: thresholdAmount + project: project ) controller.configure(with: data) @@ -103,8 +100,7 @@ final class PledgePaymentPlansViewControllerTest: TestCase { selectedPlan: .pledgeInFull, increments: testPledgePaymentIncrement(), ineligible: true, - project: Project.template, - thresholdAmount: self.thresholdAmount + project: Project.template ) controller.configure(with: data) diff --git a/Kickstarter-iOS/Features/PledgePaymentMethods/Controller/PledgeRewardsSummaryTotalViewControllerTests.swift b/Kickstarter-iOS/Features/PledgePaymentMethods/Controller/PledgeRewardsSummaryTotalViewControllerTests.swift index 4fc5a5d043..ddf9b3c50e 100644 --- a/Kickstarter-iOS/Features/PledgePaymentMethods/Controller/PledgeRewardsSummaryTotalViewControllerTests.swift +++ b/Kickstarter-iOS/Features/PledgePaymentMethods/Controller/PledgeRewardsSummaryTotalViewControllerTests.swift @@ -114,8 +114,7 @@ final class PledgeRewardsSummaryTotalViewControllerTests: TestCase { selectedPlan: .pledgeInFull, increments: paymentIncrements, ineligible: false, - project: project, - thresholdAmount: 125.0 + project: project ) controller.configureWith(pledgeOverTimeData: plotData) @@ -161,8 +160,7 @@ final class PledgeRewardsSummaryTotalViewControllerTests: TestCase { selectedPlan: .pledgeOverTime, increments: paymentIncrements, ineligible: false, - project: project, - thresholdAmount: 125.0 + project: project ) controller.configureWith(pledgeOverTimeData: plotData) diff --git a/KsApi/GraphAPI.swift b/KsApi/GraphAPI.swift index 5d12150955..5c3c54332c 100644 --- a/KsApi/GraphAPI.swift +++ b/KsApi/GraphAPI.swift @@ -17900,6 +17900,7 @@ public enum GraphAPI { minPledge name pid + pledgeOverTimeMinimumExplanation pledged { __typename ...MoneyFragment @@ -17975,6 +17976,7 @@ public enum GraphAPI { GraphQLField("minPledge", type: .nonNull(.scalar(Int.self))), GraphQLField("name", type: .nonNull(.scalar(String.self))), GraphQLField("pid", type: .nonNull(.scalar(Int.self))), + GraphQLField("pledgeOverTimeMinimumExplanation", type: .scalar(String.self)), GraphQLField("pledged", type: .nonNull(.object(Pledged.selections))), GraphQLField("postCampaignPledgingEnabled", type: .nonNull(.scalar(Bool.self))), GraphQLField("posts", type: .object(Post.selections)), @@ -17999,8 +18001,8 @@ public enum GraphAPI { self.resultMap = unsafeResultMap } - public init(availableCardTypes: [CreditCardTypes], backersCount: Int, category: Category? = nil, canComment: Bool, commentsCount: Int, country: Country, creator: Creator? = nil, currency: CurrencyCode, deadlineAt: String? = nil, description: String, environmentalCommitments: [EnvironmentalCommitment?]? = nil, aiDisclosure: AiDisclosure? = nil, faqs: Faq? = nil, finalCollectionDate: String? = nil, fxRate: Double, goal: Goal? = nil, image: Image? = nil, isPledgeOverTimeAllowed: Bool, isProjectWeLove: Bool, isProjectOfTheDay: Bool? = nil, isWatched: Bool, isLaunched: Bool, isInPostCampaignPledgingPhase: Bool, launchedAt: String? = nil, location: Location? = nil, maxPledge: Int, minPledge: Int, name: String, pid: Int, pledged: Pledged, postCampaignPledgingEnabled: Bool, posts: Post? = nil, prelaunchActivated: Bool, risks: String, sendMetaCapiEvents: Bool, slug: String, state: ProjectState, stateChangedAt: String, story: String, tags: [Tag?], url: String, usdExchangeRate: Double? = nil, video: Video? = nil, watchesCount: Int? = nil) { - self.init(unsafeResultMap: ["__typename": "Project", "availableCardTypes": availableCardTypes, "backersCount": backersCount, "category": category.flatMap { (value: Category) -> ResultMap in value.resultMap }, "canComment": canComment, "commentsCount": commentsCount, "country": country.resultMap, "creator": creator.flatMap { (value: Creator) -> ResultMap in value.resultMap }, "currency": currency, "deadlineAt": deadlineAt, "description": description, "environmentalCommitments": environmentalCommitments.flatMap { (value: [EnvironmentalCommitment?]) -> [ResultMap?] in value.map { (value: EnvironmentalCommitment?) -> ResultMap? in value.flatMap { (value: EnvironmentalCommitment) -> ResultMap in value.resultMap } } }, "aiDisclosure": aiDisclosure.flatMap { (value: AiDisclosure) -> ResultMap in value.resultMap }, "faqs": faqs.flatMap { (value: Faq) -> ResultMap in value.resultMap }, "finalCollectionDate": finalCollectionDate, "fxRate": fxRate, "goal": goal.flatMap { (value: Goal) -> ResultMap in value.resultMap }, "image": image.flatMap { (value: Image) -> ResultMap in value.resultMap }, "isPledgeOverTimeAllowed": isPledgeOverTimeAllowed, "isProjectWeLove": isProjectWeLove, "isProjectOfTheDay": isProjectOfTheDay, "isWatched": isWatched, "isLaunched": isLaunched, "isInPostCampaignPledgingPhase": isInPostCampaignPledgingPhase, "launchedAt": launchedAt, "location": location.flatMap { (value: Location) -> ResultMap in value.resultMap }, "maxPledge": maxPledge, "minPledge": minPledge, "name": name, "pid": pid, "pledged": pledged.resultMap, "postCampaignPledgingEnabled": postCampaignPledgingEnabled, "posts": posts.flatMap { (value: Post) -> ResultMap in value.resultMap }, "prelaunchActivated": prelaunchActivated, "risks": risks, "sendMetaCapiEvents": sendMetaCapiEvents, "slug": slug, "state": state, "stateChangedAt": stateChangedAt, "story": story, "tags": tags.map { (value: Tag?) -> ResultMap? in value.flatMap { (value: Tag) -> ResultMap in value.resultMap } }, "url": url, "usdExchangeRate": usdExchangeRate, "video": video.flatMap { (value: Video) -> ResultMap in value.resultMap }, "watchesCount": watchesCount]) + public init(availableCardTypes: [CreditCardTypes], backersCount: Int, category: Category? = nil, canComment: Bool, commentsCount: Int, country: Country, creator: Creator? = nil, currency: CurrencyCode, deadlineAt: String? = nil, description: String, environmentalCommitments: [EnvironmentalCommitment?]? = nil, aiDisclosure: AiDisclosure? = nil, faqs: Faq? = nil, finalCollectionDate: String? = nil, fxRate: Double, goal: Goal? = nil, image: Image? = nil, isPledgeOverTimeAllowed: Bool, isProjectWeLove: Bool, isProjectOfTheDay: Bool? = nil, isWatched: Bool, isLaunched: Bool, isInPostCampaignPledgingPhase: Bool, launchedAt: String? = nil, location: Location? = nil, maxPledge: Int, minPledge: Int, name: String, pid: Int, pledgeOverTimeMinimumExplanation: String? = nil, pledged: Pledged, postCampaignPledgingEnabled: Bool, posts: Post? = nil, prelaunchActivated: Bool, risks: String, sendMetaCapiEvents: Bool, slug: String, state: ProjectState, stateChangedAt: String, story: String, tags: [Tag?], url: String, usdExchangeRate: Double? = nil, video: Video? = nil, watchesCount: Int? = nil) { + self.init(unsafeResultMap: ["__typename": "Project", "availableCardTypes": availableCardTypes, "backersCount": backersCount, "category": category.flatMap { (value: Category) -> ResultMap in value.resultMap }, "canComment": canComment, "commentsCount": commentsCount, "country": country.resultMap, "creator": creator.flatMap { (value: Creator) -> ResultMap in value.resultMap }, "currency": currency, "deadlineAt": deadlineAt, "description": description, "environmentalCommitments": environmentalCommitments.flatMap { (value: [EnvironmentalCommitment?]) -> [ResultMap?] in value.map { (value: EnvironmentalCommitment?) -> ResultMap? in value.flatMap { (value: EnvironmentalCommitment) -> ResultMap in value.resultMap } } }, "aiDisclosure": aiDisclosure.flatMap { (value: AiDisclosure) -> ResultMap in value.resultMap }, "faqs": faqs.flatMap { (value: Faq) -> ResultMap in value.resultMap }, "finalCollectionDate": finalCollectionDate, "fxRate": fxRate, "goal": goal.flatMap { (value: Goal) -> ResultMap in value.resultMap }, "image": image.flatMap { (value: Image) -> ResultMap in value.resultMap }, "isPledgeOverTimeAllowed": isPledgeOverTimeAllowed, "isProjectWeLove": isProjectWeLove, "isProjectOfTheDay": isProjectOfTheDay, "isWatched": isWatched, "isLaunched": isLaunched, "isInPostCampaignPledgingPhase": isInPostCampaignPledgingPhase, "launchedAt": launchedAt, "location": location.flatMap { (value: Location) -> ResultMap in value.resultMap }, "maxPledge": maxPledge, "minPledge": minPledge, "name": name, "pid": pid, "pledgeOverTimeMinimumExplanation": pledgeOverTimeMinimumExplanation, "pledged": pledged.resultMap, "postCampaignPledgingEnabled": postCampaignPledgingEnabled, "posts": posts.flatMap { (value: Post) -> ResultMap in value.resultMap }, "prelaunchActivated": prelaunchActivated, "risks": risks, "sendMetaCapiEvents": sendMetaCapiEvents, "slug": slug, "state": state, "stateChangedAt": stateChangedAt, "story": story, "tags": tags.map { (value: Tag?) -> ResultMap? in value.flatMap { (value: Tag) -> ResultMap in value.resultMap } }, "url": url, "usdExchangeRate": usdExchangeRate, "video": video.flatMap { (value: Video) -> ResultMap in value.resultMap }, "watchesCount": watchesCount]) } public var __typename: String { @@ -18301,6 +18303,16 @@ public enum GraphAPI { } } + /// The minimum pledge amount to be eligible for PLOT, localized to the project currency and backer language + public var pledgeOverTimeMinimumExplanation: String? { + get { + return resultMap["pledgeOverTimeMinimumExplanation"] as? String + } + set { + resultMap.updateValue(newValue, forKey: "pledgeOverTimeMinimumExplanation") + } + } + /// How much money is pledged to the project. public var pledged: Pledged { get { diff --git a/KsApi/fragments/ProjectFragment.graphql b/KsApi/fragments/ProjectFragment.graphql index 8e13398403..b5996ea164 100644 --- a/KsApi/fragments/ProjectFragment.graphql +++ b/KsApi/fragments/ProjectFragment.graphql @@ -64,6 +64,7 @@ fragment ProjectFragment on Project { minPledge name pid + pledgeOverTimeMinimumExplanation pledged { ...MoneyFragment } diff --git a/KsApi/graphql-schema.json b/KsApi/graphql-schema.json index 8f78f45cce..7c56830164 100644 --- a/KsApi/graphql-schema.json +++ b/KsApi/graphql-schema.json @@ -5032,16 +5032,32 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "amountCollectedForPledgeManagerAddons", + "description": "The total amount collected for add-ons in the pledge manager", + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "amountCollectedForShipping", - "description": "The total amount collected for shipping during pledge redemption", + "description": "The total amount collected for shipping in the pledge manager", "args": [], "type": { "kind": "NON_NULL", "name": null, "ofType": { "kind": "SCALAR", - "name": "Int", + "name": "String", "ofType": null } }, @@ -5234,7 +5250,7 @@ }, { "name": "backersRemainingForPledgeRedemption", - "description": "The number of backers who have yet to go through pledge redemption", + "description": "The number of backers who have yet to go through the pledge manager", "args": [], "type": { "kind": "NON_NULL", @@ -6758,6 +6774,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "pledgeOverTimeMinimumExplanation", + "description": "The minimum pledge amount to be eligible for PLOT, localized to the project currency and backer language", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "pledged", "description": "How much money is pledged to the project.", diff --git a/KsApi/models/Project.swift b/KsApi/models/Project.swift index 53cecf66c4..85a1b794bf 100644 --- a/KsApi/models/Project.swift +++ b/KsApi/models/Project.swift @@ -16,6 +16,7 @@ public struct Project { public var id: Int public var location: Location public var name: String + public var pledgeOverTimeMinimumExplanation: String public var personalization: Personalization public var photo: Photo public var isInPostCampaignPledgingPhase: Bool @@ -281,6 +282,7 @@ extension Project: Decodable { case location case name case photo + case pledgeOverTimeMinimumExplanation = "pledge_over_time_minimum_explanation" case isInPostCampaignPledgingPhase = "is_in_post_campaign_pledging_phase" case postCampaignPledgingEnabled = "post_campaign_pledging_enabled" case prelaunchActivated = "prelaunch_activated" @@ -313,6 +315,10 @@ extension Project: Decodable { self.photo = try values.decode(Photo.self, forKey: .photo) self.isInPostCampaignPledgingPhase = try values.decodeIfPresent(Bool.self, forKey: .isInPostCampaignPledgingPhase) ?? false + self.pledgeOverTimeMinimumExplanation = try values.decodeIfPresent( + String.self, + forKey: .pledgeOverTimeMinimumExplanation + ) ?? "" self.postCampaignPledgingEnabled = try values.decodeIfPresent(Bool.self, forKey: .postCampaignPledgingEnabled) ?? false self.prelaunchActivated = try values.decodeIfPresent(Bool.self, forKey: .prelaunchActivated) diff --git a/KsApi/models/graphql/adapters/Backing+BackingFragmentTests.swift b/KsApi/models/graphql/adapters/Backing+BackingFragmentTests.swift index 6113034754..bc253f33a0 100644 --- a/KsApi/models/graphql/adapters/Backing+BackingFragmentTests.swift +++ b/KsApi/models/graphql/adapters/Backing+BackingFragmentTests.swift @@ -702,6 +702,7 @@ private func backingDictionary() -> [String: Any] { "MASTERCARD", "AMEX" ], + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "backersCount": 135, "backing": { "__typename": "Backing", @@ -1006,6 +1007,7 @@ private func backingDictionary() -> [String: Any] { "__typename": "ProjectBackerFriendsConnection", "nodes": [] }, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "isWatched": false }, "remainingQuantity": null, diff --git a/KsApi/models/graphql/adapters/Project+ProjectFragment.swift b/KsApi/models/graphql/adapters/Project+ProjectFragment.swift index 3fe102f259..f33d3a1e0d 100644 --- a/KsApi/models/graphql/adapters/Project+ProjectFragment.swift +++ b/KsApi/models/graphql/adapters/Project+ProjectFragment.swift @@ -82,6 +82,7 @@ extension Project { id: projectFragment.pid, location: location, name: projectFragment.name, + pledgeOverTimeMinimumExplanation: "Available for pledges over $125", personalization: projectPersonalization( isStarred: projectFragment.isWatched, backing: backing, diff --git a/KsApi/models/graphql/adapters/Project+ProjectFragmentTests.swift b/KsApi/models/graphql/adapters/Project+ProjectFragmentTests.swift index 0c09e86621..7644a07c52 100644 --- a/KsApi/models/graphql/adapters/Project+ProjectFragmentTests.swift +++ b/KsApi/models/graphql/adapters/Project+ProjectFragmentTests.swift @@ -66,6 +66,7 @@ final class Project_ProjectFragmentTests: XCTestCase { XCTAssertNil(project.rewardData.addOns) XCTAssertEqual(project.sendMetaCapiEvents, false) XCTAssertEqual(project.watchesCount, 18) + XCTAssertEqual(project.pledgeOverTimeMinimumExplanation, "Available for pledges over $125") XCTAssertFalse(project.isPledgeOverTimeAllowed!) guard let extendedProjectProperties = project.extendedProjectProperties, @@ -400,6 +401,7 @@ final class Project_ProjectFragmentTests: XCTestCase { "minPledge": 23, "name":"FINAL GAMBLE Issue #1", "pid":1841936784, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "pledged":{ "__typename":"Money", "amount":"3567.0", diff --git a/KsApi/models/lenses/ProjectLenses.swift b/KsApi/models/lenses/ProjectLenses.swift index a712718cf1..5eb53e5e26 100644 --- a/KsApi/models/lenses/ProjectLenses.swift +++ b/KsApi/models/lenses/ProjectLenses.swift @@ -26,7 +26,9 @@ extension Project { creator: $1.creator, extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -44,7 +46,9 @@ extension Project { creator: $1.creator, extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -62,7 +66,9 @@ extension Project { country: $1.country, creator: $1.creator, extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -81,7 +87,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -99,7 +107,9 @@ extension Project { creator: $1.creator, extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -118,7 +128,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -137,7 +149,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $0, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -155,7 +169,9 @@ extension Project { country: $1.country, creator: $1.creator, extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $0, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -173,7 +189,9 @@ extension Project { country: $1.country, creator: $1.creator, extendedProjectProperties: $0, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -192,7 +210,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $0, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -211,7 +231,8 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $0, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $0, name: $1.name, pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -230,7 +251,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $0, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -249,7 +272,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $0, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $0, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -268,7 +293,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $0, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, personalization: $0, + photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -287,7 +314,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $0, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $0, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -306,7 +335,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $0, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -317,6 +348,26 @@ extension Project { ) } ) + public static let pledgeOverTimeMinimumExplanation = Lens( + view: { $0.pledgeOverTimeMinimumExplanation }, + set: { Project( + availableCardTypes: $1.availableCardTypes, blurb: $1.blurb, category: $1.category, + country: $1.country, creator: $1.creator, + extendedProjectProperties: $1.extendedProjectProperties, + memberData: $1.memberData, dates: $1.dates, + displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, + location: $1.location, name: $1.name, pledgeOverTimeMinimumExplanation: $0, + personalization: $1.personalization, photo: $1.photo, + isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, + postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, + prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, + sendMetaCapiEvents: $1.sendMetaCapiEvents, slug: $1.slug, + staffPick: $1.staffPick, state: $1.state, stats: $1.stats, tags: $1.tags, urls: $1.urls, + video: $1.video, watchesCount: $1.watchesCount, + isPledgeOverTimeAllowed: $1.isPledgeOverTimeAllowed + ) } + ) + public static let postCampaignPledgingEnabled = Lens( view: { $0.postCampaignPledgingEnabled }, set: { Project( @@ -325,7 +376,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $0, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -344,7 +397,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $0, rewardData: $1.rewardData, sendMetaCapiEvents: $1.sendMetaCapiEvents, @@ -363,7 +418,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $0, sendMetaCapiEvents: $1.sendMetaCapiEvents, @@ -382,7 +439,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, sendMetaCapiEvents: $0, @@ -402,7 +461,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -422,7 +483,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -441,7 +504,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -460,7 +525,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -479,7 +546,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -498,7 +567,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -517,7 +588,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, @@ -536,7 +609,9 @@ extension Project { extendedProjectProperties: $1.extendedProjectProperties, memberData: $1.memberData, dates: $1.dates, displayPrelaunch: $1.displayPrelaunch, flagging: $1.flagging, id: $1.id, - location: $1.location, name: $1.name, personalization: $1.personalization, photo: $1.photo, + location: $1.location, name: $1.name, + pledgeOverTimeMinimumExplanation: $1.pledgeOverTimeMinimumExplanation, + personalization: $1.personalization, photo: $1.photo, isInPostCampaignPledgingPhase: $1.isInPostCampaignPledgingPhase, postCampaignPledgingEnabled: $1.postCampaignPledgingEnabled, prelaunchActivated: $1.prelaunchActivated, rewardData: $1.rewardData, diff --git a/KsApi/models/templates/ProjectTemplates.swift b/KsApi/models/templates/ProjectTemplates.swift index fb9f971152..da743e5de3 100644 --- a/KsApi/models/templates/ProjectTemplates.swift +++ b/KsApi/models/templates/ProjectTemplates.swift @@ -36,6 +36,7 @@ extension Project { id: 1, location: .template, name: "The Project", + pledgeOverTimeMinimumExplanation: "Available for pledges over $125", personalization: Project.Personalization( backing: nil, friends: nil, diff --git a/KsApi/queries/templates/FetchMyBackedProjectsQuery.json b/KsApi/queries/templates/FetchMyBackedProjectsQuery.json index 9621bd1a72..0a7d6e1844 100644 --- a/KsApi/queries/templates/FetchMyBackedProjectsQuery.json +++ b/KsApi/queries/templates/FetchMyBackedProjectsQuery.json @@ -28,6 +28,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 0, "country": { "__typename": "Country", @@ -184,6 +185,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 1, "country": { "__typename": "Country", @@ -376,6 +378,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 0, "country": { "__typename": "Country", diff --git a/KsApi/queries/templates/FetchMySavedProjectsQuery.json b/KsApi/queries/templates/FetchMySavedProjectsQuery.json index 01f33c0e00..ca1b527185 100644 --- a/KsApi/queries/templates/FetchMySavedProjectsQuery.json +++ b/KsApi/queries/templates/FetchMySavedProjectsQuery.json @@ -28,6 +28,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 0, "country": { "__typename": "Country", @@ -374,6 +375,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 505, "country": { "__typename": "Country", @@ -674,6 +676,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 662, "country": { "__typename": "Country", @@ -1109,6 +1112,7 @@ } }, "canComment": true, + "pledgeOverTimeMinimumExplanation": "Available for pledges over $125", "commentsCount": 1, "country": { "__typename": "Country", diff --git a/Library/ViewModels/PLOTPledgeViewModel.swift b/Library/ViewModels/PLOTPledgeViewModel.swift index 3bd2e3e732..73174d3f96 100644 --- a/Library/ViewModels/PLOTPledgeViewModel.swift +++ b/Library/ViewModels/PLOTPledgeViewModel.swift @@ -109,17 +109,12 @@ public final class PLOTPledgeViewModel: PLOTPledgeViewModelInputs, PLOTPledgeVie // even when the API request fails or Pledge Over Time is disabled. guard let paymentPlan = pledgeOverTimeApiValues?.project?.paymentPlan else { return nil } - // TODO: Temporary placeholder to simulate the ineligible state for plans. - // The `thresholdAmount` will be retrieved from the API in the future. - // See [MBL-1838](https://kickstarter.atlassian.net/browse/MBL-1838) for implementation details. - let thresholdAmount = 125.0 let defaultPlan = PledgePaymentPlansType.pledgeInFull return PledgePaymentPlansAndSelectionData( withPaymentPlanFragment: paymentPlan, selectedPlan: defaultPlan, - project: project, - thresholdAmount: thresholdAmount + project: project ) } @@ -131,8 +126,7 @@ public final class PLOTPledgeViewModel: PLOTPledgeViewModelInputs, PLOTPledgeVie selectedPlan: selectedPlan, increments: data.paymentIncrements, ineligible: data.ineligible, - project: data.project, - thresholdAmount: data.thresholdAmount + project: data.project ) } diff --git a/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPI.swift b/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPI.swift index e2f48b1261..3c876e775d 100644 --- a/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPI.swift +++ b/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPI.swift @@ -4,8 +4,7 @@ extension PledgePaymentPlansAndSelectionData { public init( withPaymentPlanFragment paymentPlan: GraphAPI.BuildPaymentPlanQuery.Data.Project.PaymentPlan, selectedPlan: PledgePaymentPlansType, - project: Project, - thresholdAmount: Double + project: Project ) { var increments: [PledgePaymentIncrement] = [] @@ -18,8 +17,7 @@ extension PledgePaymentPlansAndSelectionData { selectedPlan: selectedPlan, increments: increments, ineligible: !paymentPlan.amountIsPledgeOverTimeEligible, - project: project, - thresholdAmount: thresholdAmount + project: project ) } } diff --git a/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPITests.swift b/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPITests.swift index 19cf7f0e20..cff84a8e66 100644 --- a/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPITests.swift +++ b/Library/ViewModels/PledgePaymentPlansAndSelectionData+GraphAPITests.swift @@ -39,8 +39,7 @@ final class PledgePaymentPlansAndSelectionDataGraphAPITests: TestCase { let selectionData = PledgePaymentPlansAndSelectionData( withPaymentPlanFragment: paymentPlan, selectedPlan: .pledgeInFull, - project: Project.template, - thresholdAmount: 125 + project: Project.template ) XCTAssertFalse(selectionData.ineligible) diff --git a/Library/ViewModels/PledgePaymentPlansOptionViewModel.swift b/Library/ViewModels/PledgePaymentPlansOptionViewModel.swift index e4a888e770..03a8d5cf7d 100644 --- a/Library/ViewModels/PledgePaymentPlansOptionViewModel.swift +++ b/Library/ViewModels/PledgePaymentPlansOptionViewModel.swift @@ -9,22 +9,19 @@ public struct PledgePaymentPlanOptionData: Equatable { // TODO: replece with API model in [MBL-1838](https://kickstarter.atlassian.net/browse/MBL-1838) public var paymentIncrements: [PledgePaymentIncrement] public var project: Project - public var thresholdAmount: Double public init( ineligible: Bool, type: PledgePaymentPlansType, selectedType: PledgePaymentPlansType, paymentIncrements: [PledgePaymentIncrement], - project: Project, - thresholdAmount: Double + project: Project ) { self.ineligible = ineligible self.type = type self.selectedType = selectedType self.paymentIncrements = paymentIncrements self.project = project - self.thresholdAmount = thresholdAmount } } @@ -123,7 +120,7 @@ public final class PledgePaymentPlansOptionViewModel: self.ineligibleBadgeText = configData .filterWhenLatestFrom(ineligible, satisfies: { $0 == true }) - .map { getIneligibleBadgeText(with: $0.project, thresholdAmount: $0.thresholdAmount) } + .map { $0.project.pledgeOverTimeMinimumExplanation } } fileprivate let configData = MutableProperty(nil) @@ -199,18 +196,6 @@ private func getDateFormatted(_ timeStamp: TimeInterval) -> String { ) } -private func getIneligibleBadgeText(with project: Project, thresholdAmount: Double) -> String { - let projectCurrencyCountry = projectCountry(forCurrency: project.stats.currency) ?? project.country - let thresholdAmountFormatted = Format.currency( - thresholdAmount, - country: projectCurrencyCountry, - omitCurrencyCode: project.stats.omitUSCurrencyCode - ) - - // TODO: add strings translations [MBL-1860](https://kickstarter.atlassian.net/browse/MBL-1860) - return "Available for pledges over \(thresholdAmountFormatted)" -} - extension PledgePaymentIncrementFormatted { init(from increment: PledgePaymentIncrement, index: Int, project: Project) { let projectCurrencyCountry = projectCountry(forCurrency: project.stats.currency) ?? project.country diff --git a/Library/ViewModels/PledgePaymentPlansOptionViewModelTest.swift b/Library/ViewModels/PledgePaymentPlansOptionViewModelTest.swift index e5b425960c..b0e90fd578 100644 --- a/Library/ViewModels/PledgePaymentPlansOptionViewModelTest.swift +++ b/Library/ViewModels/PledgePaymentPlansOptionViewModelTest.swift @@ -32,7 +32,6 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { "You will be charged for your pledge over four payments, at no extra cost.\n\nThe first charge will be 24 hours after the project ends successfully, then every 2 weeks until fully paid. When this option is selected no further edits can be made to your pledge." private let selectedImageName = "icon-payment-method-selected" private let unselectedImageName = "icon-payment-method-unselected" - private let thresholdAmount = 125.0 // MARK: Lifecycle @@ -60,8 +59,7 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { type: .pledgeInFull, selectedType: .pledgeInFull, paymentIncrements: mockPaymentIncrements(), - project: Project.template, - thresholdAmount: self.thresholdAmount + project: Project.template ) self.vm.inputs.configureWith(data: data) @@ -81,8 +79,7 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { type: .pledgeInFull, selectedType: .pledgeOverTime, paymentIncrements: mockPaymentIncrements(), - project: Project.template, - thresholdAmount: self.thresholdAmount + project: Project.template ) self.vm.inputs.configureWith(data: data) @@ -106,8 +103,7 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { type: .pledgeOverTime, selectedType: .pledgeOverTime, paymentIncrements: increments, - project: project, - thresholdAmount: self.thresholdAmount + project: project ) self.vm.inputs.configureWith(data: data) @@ -130,8 +126,7 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { type: .pledgeOverTime, selectedType: .pledgeInFull, paymentIncrements: mockPaymentIncrements(), - project: Project.template, - thresholdAmount: self.thresholdAmount + project: Project.template ) self.vm.inputs.configureWith(data: data) @@ -152,8 +147,7 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { type: .pledgeOverTime, selectedType: .pledgeInFull, paymentIncrements: mockPaymentIncrements(), - project: Project.template, - thresholdAmount: self.thresholdAmount + project: Project.template ) self.vm.inputs.configureWith(data: data) self.vm.inputs.optionTapped() @@ -170,8 +164,7 @@ final class PledgePaymentPlansOptionViewModelTest: TestCase { type: .pledgeOverTime, selectedType: .pledgeInFull, paymentIncrements: [], - project: project, - thresholdAmount: self.thresholdAmount + project: project ) self.vm.inputs.configureWith(data: data) diff --git a/Library/ViewModels/PledgePaymentPlansViewModel.swift b/Library/ViewModels/PledgePaymentPlansViewModel.swift index 4052da2528..88b6b1680c 100644 --- a/Library/ViewModels/PledgePaymentPlansViewModel.swift +++ b/Library/ViewModels/PledgePaymentPlansViewModel.swift @@ -13,20 +13,17 @@ public struct PledgePaymentPlansAndSelectionData { public var paymentIncrements: [PledgePaymentIncrement] public var project: Project public var selectedPlan: PledgePaymentPlansType - public var thresholdAmount: Double public init( selectedPlan: PledgePaymentPlansType, increments paymentIncrements: [PledgePaymentIncrement] = [], ineligible: Bool = false, - project: Project, - thresholdAmount: Double + project: Project ) { self.ineligible = ineligible self.paymentIncrements = paymentIncrements self.project = project self.selectedPlan = selectedPlan - self.thresholdAmount = thresholdAmount } public var isPledgeOverTime: Bool { @@ -102,8 +99,7 @@ public final class PledgePaymentPlansViewModel: PledgePaymentPlansViewModelType, selectedPlan: selectedPlan, increments: data.paymentIncrements, ineligible: data.ineligible, - project: data.project, - thresholdAmount: data.thresholdAmount + project: data.project ) } diff --git a/Library/ViewModels/PledgePaymentPlansViewModelTest.swift b/Library/ViewModels/PledgePaymentPlansViewModelTest.swift index ea068a7615..1a301e1575 100644 --- a/Library/ViewModels/PledgePaymentPlansViewModelTest.swift +++ b/Library/ViewModels/PledgePaymentPlansViewModelTest.swift @@ -17,8 +17,7 @@ final class PledgePaymentPlansViewModelTests: TestCase { private let selectionData = PledgePaymentPlansAndSelectionData( selectedPlan: .pledgeInFull, - project: Project.template, - thresholdAmount: 125.0 + project: Project.template ) // MARK: Lifecycle diff --git a/Library/ViewModels/PledgeSummaryViewModelTests.swift b/Library/ViewModels/PledgeSummaryViewModelTests.swift index 635ea9626a..79af4b7778 100644 --- a/Library/ViewModels/PledgeSummaryViewModelTests.swift +++ b/Library/ViewModels/PledgeSummaryViewModelTests.swift @@ -240,8 +240,7 @@ internal final class PledgeSummaryViewModelTests: TestCase { selectedPlan: .pledgeInFull, increments: mockPaymentIncrements(), ineligible: false, - project: project, - thresholdAmount: 125.0 // The value is arbitrary and does not impact this test case logic. + project: project ) self.vm.inputs.configure(with: (project: project, total: 10, false, false)) @@ -268,8 +267,7 @@ internal final class PledgeSummaryViewModelTests: TestCase { selectedPlan: .pledgeOverTime, increments: mockPaymentIncrements(), ineligible: false, - project: project, - thresholdAmount: 125.0 // The value is arbitrary and does not impact this test case logic. + project: project ) self.vm.inputs.configure(with: (project: project, total: 10, false, false))