Skip to content
This repository was archived by the owner on Sep 15, 2025. It is now read-only.

Commit 61d077c

Browse files
author
Paul Von Schrottky
authored
Fix WordPressComRestApi.GETData (#746)
2 parents 911a054 + ef8f1b7 commit 61d077c

File tree

6 files changed

+85
-2
lines changed

6 files changed

+85
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ _None._
4242

4343
### Bug Fixes
4444

45-
_None._
45+
- Fix parsing issues in getting Zendesk metadata and feature announcements. [#746]
4646

4747
### Internal Changes
4848

WordPressKit.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@
187187
4AE278442B2FAF6200E4D9B1 /* HTTPProtocolHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE278432B2FAF6200E4D9B1 /* HTTPProtocolHelpers.swift */; };
188188
4AE278482B2FBF1100E4D9B1 /* HTTPBodyEncodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE278472B2FBF1100E4D9B1 /* HTTPBodyEncodingTests.swift */; };
189189
4AE2784A2B2FC6C600E4D9B1 /* HTTPHeaderValueParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE278492B2FC6C600E4D9B1 /* HTTPHeaderValueParserTests.swift */; };
190+
4AE7E36B2B9A995500C8CED5 /* AnnouncementServiceRemoteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE7E36A2B9A995500C8CED5 /* AnnouncementServiceRemoteTests.swift */; };
191+
4AE7E36D2B9A9BC400C8CED5 /* site-zendesk-metadata-success.json in Resources */ = {isa = PBXBuildFile; fileRef = 4AE7E36C2B9A9BC400C8CED5 /* site-zendesk-metadata-success.json */; };
190192
57BCD3D426209D9500292CB3 /* AppTransportSecuritySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57BCD3D326209D9500292CB3 /* AppTransportSecuritySettings.swift */; };
191193
730E869F21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 730E869E21E44EFD00753E1A /* WordPressComServiceRemote+SiteVerticals.swift */; };
192194
731BA83621DECD61000FDFCD /* SiteCreationRequestEncodingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 731BA83521DECD61000FDFCD /* SiteCreationRequestEncodingTests.swift */; };
@@ -908,6 +910,8 @@
908910
4AE278432B2FAF6200E4D9B1 /* HTTPProtocolHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPProtocolHelpers.swift; sourceTree = "<group>"; };
909911
4AE278472B2FBF1100E4D9B1 /* HTTPBodyEncodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPBodyEncodingTests.swift; sourceTree = "<group>"; };
910912
4AE278492B2FC6C600E4D9B1 /* HTTPHeaderValueParserTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPHeaderValueParserTests.swift; sourceTree = "<group>"; };
913+
4AE7E36A2B9A995500C8CED5 /* AnnouncementServiceRemoteTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnnouncementServiceRemoteTests.swift; sourceTree = "<group>"; };
914+
4AE7E36C2B9A9BC400C8CED5 /* site-zendesk-metadata-success.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "site-zendesk-metadata-success.json"; sourceTree = "<group>"; };
911915
57BCD3D326209D9500292CB3 /* AppTransportSecuritySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTransportSecuritySettings.swift; sourceTree = "<group>"; };
912916
6C2A33D76FD1052D6F30466D /* Pods-WordPressKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WordPressKit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WordPressKit/Pods-WordPressKit.debug.xcconfig"; sourceTree = "<group>"; };
913917
6F2E0CC4FA01B5475A378DA2 /* Pods-WordPressKitTests.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WordPressKitTests.release-alpha.xcconfig"; path = "Pods/Target Support Files/Pods-WordPressKitTests/Pods-WordPressKitTests.release-alpha.xcconfig"; sourceTree = "<group>"; };
@@ -1627,6 +1631,14 @@
16271631
name = BlockEditorSettings;
16281632
sourceTree = "<group>";
16291633
};
1634+
4AE7E3692B9A994200C8CED5 /* Announcement */ = {
1635+
isa = PBXGroup;
1636+
children = (
1637+
4AE7E36A2B9A995500C8CED5 /* AnnouncementServiceRemoteTests.swift */,
1638+
);
1639+
name = Announcement;
1640+
sourceTree = "<group>";
1641+
};
16301642
57A38E502624F7D000472480 /* WordPressAPI */ = {
16311643
isa = PBXGroup;
16321644
children = (
@@ -1832,6 +1844,7 @@
18321844
children = (
18331845
93BD273E1EE732CC002BB00B /* Accounts */,
18341846
826016FE1F9FD59400533B6C /* Activity */,
1847+
4AE7E3692B9A994200C8CED5 /* Announcement */,
18351848
F194E1212417ED7E00874408 /* Authentication */,
18361849
FAD1345425909DF500A8FEB1 /* Backup */,
18371850
FA1D0F8F299535020025D76C /* Blaze */,
@@ -2401,6 +2414,7 @@
24012414
74D67F2C1F15C3740010C5ED /* site-viewers-delete-bad-json.json */,
24022415
74D67F2D1F15C3740010C5ED /* site-viewers-delete-failure.json */,
24032416
74D67F2E1F15C3740010C5ED /* site-viewers-delete-success.json */,
2417+
4AE7E36C2B9A9BC400C8CED5 /* site-zendesk-metadata-success.json */,
24042418
E6B0461125E5B6F500DF6F4F /* sites-invites-links-disable-empty.json */,
24052419
E6B0460F25E5B6F500DF6F4F /* sites-invites-links-disable.json */,
24062420
E6B0461025E5B6F500DF6F4F /* sites-invites-links-generate.json */,
@@ -3085,6 +3099,7 @@
30853099
C738CAF3286226D6001BE107 /* qrlogin-validate-400.json in Resources */,
30863100
93BD27651EE73442002BB00B /* me-sites-visibility-success.json in Resources */,
30873101
404057D0221C46790060250C /* stats-videos-data.json in Resources */,
3102+
4AE7E36D2B9A9BC400C8CED5 /* site-zendesk-metadata-success.json in Resources */,
30883103
E1787DB0200E564B004CB3AF /* timezones.json in Resources */,
30893104
93BD275E1EE73442002BB00B /* me-bad-json-failure.json in Resources */,
30903105
FFE247AF20C891E6002DF3A2 /* WordPressComOAuthWrongPasswordFail.json in Resources */,
@@ -3675,6 +3690,7 @@
36753690
46ABD0E0262EED3D00C7FF24 /* WordPressOrgXMLRPCValidatorTests.swift in Sources */,
36763691
D813437621F6D70D0060D99A /* SiteSegmentsResponseDecodingTests.swift in Sources */,
36773692
436D56382118DC4B00CEAA33 /* TransactionsServiceRemoteTests.swift in Sources */,
3693+
4AE7E36B2B9A995500C8CED5 /* AnnouncementServiceRemoteTests.swift in Sources */,
36783694
9F3E0BA82087355E009CB5BA /* RemoteReaderSiteInfoSubscriptionTests.swift in Sources */,
36793695
BA62CFE924B592E000978BE1 /* DynamicMockProvider.swift in Sources */,
36803696
24ADA24E24F9B32D001B5DAE /* FeatureFlagSerializationTest.swift in Sources */,

WordPressKit/WordPressComRestApi.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ open class WordPressComRestApi: NSObject {
215215
parameters: [String: AnyObject]?,
216216
completion: @escaping (Swift.Result<(Data, HTTPURLResponse?), Error>) -> Void) {
217217
Task { @MainActor in
218-
let result: APIResult<Data> = await perform(.get, URLString: URLString, parameters: parameters)
218+
let result = await perform(.get, URLString: URLString, parameters: parameters, fulfilling: nil, decoder: { $0 })
219219

220220
completion(
221221
result
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Foundation
2+
import XCTest
3+
import OHHTTPStubs
4+
5+
@testable import WordPressKit
6+
7+
class AnnouncementServiceRemoteTests: XCTestCase {
8+
9+
func testNoAnnouncement() {
10+
stub(condition: isPath("/wpcom/v2/mobile/feature-announcements") && containsQueryParams(["app_id": "test-app"])) { _ in
11+
HTTPStubsResponse(jsonObject: ["announcements": [String]()], statusCode: 200, headers: nil)
12+
}
13+
14+
let remote = AnnouncementServiceRemote(wordPressComRestApi: .init(oAuthToken: "fake"))
15+
var result: Result<[Announcement], Error>? = nil
16+
let completed = expectation(description: "API call completed")
17+
remote.getAnnouncements(appId: "test-app", appVersion: "2.0", locale: "en") {
18+
result = $0
19+
completed.fulfill()
20+
}
21+
wait(for: [completed], timeout: 0.3)
22+
23+
try XCTAssertEqual(XCTUnwrap(result).get().count, 0)
24+
}
25+
26+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"sites": [
3+
{ "ID": 123, "zendesk_site_meta": { "plan": "free", "addon": [] } }
4+
]
5+
}

WordPressKitTests/PlanServiceRemoteTests.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class PlanServiceRemoteTests: RemoteTestCase, RESTTestable {
1414
let getPlansBadJsonFailureMockFilename_ApiVersion1_3 = "site-plans-v3-bad-json-failure.json"
1515
let getWpcomPlansSuccessMockFilename = "plans-mobile-success.json"
1616
let getPlansMeSitesSuccessMockFilename = "plans-me-sites-success.json"
17+
let getZendeskMetadataSuccessMockFilename = "site-zendesk-metadata-success.json"
1718

1819
// MARK: - Properties
1920

@@ -294,4 +295,39 @@ class PlanServiceRemoteTests: RemoteTestCase, RESTTestable {
294295
XCTAssertEqual(result2.siteID, 2)
295296
XCTAssertFalse(result2.plan.name.contains(jetpackFlag))
296297
}
298+
299+
// MARK: - Zendesk
300+
301+
func testZendeskMetadata() throws {
302+
stubRemoteResponse("rest/v1.1/me/sites?fields=ID%2C%20zendesk_site_meta", filename: getZendeskMetadataSuccessMockFilename, contentType: .ApplicationJSON, status: 200)
303+
304+
var result: Result<ZendeskMetadata, Error>? = nil
305+
let completed = expectation(description: "API call completed")
306+
remote.getZendeskMetadata(siteID: 123, completion: {
307+
result = $0
308+
completed.fulfill()
309+
})
310+
wait(for: [completed], timeout: 0.3)
311+
312+
try XCTAssertEqual(XCTUnwrap(result).get().plan, "free")
313+
}
314+
315+
func testZendeskMetadataSiteNotFound() throws {
316+
stubRemoteResponse("rest/v1.1/me/sites?fields=ID%2C%20zendesk_site_meta", filename: getZendeskMetadataSuccessMockFilename, contentType: .ApplicationJSON, status: 200)
317+
318+
var result: Result<ZendeskMetadata, Error>? = nil
319+
let completed = expectation(description: "API call completed")
320+
remote.getZendeskMetadata(siteID: 9999, completion: {
321+
result = $0
322+
completed.fulfill()
323+
})
324+
wait(for: [completed], timeout: 0.3)
325+
326+
switch try XCTUnwrap(result) {
327+
case .failure(PlanServiceRemoteError.noMetadata):
328+
XCTAssertTrue(true)
329+
default:
330+
XCTFail("Unexpected result: \(result)")
331+
}
332+
}
297333
}

0 commit comments

Comments
 (0)