Skip to content

Commit b0bdd98

Browse files
authored
Merge pull request #2 from meilisearch/master
Merge from original repo
2 parents 1f138d1 + e21f2aa commit b0bdd98

File tree

5 files changed

+86
-15
lines changed

5 files changed

+86
-15
lines changed

Sources/MeiliSearch/Model/Update.swift

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ public struct Update: Codable, Equatable {
1717
// MARK: Properties
1818

1919
///Returns if the update has been sucessful or not.
20-
public let status: String
20+
public let status: Status
2121

2222
///Unique ID for the current `Update`.
2323
public let updateId: Int
2424

2525
///Type of update.
26-
public let type: Type
26+
public let type: UpdateType
2727

2828
///Duration of the update process.
2929
public let duration: TimeInterval?
@@ -34,8 +34,8 @@ public struct Update: Codable, Equatable {
3434
///Date when the update has been processed.
3535
public let processedAt: Date?
3636

37-
///Typr of `Update`.
38-
public struct `Type`: Codable, Equatable {
37+
///Type of `Update`
38+
public struct UpdateType: Codable, Equatable {
3939

4040
// MARK: Properties
4141

@@ -49,4 +49,33 @@ public struct Update: Codable, Equatable {
4949

5050
}
5151

52+
public enum Status: Codable, Equatable {
53+
54+
case enqueued
55+
case processed
56+
case failed
57+
58+
public enum StatusError: Error {
59+
case unknown
60+
}
61+
62+
public init(from decoder: Decoder) throws {
63+
let container = try decoder.singleValueContainer()
64+
let rawStatus = try container.decode(String.self)
65+
switch rawStatus {
66+
case "enqueued":
67+
self = .enqueued
68+
case "processed":
69+
self = .processed
70+
case "failed":
71+
self = .failed
72+
default:
73+
throw StatusError.unknown
74+
}
75+
}
76+
77+
public func encode(to encoder: Encoder) throws { }
78+
79+
}
80+
5281
}

Tests/MeiliSearchIntegrationTests/DocumentsTests.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class DocumentsTests: XCTestCase {
174174
}
175175
self.wait(for: [getExpectation], timeout: 3.0)
176176
}
177-
177+
178178
func testAddAndGetOneDocumentWithIntIdentifierAndSucceed() {
179179

180180
let movie: Movie = Movie(id: 10, title: "test", comment: "test movie")
@@ -240,7 +240,6 @@ class DocumentsTests: XCTestCase {
240240

241241
case .success(let update):
242242

243-
244243
XCTAssertEqual(Update(updateId: 0), update)
245244

246245
Thread.sleep(forTimeInterval: 1.0)

Tests/MeiliSearchIntegrationTests/SettingsTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class SettingsTests: XCTestCase {
2020
private let defaultAttributesForFaceting: [String] = []
2121
private let defaultStopWords: [String] = []
2222
private let defaultSynonyms: [String: [String]] = [:]
23-
private var defaultGlobalSettings: Setting? = nil
23+
private var defaultGlobalSettings: Setting?
2424

2525
// MARK: Setup
2626

Tests/MeiliSearchIntegrationTests/UpdatesTests.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ class UpdatesTests: XCTestCase {
6868
switch result {
6969
case .success(let update):
7070

71-
self.client.getUpdate(UID: self.uid, update) { result in
71+
self.client.getUpdate(UID: self.uid, update) { (result: Result<Update.Result, Swift.Error>) in
7272

7373
switch result {
7474
case .success(let update):
75-
XCTAssertTrue(["enqueued", "processed", "fail"].contains(update.status))
75+
XCTAssertEqual("DocumentsAddition", update.type.name)
76+
XCTAssertTrue(update.type.number >= 0)
7677
case .failure(let error):
7778
print(error)
7879
XCTFail()
@@ -102,13 +103,13 @@ class UpdatesTests: XCTestCase {
102103
self.client.addDocuments(UID: self.uid, documents: documents, primaryKey: nil) { _ in }
103104
}
104105

105-
self.client.getAllUpdates(UID: self.uid) { result in
106+
self.client.getAllUpdates(UID: self.uid) { (result: Result<[Update.Result], Swift.Error>) in
106107

107108
switch result {
108109
case .success(let updates):
109-
let statuses: [String] = ["enqueued", "processed", "fail"]
110110
updates.forEach { (update: Update.Result) in
111-
XCTAssertTrue(statuses.contains(update.status))
111+
XCTAssertEqual("DocumentsAddition", update.type.name)
112+
XCTAssertTrue(update.type.number >= 0)
112113
}
113114

114115
case .failure(let error):

Tests/MeiliSearchUnitTests/UpdatesTests.swift

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class UpdatesTests: XCTestCase {
3131

3232
let data = json.data(using: .utf8)!
3333

34-
let stubResult: Update.Result = try! Constants.customJSONDecoder.decode(Update.Result.self, from: data)
34+
let stubResult: Update.Result = try! Constants.customJSONDecoder.decode(
35+
Update.Result.self, from: data)
3536

3637
session.pushData(json)
3738

@@ -46,10 +47,51 @@ class UpdatesTests: XCTestCase {
4647
switch result {
4748
case .success(let result):
4849
XCTAssertEqual(stubResult, result)
49-
expectation.fulfill()
5050
case .failure:
5151
XCTFail("Failed to get settings")
5252
}
53+
expectation.fulfill()
54+
}
55+
56+
self.wait(for: [expectation], timeout: 1.0)
57+
58+
}
59+
60+
func testGetUpdateInvalidStatus() {
61+
62+
//Prepare the mock server
63+
64+
let badStatusUpdateJson = """
65+
{
66+
"status": "something",
67+
"updateId": 1,
68+
"type": {
69+
"name": "DocumentsAddition",
70+
"number": 4
71+
},
72+
"duration": 0.076980613,
73+
"enqueuedAt": "2019-12-07T21:16:09.623944Z",
74+
"processedAt": "2019-12-07T21:16:09.703509Z"
75+
}
76+
"""
77+
78+
session.pushData(badStatusUpdateJson)
79+
80+
// Start the test with the mocked server
81+
82+
let UID: String = "movies"
83+
let update = Update(updateId: 1)
84+
85+
let expectation = XCTestExpectation(description: "Get settings")
86+
87+
self.client.getUpdate(UID: UID, update) { result in
88+
switch result {
89+
case .success:
90+
XCTFail("The server send a invalid status and it should not succeed")
91+
case .failure(let error):
92+
XCTAssertTrue(error is Update.Status.StatusError)
93+
expectation.fulfill()
94+
}
5395
}
5496

5597
self.wait(for: [expectation], timeout: 1.0)
@@ -92,10 +134,10 @@ class UpdatesTests: XCTestCase {
92134
switch result {
93135
case .success(let results):
94136
XCTAssertEqual(stubResults, results)
95-
expectation.fulfill()
96137
case .failure:
97138
XCTFail("Failed to get settings")
98139
}
140+
expectation.fulfill()
99141
}
100142

101143
self.wait(for: [expectation], timeout: 1.0)

0 commit comments

Comments
 (0)