Skip to content

Commit 7d48887

Browse files
Merge pull request #394 from Iterable/feature/mob-2051
[MOB-2051] - Fix TaskScheduler `schedule` method to return `Result`.
2 parents b232415 + 2db31bc commit 7d48887

File tree

4 files changed

+22
-21
lines changed

4 files changed

+22
-21
lines changed

swift-sdk/Internal/IterableTaskScheduler.swift

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,25 @@ class IterableTaskScheduler {
1717

1818
func schedule(apiCallRequest: IterableAPICallRequest,
1919
context: IterableTaskContext = IterableTaskContext(blocking: true),
20-
scheduledAt: Date? = nil) throws -> String {
20+
scheduledAt: Date? = nil) -> Result<String, IterableTaskError> {
2121
ITBInfo()
2222
let taskId = IterableUtil.generateUUID()
23-
let data = try JSONEncoder().encode(apiCallRequest)
24-
25-
try persistenceContext.create(task: IterableTask(id: taskId,
26-
name: apiCallRequest.getPath(),
27-
type: .apiCall,
28-
scheduledAt: scheduledAt ?? dateProvider.currentDate,
29-
data: data,
30-
requestedAt: dateProvider.currentDate))
31-
try persistenceContext.save()
32-
33-
notificationCenter.post(name: .iterableTaskScheduled, object: self, userInfo: nil)
34-
35-
return taskId
23+
do {
24+
let data = try JSONEncoder().encode(apiCallRequest)
25+
26+
try persistenceContext.create(task: IterableTask(id: taskId,
27+
name: apiCallRequest.getPath(),
28+
type: .apiCall,
29+
scheduledAt: scheduledAt ?? dateProvider.currentDate,
30+
data: data,
31+
requestedAt: dateProvider.currentDate))
32+
try persistenceContext.save()
33+
34+
notificationCenter.post(name: .iterableTaskScheduled, object: self, userInfo: nil)
35+
} catch let error {
36+
return Result.failure(IterableTaskError.general("schedule taskId: \(taskId) failed with error: \(error.localizedDescription)"))
37+
}
38+
return Result.success(taskId)
3639
}
3740

3841
private let persistenceContextProvider: IterablePersistenceContextProvider

swift-sdk/Internal/OfflineRequestProcessor.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,17 +367,15 @@ struct OfflineRequestProcessor: RequestProcessorProtocol {
367367
auth: authProvider.auth,
368368
deviceMetadata: deviceMetadata,
369369
iterableRequest: iterableRequest)
370-
371-
do {
372-
let taskId = try taskScheduler.schedule(apiCallRequest: apiCallRequest,
373-
context: IterableTaskContext(blocking: true))
370+
switch taskScheduler.schedule(apiCallRequest: apiCallRequest, context: IterableTaskContext(blocking: true)) {
371+
case .success(let taskId):
374372
let result = notificationListener.futureFromTask(withTaskId: taskId)
375373
return RequestProcessorUtil.apply(successHandler: onSuccess,
376374
andFailureHandler: onFailure,
377375
andAuthManager: authManager,
378376
toResult: result,
379377
withIdentifier: identifier)
380-
} catch let error {
378+
case .failure(let error):
381379
ITBError(error.localizedDescription)
382380
return SendRequestError.createErroredFuture(reason: error.localizedDescription)
383381
}

tests/offline-events-tests/TaskRunnerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ class TaskRunnerTests: XCTestCase {
231231

232232
return try IterableTaskScheduler(persistenceContextProvider: persistenceContextProvider,
233233
notificationCenter: notificationCenter,
234-
dateProvider: dateProvider).schedule(apiCallRequest: apiCallRequest)
234+
dateProvider: dateProvider).schedule(apiCallRequest: apiCallRequest).get()
235235
}
236236

237237
private func verifyNoTaskIsExecuted(_ notificationCenter: MockNotificationCenter, forInterval interval: TimeInterval) {

tests/offline-events-tests/TaskSchedulerTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class TaskSchedulerTests: XCTestCase {
4545
let scheduler = IterableTaskScheduler(persistenceContextProvider: persistenceContextProvider,
4646
notificationCenter: notificationCenter,
4747
dateProvider: dateProvider)
48-
let taskId = try scheduler.schedule(apiCallRequest: apiCallRequest)
48+
let taskId = try scheduler.schedule(apiCallRequest: apiCallRequest).get()
4949

5050
wait(for: [expectation1], timeout: 10.0)
5151

0 commit comments

Comments
 (0)