Skip to content

Commit 02ed2e2

Browse files
authored
Merge pull request #8647 from woocommerce/feat/8646-telemetry-migration
Migrate the telemetry endpoint to use REST API
2 parents 7fd57f2 + 3c3e415 commit 02ed2e2

File tree

7 files changed

+79
-4
lines changed

7 files changed

+79
-4
lines changed

Networking/Networking.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@
709709
DE4F2A3F29750EF400B0701C /* inbox-note-list-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = DE4F2A3D29750EF400B0701C /* inbox-note-list-without-data.json */; };
710710
DE4F2A4029750EF400B0701C /* inbox-note-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = DE4F2A3E29750EF400B0701C /* inbox-note-without-data.json */; };
711711
DE4F2A4229751EAE00B0701C /* setting-coupon-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = DE4F2A4129751EAE00B0701C /* setting-coupon-without-data.json */; };
712+
DE4F2A442975684900B0701C /* site-api-without-data.json in Resources */ = {isa = PBXBuildFile; fileRef = DE4F2A432975684900B0701C /* site-api-without-data.json */; };
712713
DE50295928C5BD0200551736 /* JetpackUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50295828C5BD0200551736 /* JetpackUser.swift */; };
713714
DE50295B28C5F99700551736 /* DotcomUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50295A28C5F99700551736 /* DotcomUser.swift */; };
714715
DE50295D28C6068B00551736 /* JetpackUserMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50295C28C6068B00551736 /* JetpackUserMapper.swift */; };
@@ -1538,6 +1539,7 @@
15381539
DE4F2A3D29750EF400B0701C /* inbox-note-list-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "inbox-note-list-without-data.json"; sourceTree = "<group>"; };
15391540
DE4F2A3E29750EF400B0701C /* inbox-note-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "inbox-note-without-data.json"; sourceTree = "<group>"; };
15401541
DE4F2A4129751EAE00B0701C /* setting-coupon-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "setting-coupon-without-data.json"; sourceTree = "<group>"; };
1542+
DE4F2A432975684900B0701C /* site-api-without-data.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "site-api-without-data.json"; sourceTree = "<group>"; };
15411543
DE50295828C5BD0200551736 /* JetpackUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackUser.swift; sourceTree = "<group>"; };
15421544
DE50295A28C5F99700551736 /* DotcomUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DotcomUser.swift; sourceTree = "<group>"; };
15431545
DE50295C28C6068B00551736 /* JetpackUserMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JetpackUserMapper.swift; sourceTree = "<group>"; };
@@ -2163,6 +2165,7 @@
21632165
B559EBA820A0B5B100836CD4 /* Responses */ = {
21642166
isa = PBXGroup;
21652167
children = (
2168+
DE4F2A432975684900B0701C /* site-api-without-data.json */,
21662169
DE4F2A3D29750EF400B0701C /* inbox-note-list-without-data.json */,
21672170
DE4F2A3E29750EF400B0701C /* inbox-note-without-data.json */,
21682171
DE4F2A4129751EAE00B0701C /* setting-coupon-without-data.json */,
@@ -3093,6 +3096,7 @@
30933096
4515281F257A89B90076B03C /* product-attribute-create.json in Resources */,
30943097
CEF88DAF233E9F7E00BED485 /* order-details-partially-refunded.json in Resources */,
30953098
D823D9032237450A00C90817 /* shipment_tracking_new.json in Resources */,
3099+
DE4F2A442975684900B0701C /* site-api-without-data.json in Resources */,
30963100
DE42F96B296BC23800D514C2 /* customer-without-data.json in Resources */,
30973101
EE80A24729547F8B003591E4 /* coupons-all-without-data.json in Resources */,
30983102
7412A8F021B6E416005D182A /* report-orders.json in Resources */,

Networking/Networking/Mapper/SiteAPIMapper.swift

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

22-
return try decoder.decode(SiteAPIEnvelope.self, from: response).siteAPI
22+
do {
23+
return try decoder.decode(SiteAPIEnvelope.self, from: response).siteAPI
24+
} catch {
25+
return try decoder.decode(SiteAPI.self, from: response)
26+
}
2327
}
2428
}
2529

Networking/Networking/Remote/SiteAPIRemote.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ public class SiteAPIRemote: Remote {
1515
public func loadAPIInformation(for siteID: Int64, completion: @escaping (Result<SiteAPI, Error>) -> Void) {
1616
let path = String()
1717
let parameters = [ParameterKeys.fields: ParameterValues.fieldValues]
18-
let request = JetpackRequest(wooApiVersion: .none, method: .get, siteID: siteID, path: path, parameters: parameters)
18+
let request = JetpackRequest(wooApiVersion: .none,
19+
method: .get,
20+
siteID: siteID,
21+
path: path,
22+
parameters: parameters,
23+
availableAsRESTRequest: true)
1924
let mapper = SiteAPIMapper(siteID: siteID)
2025

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

Networking/Networking/Remote/TelemetryRemote.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ public class TelemetryRemote: Remote {
1616
public func sendTelemetry(for siteID: Int64, versionString: String, completion: @escaping (Result<Void, Error>) -> Void) {
1717
let path = "tracker"
1818
let parameters = ["platform": "ios", "version": versionString]
19-
let request = JetpackRequest(wooApiVersion: .wcTelemetry, method: .post, siteID: siteID, path: path, parameters: parameters)
19+
let request = JetpackRequest(wooApiVersion: .wcTelemetry,
20+
method: .post,
21+
siteID: siteID,
22+
path: path,
23+
parameters: parameters,
24+
availableAsRESTRequest: true)
2025
let mapper = IgnoringResponseMapper()
2126

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

Networking/NetworkingTests/Mapper/SiteAPIMapperTests.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ class SiteAPIMapperTests: XCTestCase {
3030
XCTAssertEqual(apiSettings?.highestWooVersion, WooAPIVersion.mark3)
3131
}
3232

33+
/// Verifies the SiteSetting fields are parsed correctly.
34+
///
35+
func test_SiteSetting_fields_are_properly_parsed_when_response_has_no_data_envelope() {
36+
let apiSettings = mapLoadSiteAPIResponseWithoutDataEnvelope()
37+
38+
XCTAssertNotNil(apiSettings)
39+
XCTAssertEqual(apiSettings?.siteID, dummySiteID)
40+
XCTAssertNotNil(apiSettings?.namespaces)
41+
XCTAssertEqual(apiSettings?.namespaces, dummyNamespaces)
42+
XCTAssertEqual(apiSettings?.highestWooVersion, WooAPIVersion.mark3)
43+
}
44+
3345
/// Verifies the SiteSetting fields are parsed correctly.
3446
///
3547
func test_broken_SiteSetting_fields_are_properly_parsed() {
@@ -64,6 +76,12 @@ private extension SiteAPIMapperTests {
6476
return mapSiteAPIData(from: "site-api")
6577
}
6678

79+
/// Returns the SiteAPIMapper output upon receiving `site-api-without-data`
80+
///
81+
func mapLoadSiteAPIResponseWithoutDataEnvelope() -> SiteAPI? {
82+
return mapSiteAPIData(from: "site-api-without-data")
83+
}
84+
6785
/// Returns the SiteAPIMapper output upon receiving `site-api`
6886
///
6987
func mapLoadBrokenSiteAPIResponse() -> SiteAPI? {

Networking/NetworkingTests/Remote/TelemetryRemoteTests.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import XCTest
44

55
/// TelemetryRemote Unit Tests
66
///
7-
class TelemetryRemoteTests: XCTestCase {
7+
final class TelemetryRemoteTests: XCTestCase {
88

99
/// Dummy Network Wrapper
1010
///
@@ -56,6 +56,24 @@ class TelemetryRemoteTests: XCTestCase {
5656
XCTAssertTrue(result.isSuccess)
5757
}
5858

59+
/// Verifies that sendTelemetry properly accepts non-null response without data envelope.
60+
///
61+
func test_sendTelemetry_properly_accepts_non_null_response_without_data_envelope() throws {
62+
// Given
63+
let remote = TelemetryRemote(network: network)
64+
network.simulateResponse(requestUrlSuffix: "tracker", filename: "generic_success")
65+
66+
// When
67+
let result: Result<Void, Error> = waitFor { promise in
68+
remote.sendTelemetry(for: self.sampleSiteID, versionString: "1.2") { result in
69+
promise(result)
70+
}
71+
}
72+
73+
// Then
74+
XCTAssertTrue(result.isSuccess)
75+
}
76+
5977
/// Verifies that sendTelemetry properly relays Networking Layer errors.
6078
///
6179
func test_sendTelemetry_properly_relays_networking_errors() {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"namespaces": [
3+
"oembed\/1.0",
4+
"akismet\/v1",
5+
"jetpack\/v4",
6+
"wpcom\/v2",
7+
"wc\/v1",
8+
"wc\/v2",
9+
"wc\/v3",
10+
"wc-pb\/v3",
11+
"wp\/v2"
12+
],
13+
"authentication": [],
14+
"_links": {
15+
"help": [
16+
{
17+
"href": "http:\/\/v2.wp-api.org\/"
18+
}
19+
]
20+
}
21+
}

0 commit comments

Comments
 (0)