-
Notifications
You must be signed in to change notification settings - Fork 27
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
Eligibility API logic #286
Merged
Merged
Changes from 50 commits
Commits
Show all changes
56 commits
Select commit
Hold shift + click to select a range
2a07770
Add EligibilityRequest file
richherrera f50baa8
Add EligibilityResult file
richherrera e564f3e
Add EligibilityClient file
richherrera 193ab5c
Add EligilibilityClient method
richherrera de28ce6
Add Result properties
richherrera fc37fd6
Add request properties
richherrera de7bf1a
Add EligibilityVariables file
richherrera e0573a1
Remove header
richherrera c0000b4
Add EligibilityAPI
richherrera 8a9f7e0
Sort directory
richherrera fa4863c
Add properties and initializers
richherrera e366890
Add tests files
richherrera bfd4749
Fix lints
richherrera a3000a1
Fix lint
richherrera f63935d
PR Feedback
richherrera fdc17bf
Conform Encodable and add variable eligibility variables properties
richherrera 26b72e4
Add supported currency type enum
richherrera 7fb6765
Add eligibility intent enum
richherrera 8daa52b
Add eligibility result properties
richherrera 4198535
Add Eligibility Response object
richherrera c1b1a75
Sort files Eligibility directory
richherrera 3d41794
Update eligibility request with enum types
richherrera 7ff6bb1
Add parameters and initializer on Client
richherrera 1a34e59
Add API logic
richherrera 4a87950
Add mock and remove intent enum
richherrera d8b3b76
Remove final
richherrera 805304d
Add docstrings on Client
richherrera 8dbf00c
Expose intents
richherrera 32dddf8
Change Decodable instead of Codable for response model
richherrera 65749c2
Update Variables struct
richherrera fed4f0c
Remove currency enum
richherrera a5aec4c
Add docstring for Request model
richherrera 64c6cee
Add mock API
richherrera 2408217
Add client tests
richherrera 3a0c83a
Add Result docstrings
richherrera f6de949
Rename curency to currencyCode
richherrera 2e15a23
Add marks
richherrera 2cd8c4b
Fix merge conflicts
richherrera 2ede375
Fix lint
richherrera cecce87
Merge branch 'fix-venmo-feature-merge' into eligibility-logic-request
richherrera 3be4ecb
Add mising file
richherrera 1ee3d2b
Add functionality on demo app
richherrera 65ebc50
Merge branch 'venmo-feature' into eligibility-logic-request
richherrera cd016e3
PR feedback
richherrera c9f14ab
Change initializer
richherrera ee7e160
Fix tests
richherrera 9a6dc5a
Fix coding key
richherrera 54e53c0
Add EligibilityIntent docstrings and remove unnecessary intents
richherrera df51eb0
Fix UTs
richherrera 8f253cf
Pass intent as parameter and mimic UI as others views
richherrera 644df70
Change initializer
richherrera f9f2df3
Remove Recovered References directory
richherrera b422115
Lowercase supported payment methods
richherrera 33d3d46
Use CurrentState enum instead of VenmoState
richherrera fb550e2
Remove VenmoState file
richherrera 19239f9
Update Sources/CorePayments/Eligibility/EligibilityAPI.swift
richherrera File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 38 additions & 1 deletion
39
Demo/Demo/SwiftUIComponents/VenmoPayments/VenmoPaymentView.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,31 @@ | ||
import CorePayments | ||
import Foundation | ||
|
||
class VenmoPaymentsViewModel: ObservableObject { } | ||
class VenmoPaymentsViewModel: ObservableObject { | ||
|
||
let configManager = CoreConfigManager(domain: "Venmo Payments") | ||
|
||
@Published var state = VenmoState() | ||
|
||
func getEligibility(_ intent: EligibilityIntent) async throws { | ||
DispatchQueue.main.async { | ||
self.state.isVenmoEligibleResponse = .loading | ||
} | ||
do { | ||
let config = try await configManager.getCoreConfig() | ||
let eligibilityRequest = EligibilityRequest(currencyCode: "USD", intent: intent) | ||
let eligibilityClient = EligibilityClient(config: config) | ||
let eligibilityResult = try? await eligibilityClient.check(eligibilityRequest) | ||
let isVenmoEligible = eligibilityResult?.isVenmoEligible ?? false | ||
|
||
DispatchQueue.main.async { | ||
self.state.isVenmoEligibleResponse = .loaded(isVenmoEligible) | ||
} | ||
} catch { | ||
DispatchQueue.main.async { | ||
self.state.isVenmoEligibleResponse = .error(message: error.localizedDescription) | ||
} | ||
print("failed in updating setup token. \(error.localizedDescription)") | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import CorePayments | ||
import Foundation | ||
|
||
struct VenmoState { | ||
|
||
var isVenmoEligible: Bool? | ||
|
||
var isVenmoEligibleResponse: LoadingState<Bool> = .idle { | ||
didSet { | ||
if case .loaded(let value) = isVenmoEligibleResponse { | ||
isVenmoEligible = value | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,13 +35,17 @@ | |
3BE7386D2B9A670400598F05 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3BE738662B9A593100598F05 /* PrivacyInfo.xcprivacy */; }; | ||
3D1763A22720722A00652E1C /* CardResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D1763A12720722A00652E1C /* CardResult.swift */; }; | ||
3DC42BA927187E8300B71645 /* ErrorResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC42BA827187E8300B71645 /* ErrorResponse.swift */; }; | ||
459633162C46BD63002008EF /* EligibilityIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459633152C46BD63002008EF /* EligibilityIntent.swift */; }; | ||
459633182C46BD6F002008EF /* EligibilityResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459633172C46BD6F002008EF /* EligibilityResponse.swift */; }; | ||
4596331A2C46BD7B002008EF /* SupportedPaymentMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = 459633192C46BD7B002008EF /* SupportedPaymentMethods.swift */; }; | ||
45B063B42C4035E200E743F2 /* EligibilityClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063B22C4035DB00E743F2 /* EligibilityClient.swift */; }; | ||
45B063B52C4035E500E743F2 /* EligibilityResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063B02C4034B700E743F2 /* EligibilityResult.swift */; }; | ||
45B063B62C4035EA00E743F2 /* EligibilityRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063AE2C40349300E743F2 /* EligibilityRequest.swift */; }; | ||
45B063B82C40440000E743F2 /* EligibilityVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063B72C40440000E743F2 /* EligibilityVariables.swift */; }; | ||
45B063BA2C40456F00E743F2 /* EligibilityAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063B92C40456F00E743F2 /* EligibilityAPI.swift */; }; | ||
45B063BD2C40545100E743F2 /* EligibilityClient_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063BC2C40545100E743F2 /* EligibilityClient_Tests.swift */; }; | ||
45B063BF2C40549000E743F2 /* EligibilityAPI_Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063BE2C40549000E743F2 /* EligibilityAPI_Tests.swift */; }; | ||
45B063CA2C459F9900E743F2 /* MockEligibilityAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B063C92C459F9900E743F2 /* MockEligibilityAPI.swift */; }; | ||
53A2A4E228A182AC0093441C /* NativeCheckoutProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A2A4E128A182AC0093441C /* NativeCheckoutProvider.swift */; }; | ||
62D3FB292C3DB5130046563B /* CorePayments.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80B9F85126B8750000D67843 /* CorePayments.framework */; platformFilter = ios; }; | ||
62D3FB4B2C3ED82D0046563B /* VenmoClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D3FB492C3ED82D0046563B /* VenmoClient.swift */; }; | ||
|
@@ -253,13 +257,20 @@ | |
3D25238127344F330099E4EB /* NativeCheckoutStartable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NativeCheckoutStartable.swift; path = Sources/PayPalNativePayments/NativeCheckoutStartable.swift; sourceTree = SOURCE_ROOT; }; | ||
3D25238B273979170099E4EB /* MockNativeCheckoutProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockNativeCheckoutProvider.swift; sourceTree = "<group>"; }; | ||
3DC42BA827187E8300B71645 /* ErrorResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorResponse.swift; sourceTree = "<group>"; }; | ||
4596330F2C45DDC3002008EF /* SupportedPaymentMethods.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportedPaymentMethods.swift; sourceTree = "<group>"; }; | ||
459633152C46BD63002008EF /* EligibilityIntent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EligibilityIntent.swift; sourceTree = "<group>"; }; | ||
459633172C46BD6F002008EF /* EligibilityResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EligibilityResponse.swift; sourceTree = "<group>"; }; | ||
459633192C46BD7B002008EF /* SupportedPaymentMethods.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SupportedPaymentMethods.swift; sourceTree = "<group>"; }; | ||
45B063AE2C40349300E743F2 /* EligibilityRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityRequest.swift; sourceTree = "<group>"; }; | ||
45B063B02C4034B700E743F2 /* EligibilityResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityResult.swift; sourceTree = "<group>"; }; | ||
45B063B22C4035DB00E743F2 /* EligibilityClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityClient.swift; sourceTree = "<group>"; }; | ||
45B063B72C40440000E743F2 /* EligibilityVariables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityVariables.swift; sourceTree = "<group>"; }; | ||
45B063B92C40456F00E743F2 /* EligibilityAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityAPI.swift; sourceTree = "<group>"; }; | ||
45B063BC2C40545100E743F2 /* EligibilityClient_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityClient_Tests.swift; sourceTree = "<group>"; }; | ||
45B063BE2C40549000E743F2 /* EligibilityAPI_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityAPI_Tests.swift; sourceTree = "<group>"; }; | ||
45B063C02C41D08400E743F2 /* EligibilityResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityResponse.swift; sourceTree = "<group>"; }; | ||
45B063C62C41E7AA00E743F2 /* EligibilityIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EligibilityIntent.swift; sourceTree = "<group>"; }; | ||
45B063C92C459F9900E743F2 /* MockEligibilityAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockEligibilityAPI.swift; sourceTree = "<group>"; }; | ||
53A2A4E128A182AC0093441C /* NativeCheckoutProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeCheckoutProvider.swift; sourceTree = "<group>"; }; | ||
62D3FB132C3DB4D40046563B /* VenmoClient_Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VenmoClient_Tests.swift; sourceTree = "<group>"; }; | ||
62D3FB2F2C3DB5130046563B /* VenmoPayments.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = VenmoPayments.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
|
@@ -570,31 +581,27 @@ | |
path = Models; | ||
sourceTree = "<group>"; | ||
}; | ||
62D3FB122C3DB4B30046563B /* VenmoPaymentsTests */ = { | ||
459633142C46BD51002008EF /* Recovered References */ = { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm guessing we can remove these There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice catch, updated: f9f2df3 |
||
isa = PBXGroup; | ||
children = ( | ||
62D3FB132C3DB4D40046563B /* VenmoClient_Tests.swift */, | ||
4596330F2C45DDC3002008EF /* SupportedPaymentMethods.swift */, | ||
45B063C02C41D08400E743F2 /* EligibilityResponse.swift */, | ||
45B063C62C41E7AA00E743F2 /* EligibilityIntent.swift */, | ||
); | ||
path = VenmoPaymentsTests; | ||
name = "Recovered References"; | ||
richherrera marked this conversation as resolved.
Show resolved
Hide resolved
|
||
sourceTree = "<group>"; | ||
}; | ||
62D3FB4A2C3ED82D0046563B /* VenmoPayments */ = { | ||
isa = PBXGroup; | ||
children = ( | ||
62D3FB492C3ED82D0046563B /* VenmoClient.swift */, | ||
); | ||
name = VenmoPayments; | ||
path = Sources/VenmoPayments; | ||
sourceTree = "<group>"; | ||
}; | ||
45B063AD2C40346500E743F2 /* Eligibility */ = { | ||
isa = PBXGroup; | ||
children = ( | ||
45B063B92C40456F00E743F2 /* EligibilityAPI.swift */, | ||
45B063B22C4035DB00E743F2 /* EligibilityClient.swift */, | ||
459633152C46BD63002008EF /* EligibilityIntent.swift */, | ||
45B063AE2C40349300E743F2 /* EligibilityRequest.swift */, | ||
459633172C46BD6F002008EF /* EligibilityResponse.swift */, | ||
45B063B02C4034B700E743F2 /* EligibilityResult.swift */, | ||
45B063B72C40440000E743F2 /* EligibilityVariables.swift */, | ||
459633192C46BD7B002008EF /* SupportedPaymentMethods.swift */, | ||
); | ||
path = Eligibility; | ||
sourceTree = "<group>"; | ||
|
@@ -608,6 +615,23 @@ | |
path = Eligibility; | ||
sourceTree = "<group>"; | ||
}; | ||
62D3FB122C3DB4B30046563B /* VenmoPaymentsTests */ = { | ||
isa = PBXGroup; | ||
children = ( | ||
62D3FB132C3DB4D40046563B /* VenmoClient_Tests.swift */, | ||
); | ||
path = VenmoPaymentsTests; | ||
sourceTree = "<group>"; | ||
}; | ||
62D3FB4A2C3ED82D0046563B /* VenmoPayments */ = { | ||
isa = PBXGroup; | ||
children = ( | ||
62D3FB492C3ED82D0046563B /* VenmoClient.swift */, | ||
); | ||
name = VenmoPayments; | ||
path = Sources/VenmoPayments; | ||
sourceTree = "<group>"; | ||
}; | ||
8036C1DE270F9BCF00C0F091 /* PaymentsCoreTests */ = { | ||
isa = PBXGroup; | ||
children = ( | ||
|
@@ -650,6 +674,7 @@ | |
isa = PBXGroup; | ||
children = ( | ||
802EFBD72A9685DF00AB709D /* MockTrackingEventsAPI.swift */, | ||
45B063C92C459F9900E743F2 /* MockEligibilityAPI.swift */, | ||
); | ||
path = Mocks; | ||
sourceTree = "<group>"; | ||
|
@@ -938,6 +963,7 @@ | |
OBJ_13 /* Products */, | ||
805AB85726B8887D003BEE0D /* Frameworks */, | ||
047AF85D2B4F47BD0011303B /* Resources */, | ||
459633142C46BD51002008EF /* Recovered References */, | ||
); | ||
sourceTree = "<group>"; | ||
}; | ||
|
@@ -1482,6 +1508,7 @@ | |
files = ( | ||
808EEA81291321FE001B6765 /* AnalyticsEventData_Tests.swift in Sources */, | ||
8036C1E5270F9BE700C0F091 /* Environment_Tests.swift in Sources */, | ||
45B063CA2C459F9900E743F2 /* MockEligibilityAPI.swift in Sources */, | ||
80B96AAE2A980F6B00C62916 /* MockTrackingEventsAPI.swift in Sources */, | ||
80FC261D29847AC7008EC841 /* HTTP_Tests.swift in Sources */, | ||
45B063BD2C40545100E743F2 /* EligibilityClient_Tests.swift in Sources */, | ||
|
@@ -1498,6 +1525,7 @@ | |
buildActionMask = 2147483647; | ||
files = ( | ||
E6022E802857C6BE008B0E27 /* GraphQLHTTPResponse.swift in Sources */, | ||
459633182C46BD6F002008EF /* EligibilityResponse.swift in Sources */, | ||
80E643832A1EBBD2008FD705 /* HTTPResponse.swift in Sources */, | ||
807C5E6929102D9800ECECD8 /* AnalyticsEventData.swift in Sources */, | ||
80E237DF2A84434B00FF18CA /* HTTPRequest.swift in Sources */, | ||
|
@@ -1514,6 +1542,7 @@ | |
80E2FDC12A83535A0045593D /* TrackingEventsAPI.swift in Sources */, | ||
BEA100F226EFA7DE0036A6A5 /* Environment.swift in Sources */, | ||
BEA100F026EFA7C20036A6A5 /* NetworkingClientError.swift in Sources */, | ||
459633162C46BD63002008EF /* EligibilityIntent.swift in Sources */, | ||
804E628629380B04004B9FEF /* AnalyticsService.swift in Sources */, | ||
45B063BA2C40456F00E743F2 /* EligibilityAPI.swift in Sources */, | ||
BC04837427B2FC7300FA7B46 /* URLSession+URLSessionProtocol.swift in Sources */, | ||
|
@@ -1524,6 +1553,7 @@ | |
804E62822937EBCE004B9FEF /* HTTP.swift in Sources */, | ||
BC04836F27B2FB3600FA7B46 /* URLSessionProtocol.swift in Sources */, | ||
065A4DBC26FCD8090007014A /* CoreSDKError.swift in Sources */, | ||
4596331A2C46BD7B002008EF /* SupportedPaymentMethods.swift in Sources */, | ||
BEA100E726EF9EDA0036A6A5 /* NetworkingClient.swift in Sources */, | ||
807BF58F2A2A5D19002F32B3 /* HTTPResponseParser.swift in Sources */, | ||
807D56AE2A869064009E591D /* GraphQLRequest.swift in Sources */, | ||
|
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Take it our leave it for this PR, but we started a transition to use a new
CurrentState
enum across all of the views vs individualized views with custom states. If you take a look at the PayPal Web Payments views you can see where that was in motion. Not a blocker, would just be nice to eventually share duplicated states with a shared interface. Can totally be a follow up or something we tackle when we address the other view since only PayPal Web was updated thus far.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated, thanks for your feedback: 33d3d46