Skip to content

Commit 6097649

Browse files
Merge pull request #8741 from woocommerce/feat/8715-tax-class-migration
[REST API] Migrate product tax class endpoints
2 parents 1e4b3e0 + 393ee31 commit 6097649

File tree

5 files changed

+69
-2
lines changed

5 files changed

+69
-2
lines changed

Networking/Networking.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,7 @@
813813
EE57C144297FCCA700BC31E7 /* product-shipping-classes-load-one-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EE57C142297FCCA700BC31E7 /* product-shipping-classes-load-one-without-data.json */; };
814814
EE57C146297FCCD200BC31E7 /* ProductShippingClassListMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE57C145297FCCD200BC31E7 /* ProductShippingClassListMapperTests.swift */; };
815815
EE57C148297FCCE000BC31E7 /* ProductShippingClassMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE57C147297FCCE000BC31E7 /* ProductShippingClassMapperTests.swift */; };
816+
EE57C14A2980CE4B00BC31E7 /* taxes-classes-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = EE57C1492980CE4B00BC31E7 /* taxes-classes-without-data.json */; };
816817
EE62EE61295ACF8D009C965B /* RequestConverterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE62EE60295ACF8D009C965B /* RequestConverterTests.swift */; };
817818
EE62EE63295AD45E009C965B /* String+URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE62EE62295AD45E009C965B /* String+URL.swift */; };
818819
EE62EE65295AD46D009C965B /* String+URLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE62EE64295AD46D009C965B /* String+URLTests.swift */; };
@@ -1684,6 +1685,7 @@
16841685
EE57C142297FCCA700BC31E7 /* product-shipping-classes-load-one-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "product-shipping-classes-load-one-without-data.json"; sourceTree = "<group>"; };
16851686
EE57C145297FCCD200BC31E7 /* ProductShippingClassListMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductShippingClassListMapperTests.swift; sourceTree = "<group>"; };
16861687
EE57C147297FCCE000BC31E7 /* ProductShippingClassMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProductShippingClassMapperTests.swift; sourceTree = "<group>"; };
1688+
EE57C1492980CE4B00BC31E7 /* taxes-classes-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "taxes-classes-without-data.json"; sourceTree = "<group>"; };
16871689
EE62EE60295ACF8D009C965B /* RequestConverterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestConverterTests.swift; sourceTree = "<group>"; };
16881690
EE62EE62295AD45E009C965B /* String+URL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+URL.swift"; sourceTree = "<group>"; };
16891691
EE62EE64295AD46D009C965B /* String+URLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+URLTests.swift"; sourceTree = "<group>"; };
@@ -2511,6 +2513,7 @@
25112513
CCA1D6072943804C00B40560 /* site-summary-stats.json */,
25122514
022902D122E2436300059692 /* stats_module_disabled_error.json */,
25132515
45ED4F11239E8C57004F1BE3 /* taxes-classes.json */,
2516+
EE57C1492980CE4B00BC31E7 /* taxes-classes-without-data.json */,
25142517
74ABA1C4213F17AA00FFAD30 /* top-performers-day.json */,
25152518
74ABA1C8213F19FE00FFAD30 /* top-performers-week.json */,
25162519
749737692141F2BE0008C490 /* top-performers-week-alt.json */,
@@ -3112,6 +3115,7 @@
31123115
DE42F9602967C88400D514C2 /* report-orders-total-without-data.json in Resources */,
31133116
DE9DEEF5291CF1B40070AD7C /* site-plugin-without-envelope.json in Resources */,
31143117
0261F5A928D4641500B7AC72 /* products-sku-search.json in Resources */,
3118+
EE57C14A2980CE4B00BC31E7 /* taxes-classes-without-data.json in Resources */,
31153119
EE80A24829547F8B003591E4 /* coupon-without-data.json in Resources */,
31163120
EE57C137297F98DB00BC31E7 /* product-variations-load-all-without-data.json in Resources */,
31173121
09885C8027C3FFD200910A62 /* product-variations-bulk-update.json in Resources */,

Networking/Networking/Mapper/TaxClassListMapper.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ struct TaxClassListMapper: Mapper {
1818
.siteID: siteID
1919
]
2020

21-
return try decoder.decode(TaxClassListEnvelope.self, from: response).taxClasses
21+
do {
22+
return try decoder.decode(TaxClassListEnvelope.self, from: response).taxClasses
23+
} catch {
24+
return try decoder.decode([TaxClass].self, from: response)
25+
}
2226
}
2327
}
2428

Networking/Networking/Remote/TaxClassRemote.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ public class TaxClassRemote: Remote {
1616
completion: @escaping ([TaxClass]?, Error?) -> Void) {
1717

1818
let path = Path.taxes + "/classes"
19-
let request = JetpackRequest(wooApiVersion: .mark3, method: .get, siteID: siteID, path: path, parameters: nil)
19+
let request = JetpackRequest(wooApiVersion: .mark3,
20+
method: .get,
21+
siteID: siteID,
22+
path: path,
23+
parameters: nil,
24+
availableAsRESTRequest: true)
2025
let mapper = TaxClassListMapper(siteID: siteID)
2126

2227
enqueue(request, mapper: mapper, completion: completion)

Networking/NetworkingTests/Mapper/TaxClassListMapperTest.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@ final class TaxClassListMapperTest: XCTestCase {
1717
XCTAssertEqual(taxClasses.count, 3)
1818

1919

20+
let firstTaxClass = taxClasses[0]
21+
XCTAssertEqual(firstTaxClass.siteID, sampleSiteID)
22+
XCTAssertEqual(firstTaxClass.slug, "standard")
23+
XCTAssertEqual(firstTaxClass.name, "Standard Rate")
24+
}
25+
26+
/// Verifies that all of the Tax Class Fields are parsed correctly.
27+
///
28+
func test_TaxClass_fields_are_properly_parsed_when_response_has_no_data_envelope() {
29+
let taxClasses = mapLoadAllTaxClassResponseWithoutDataEnvelope()
30+
XCTAssertEqual(taxClasses.count, 3)
31+
32+
2033
let firstTaxClass = taxClasses[0]
2134
XCTAssertEqual(firstTaxClass.siteID, sampleSiteID)
2235
XCTAssertEqual(firstTaxClass.slug, "standard")
@@ -44,4 +57,10 @@ private extension TaxClassListMapperTest {
4457
func mapLoadAllTaxClassResponse() -> [TaxClass] {
4558
return mapTaxClasses(from: "taxes-classes")
4659
}
60+
61+
/// Returns the TaxClassListMapper output upon receiving `taxes-classes-without-data`
62+
///
63+
func mapLoadAllTaxClassResponseWithoutDataEnvelope() -> [TaxClass] {
64+
return mapTaxClasses(from: "taxes-classes-without-data")
65+
}
4766
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[
2+
{
3+
"slug": "standard",
4+
"name": "Standard Rate",
5+
"_links": {
6+
"collection": [
7+
{
8+
"href": "https://example.com/wp-json/wc/v3/taxes/classes"
9+
}
10+
]
11+
}
12+
},
13+
{
14+
"slug": "reduced-rate",
15+
"name": "Reduced Rate",
16+
"_links": {
17+
"collection": [
18+
{
19+
"href": "https://example.com/wp-json/wc/v3/taxes/classes"
20+
}
21+
]
22+
}
23+
},
24+
{
25+
"slug": "zero-rate",
26+
"name": "Zero Rate",
27+
"_links": {
28+
"collection": [
29+
{
30+
"href": "https://example.com/wp-json/wc/v3/taxes/classes"
31+
}
32+
]
33+
}
34+
}
35+
]

0 commit comments

Comments
 (0)