Skip to content

Commit d8977d7

Browse files
authored
Merge pull request #6244 from woocommerce/issue/6243-null-descriptor
[Mobile Payments] Handle null descriptor in Stripe account json
2 parents eb52f86 + fdb21a0 commit d8977d7

File tree

5 files changed

+98
-2
lines changed

5 files changed

+98
-2
lines changed

Networking/Networking.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@
181181
311D41302783C0E200052F64 /* StripeRemote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311D412F2783C0E200052F64 /* StripeRemote.swift */; };
182182
314703082670222500EF253A /* PaymentGatewayAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314703072670222500EF253A /* PaymentGatewayAccount.swift */; };
183183
3148977027232982007A86BD /* SystemStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3148976F27232982007A86BD /* SystemStatus.swift */; };
184+
314EDF2927C02CC100A56B6F /* stripe-account-complete-empty-descriptor.json in Resources */ = {isa = PBXBuildFile; fileRef = 314EDF2827C02CC100A56B6F /* stripe-account-complete-empty-descriptor.json */; };
185+
314EDF2B27C02CD300A56B6F /* stripe-account-complete-null-descriptor.json in Resources */ = {isa = PBXBuildFile; fileRef = 314EDF2A27C02CD300A56B6F /* stripe-account-complete-null-descriptor.json */; };
184186
3158A49F2729F3F600C3CFA8 /* wcpay-account-live-live.json in Resources */ = {isa = PBXBuildFile; fileRef = 3158A49E2729F3F600C3CFA8 /* wcpay-account-live-live.json */; };
185187
3158A4A12729F40F00C3CFA8 /* wcpay-account-live-test.json in Resources */ = {isa = PBXBuildFile; fileRef = 3158A4A02729F40F00C3CFA8 /* wcpay-account-live-test.json */; };
186188
3158A4A32729F42500C3CFA8 /* wcpay-account-dev-test.json in Resources */ = {isa = PBXBuildFile; fileRef = 3158A4A22729F42500C3CFA8 /* wcpay-account-dev-test.json */; };
@@ -853,6 +855,8 @@
853855
311D412F2783C0E200052F64 /* StripeRemote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StripeRemote.swift; sourceTree = "<group>"; };
854856
314703072670222500EF253A /* PaymentGatewayAccount.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentGatewayAccount.swift; sourceTree = "<group>"; };
855857
3148976F27232982007A86BD /* SystemStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemStatus.swift; sourceTree = "<group>"; };
858+
314EDF2827C02CC100A56B6F /* stripe-account-complete-empty-descriptor.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "stripe-account-complete-empty-descriptor.json"; sourceTree = "<group>"; };
859+
314EDF2A27C02CD300A56B6F /* stripe-account-complete-null-descriptor.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "stripe-account-complete-null-descriptor.json"; sourceTree = "<group>"; };
856860
3158A49E2729F3F600C3CFA8 /* wcpay-account-live-live.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-live-live.json"; sourceTree = "<group>"; };
857861
3158A4A02729F40F00C3CFA8 /* wcpay-account-live-test.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-live-test.json"; sourceTree = "<group>"; };
858862
3158A4A22729F42500C3CFA8 /* wcpay-account-dev-test.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "wcpay-account-dev-test.json"; sourceTree = "<group>"; };
@@ -1822,6 +1826,8 @@
18221826
D865CE71278CC215002C8520 /* stripe-customer-error.json */,
18231827
D865CE70278CC215002C8520 /* stripe-customer.json */,
18241828
31A451C527863A2D00FE81AA /* stripe-account-complete.json */,
1829+
314EDF2827C02CC100A56B6F /* stripe-account-complete-empty-descriptor.json */,
1830+
314EDF2A27C02CD300A56B6F /* stripe-account-complete-null-descriptor.json */,
18251831
31A451C927863A2D00FE81AA /* stripe-account-dev-test.json */,
18261832
31A451C227863A2D00FE81AA /* stripe-account-live-live.json */,
18271833
31A451CB27863A2D00FE81AA /* stripe-account-live-test.json */,
@@ -2438,6 +2444,7 @@
24382444
02AF07EC27492FDD00B2D81E /* media-library-from-wordpress-site.json in Resources */,
24392445
CC9A253C26442C71005DE56E /* shipping-label-eligibility-success.json in Resources */,
24402446
B5A24179217F98F600595DEF /* notifications-load-all.json in Resources */,
2447+
314EDF2927C02CC100A56B6F /* stripe-account-complete-empty-descriptor.json in Resources */,
24412448
31A451CE27863A2E00FE81AA /* stripe-account-wrong-json.json in Resources */,
24422449
0282DD91233A120A006A5FDB /* products-search-photo.json in Resources */,
24432450
45152825257A8B740076B03C /* product-attribute-update.json in Resources */,
@@ -2626,6 +2633,7 @@
26262633
268EC45C26C169F600716F5C /* order-with-faulty-attributes.json in Resources */,
26272634
45AB8B0F24AA29DC00B5B36E /* product-tags-created.json in Resources */,
26282635
3158FE8426129F3A00E566B9 /* wcpay-account-unknown-status.json in Resources */,
2636+
314EDF2B27C02CD300A56B6F /* stripe-account-complete-null-descriptor.json in Resources */,
26292637
31054720262E2F9D00C5C02B /* wcpay-payment-intent-processing.json in Resources */,
26302638
);
26312639
runOnlyForDeploymentPostprocessing = 0;

Networking/Networking/Model/StripeAccount.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public struct StripeAccount: Decodable {
6767
let hasPendingRequirements = try container.decode(Bool.self, forKey: .hasPendingRequirements)
6868
let hasOverdueRequirements = try container.decode(Bool.self, forKey: .hasOverdueRequirements)
6969
let currentDeadline = try container.decodeIfPresent(Date.self, forKey: .currentDeadline)
70-
let statementDescriptor = try container.decode(String.self, forKey: .statementDescriptor)
70+
let statementDescriptor = try container.decodeIfPresent(String.self, forKey: .statementDescriptor)
7171
let currencyContainer = try container.nestedContainer(keyedBy: CurrencyCodingKeys.self, forKey: .storeCurrencies)
7272
let defaultCurrency = try currencyContainer.decode(String.self, forKey: .defaultCurrency)
7373
let supportedCurrencies = try currencyContainer.decode([String].self, forKey: .supported)
@@ -82,7 +82,7 @@ public struct StripeAccount: Decodable {
8282
hasPendingRequirements: hasPendingRequirements,
8383
hasOverdueRequirements: hasOverdueRequirements,
8484
currentDeadline: currentDeadline,
85-
statementDescriptor: statementDescriptor,
85+
statementDescriptor: statementDescriptor ?? "",
8686
defaultCurrency: defaultCurrency,
8787
supportedCurrencies: supportedCurrencies,
8888
country: country,

Networking/NetworkingTests/Remote/StripeRemoteTests.swift

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,58 @@ final class StripeRemoteTests: XCTestCase {
9191
XCTAssertEqual(account.isCardPresentEligible, true)
9292
}
9393

94+
/// Verifies that loadAccount properly handles the a response with an empty descriptor.
95+
///
96+
func test_loadAccount_properly_returns_account_with_empty_descriptor() throws {
97+
// Given
98+
let remote = StripeRemote(network: network)
99+
100+
network.simulateResponse(requestUrlSuffix: "wc_stripe/account/summary", filename: "stripe-account-complete-empty-descriptor")
101+
102+
// When
103+
let result: Result<StripeAccount, Error> = waitFor { promise in
104+
remote.loadAccount(for: self.sampleSiteID) { result in
105+
promise(result)
106+
}
107+
}
108+
109+
// Then
110+
XCTAssertTrue(result.isSuccess)
111+
let account = try result.get()
112+
XCTAssertEqual(account.status, .complete)
113+
XCTAssertEqual(account.statementDescriptor, "")
114+
XCTAssertEqual(account.defaultCurrency, "usd")
115+
XCTAssertEqual(account.supportedCurrencies, ["usd"])
116+
XCTAssertEqual(account.country, "US")
117+
XCTAssertEqual(account.isCardPresentEligible, true)
118+
}
119+
120+
/// Verifies that loadAccount properly handles the a response with a null descriptor.
121+
///
122+
func test_loadAccount_properly_returns_account_with_null_descriptor() throws {
123+
// Given
124+
let remote = StripeRemote(network: network)
125+
126+
network.simulateResponse(requestUrlSuffix: "wc_stripe/account/summary", filename: "stripe-account-complete-null-descriptor")
127+
128+
// When
129+
let result: Result<StripeAccount, Error> = waitFor { promise in
130+
remote.loadAccount(for: self.sampleSiteID) { result in
131+
promise(result)
132+
}
133+
}
134+
135+
// Then
136+
XCTAssertTrue(result.isSuccess)
137+
let account = try result.get()
138+
XCTAssertEqual(account.status, .complete)
139+
XCTAssertEqual(account.statementDescriptor, "")
140+
XCTAssertEqual(account.defaultCurrency, "usd")
141+
XCTAssertEqual(account.supportedCurrencies, ["usd"])
142+
XCTAssertEqual(account.country, "US")
143+
XCTAssertEqual(account.isCardPresentEligible, true)
144+
}
145+
94146
/// Verifies that loadAccount properly handles the rejected - fraud response
95147
///
96148
func test_loadAccount_properly_handles_rejected_fraud_account() throws {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"data": {
3+
"status": "complete",
4+
"store_currencies": {
5+
"default": "usd",
6+
"supported": [
7+
"usd"
8+
]
9+
},
10+
"country": "US",
11+
"has_pending_requirements": false,
12+
"current_deadline": null,
13+
"statement_descriptor": "",
14+
"has_overdue_requirements": false,
15+
"is_live": true,
16+
"test_mode": false
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"data": {
3+
"status": "complete",
4+
"store_currencies": {
5+
"default": "usd",
6+
"supported": [
7+
"usd"
8+
]
9+
},
10+
"country": "US",
11+
"has_pending_requirements": false,
12+
"current_deadline": null,
13+
"statement_descriptor": null,
14+
"has_overdue_requirements": false,
15+
"is_live": true,
16+
"test_mode": false
17+
}
18+
}

0 commit comments

Comments
 (0)