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

Commit 66a89bb

Browse files
authored
Merge pull request #177 from wordpress-mobile/release/4.3.1
Release 4.3.1
2 parents 988d3a5 + 001e24b commit 66a89bb

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed

WordPressKit/EditorServiceRemote.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,35 @@ public class EditorServiceRemote: ServiceRemoteWordPressComREST {
1818
}
1919
}
2020

21+
public func postDesignateMobileEditorForAllSites(_ editor: EditorSettings.Mobile, setOnlyIfEmpty: Bool = true, success: @escaping ([Int: EditorSettings.Mobile]) -> Void, failure: @escaping (Error) -> Void) {
22+
let endpoint = "me/gutenberg"
23+
let path = self.path(forEndpoint: endpoint, withVersion: ._2_0)
24+
25+
let parameters = [
26+
"platform": "mobile",
27+
"editor": editor.rawValue,
28+
"set_only_if_empty": setOnlyIfEmpty,
29+
] as [String: AnyObject]
30+
31+
wordPressComRestApi.POST(path, parameters: parameters, success: { (responseObject, httpResponse) in
32+
guard let response = responseObject as? [String: String] else {
33+
if let boolResponse = responseObject as? Bool, boolResponse == false {
34+
return failure(EditorSettings.Error.badRequest)
35+
}
36+
return failure(EditorSettings.Error.badResponse)
37+
}
38+
39+
let mappedResponse = response.reduce(into: [Int: EditorSettings.Mobile](), { (result, response) in
40+
if let id = Int(response.key), let editor = EditorSettings.Mobile(rawValue: response.value) {
41+
result[id] = editor
42+
}
43+
})
44+
success(mappedResponse)
45+
}) { (error, httpError) in
46+
failure(error)
47+
}
48+
}
49+
2150
public func getEditorSettings(_ siteID: Int, success: @escaping (EditorSettings) -> Void, failure: @escaping (Error) -> Void) {
2251
let endpoint = "sites/\(siteID)/gutenberg"
2352
let path = self.path(forEndpoint: endpoint, withVersion: ._2_0)

WordPressKit/EditorSettings.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ private struct RemoteEditorSettings: Codable {
66
public struct EditorSettings {
77
public enum Error: Swift.Error {
88
case decodingFailed
9+
case unknownEditor(String)
10+
case badRequest
11+
case badResponse
912
}
1013

1114
/// Editor choosen by the user to be used on Mobile

WordPressKitTests/EditorServiceRemoteTests.swift

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,62 @@ class EditorServiceRemoteTests: XCTestCase {
179179

180180
wait(for: [expec], timeout: 0.1)
181181
}
182+
183+
func testPostDesignateGutenbergMobileEditorForAllSites() {
184+
let expec = expectation(description: "success")
185+
let editor = EditorSettings.Mobile.gutenberg
186+
187+
let response: [String: String] = [
188+
"1": editor.rawValue,
189+
"2": editor.rawValue,
190+
]
191+
192+
let expected: [Int: EditorSettings.Mobile] = [
193+
1: editor,
194+
2: editor
195+
]
196+
197+
editorServiceRemote.postDesignateMobileEditorForAllSites(editor, success: {
198+
XCTAssertEqual($0, expected)
199+
expec.fulfill()
200+
}) { (error) in
201+
XCTFail("This call should NOT error")
202+
expec.fulfill()
203+
}
204+
205+
mockRemoteApi.successBlockPassedIn?(response as AnyObject, HTTPURLResponse())
206+
XCTAssertTrue(mockRemoteApi.postMethodCalled)
207+
208+
wait(for: [expec], timeout: 0.1)
209+
}
210+
211+
func testPostDesignateAztecMobileEditorForAllSites() {
212+
let expec = expectation(description: "success")
213+
let editor = EditorSettings.Mobile.aztec
214+
215+
let response: [String: String] = [
216+
"1": editor.rawValue,
217+
"2": editor.rawValue,
218+
]
219+
220+
let expected: [Int: EditorSettings.Mobile] = [
221+
1: editor,
222+
2: editor
223+
]
224+
225+
editorServiceRemote.postDesignateMobileEditorForAllSites(editor, success: {
226+
XCTAssertEqual($0, expected)
227+
expec.fulfill()
228+
}) { (error) in
229+
XCTFail("This call should NOT error")
230+
expec.fulfill()
231+
}
232+
233+
mockRemoteApi.successBlockPassedIn?(response as AnyObject, HTTPURLResponse())
234+
XCTAssertTrue(mockRemoteApi.postMethodCalled)
235+
236+
wait(for: [expec], timeout: 0.1)
237+
}
182238
}
183239

184240
extension EditorServiceRemoteTests {

0 commit comments

Comments
 (0)