Skip to content

Commit 9bf4739

Browse files
Merge pull request #441 from Iterable/feature/mob-2478-createdAt-sentAt
[MOB-2478] - Add createdAt, sentAt to all requests. Add tests.
2 parents fdac86a + d841ea4 commit 9bf4739

14 files changed

+155
-61
lines changed

swift-sdk/Internal/ApiClient.swift

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,29 @@ class ApiClient {
1717
authProvider: AuthProvider?,
1818
endPoint: String,
1919
networkSession: NetworkSessionProtocol,
20-
deviceMetadata: DeviceMetadata) {
20+
deviceMetadata: DeviceMetadata,
21+
dateProvider: DateProviderProtocol) {
2122
self.apiKey = apiKey
2223
self.authProvider = authProvider
2324
self.endPoint = endPoint
2425
self.networkSession = networkSession
2526
self.deviceMetadata = deviceMetadata
27+
self.dateProvider = dateProvider
2628
}
2729

2830
func convertToURLRequest(iterableRequest: IterableRequest) -> URLRequest? {
29-
switch iterableRequest {
30-
case let .get(getRequest):
31-
return IterableRequestUtil.createGetRequest(forApiEndPoint: endPoint, path: getRequest.path, headers: createIterableHeaders(), args: getRequest.args)
32-
case let .post(postRequest):
33-
return IterableRequestUtil.createPostRequest(forApiEndPoint: endPoint, path: postRequest.path, headers: createIterableHeaders(), args: postRequest.args, body: postRequest.body)
31+
guard let authProvider = authProvider else {
32+
return nil
3433
}
34+
let currentDate = dateProvider.currentDate
35+
let apiCallRequest = IterableAPICallRequest(apiKey: apiKey,
36+
endPoint: endPoint,
37+
auth: authProvider.auth,
38+
deviceMetadata: deviceMetadata,
39+
iterableRequest: iterableRequest)
40+
.addingBodyField(key: JsonKey.Body.createdAt,
41+
value: IterableUtil.secondsFromEpoch(for: currentDate))
42+
return apiCallRequest.convertToURLRequest(currentDate: currentDate)
3543
}
3644

3745
func send(iterableRequestResult result: Result<IterableRequest, IterableError>) -> Future<SendRequestValue, SendRequestError> {
@@ -78,24 +86,12 @@ class ApiClient {
7886
return .success(RequestCreator(apiKey: apiKey, auth: authProvider.auth, deviceMetadata: deviceMetadata))
7987
}
8088

81-
private func createIterableHeaders() -> [String: String] {
82-
var headers = [JsonKey.contentType.jsonKey: JsonValue.applicationJson.jsonStringValue,
83-
JsonKey.Header.sdkPlatform: JsonValue.iOS.jsonStringValue,
84-
JsonKey.Header.sdkVersion: IterableAPI.sdkVersion,
85-
JsonKey.Header.apiKey: apiKey]
86-
87-
if let authToken = authProvider?.auth.authToken {
88-
headers[JsonKey.Header.authorization] = "Bearer \(authToken)"
89-
}
90-
91-
return headers
92-
}
93-
9489
private let apiKey: String
9590
private weak var authProvider: AuthProvider?
9691
private let endPoint: String
9792
private let networkSession: NetworkSessionProtocol
9893
private let deviceMetadata: DeviceMetadata
94+
private let dateProvider: DateProviderProtocol
9995
}
10096

10197
// MARK: - API REQUEST CALLS

swift-sdk/Internal/DependencyContainer.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ extension DependencyContainerProtocol {
6868
authManager: authManager,
6969
endPoint: endPoint,
7070
networkSession: networkSession,
71-
deviceMetadata: deviceMetadata) },
71+
deviceMetadata: deviceMetadata,
72+
dateProvider: dateProvider) },
7273
offlineCreator: { [weak authProvider] in
7374
guard let persistenceContextProvider = createPersistenceContextProvider() else {
7475
return nil
@@ -90,7 +91,8 @@ extension DependencyContainerProtocol {
9091
authManager: authManager,
9192
endPoint: endPoint,
9293
networkSession: networkSession,
93-
deviceMetadata: deviceMetadata)
94+
deviceMetadata: deviceMetadata,
95+
dateProvider: dateProvider)
9496
}
9597
}
9698

swift-sdk/Internal/IterableAPICallRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ struct IterableAPICallRequest {
6262
}
6363

6464
private static func format(sentAt: Date) -> String {
65-
return "\(IterableUtil.int(fromDate: sentAt))"
65+
return "\(IterableUtil.secondsFromEpoch(for: sentAt))"
6666
}
6767
}
6868

swift-sdk/Internal/IterableAPICallTaskProcessor.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ struct IterableAPICallTaskProcessor: IterableTaskProcessor {
2020

2121
let decodedIterableRequest = try JSONDecoder().decode(IterableAPICallRequest.self, from: data)
2222
let iterableRequest = decodedIterableRequest.addingBodyField(key: JsonKey.Body.createdAt,
23-
value: IterableUtil.int(fromDate: task.scheduledAt))
23+
value: IterableUtil.secondsFromEpoch(for: task.scheduledAt))
2424

2525
guard let urlRequest = iterableRequest.convertToURLRequest(currentDate: dateProvider.currentDate) else {
2626
return IterableTaskError.createErroredFuture(reason: "could not convert to url request")

swift-sdk/Internal/IterableAPIInternal.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,8 @@ final class IterableAPIInternal: NSObject, PushTrackerProtocol, AuthProvider {
403403
authProvider: self,
404404
endPoint: apiEndPoint,
405405
networkSession: networkSession,
406-
deviceMetadata: deviceMetadata)
406+
deviceMetadata: deviceMetadata,
407+
dateProvider: dateProvider)
407408
}()
408409

409410
private lazy var requestHandler: RequestHandlerProtocol = {

swift-sdk/Internal/IterableUtil.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ import UIKit
4646
static func int(fromDate date: Date) -> Int {
4747
Int(date.timeIntervalSince1970 * 1000)
4848
}
49-
49+
50+
/// seconds since epoch.
51+
static func secondsFromEpoch(for date: Date) -> Int {
52+
Int(date.timeIntervalSince1970)
53+
}
54+
5055
// given "var1", "val1", "var2", "val2" as input
5156
// this will return "var1: val1, var2: val2"
5257
// this is useful for description of an object or struct

swift-sdk/Internal/LegacyRequestHandler.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ struct LegacyRequestHandler: RequestHandlerProtocol {
1111
authManager: IterableInternalAuthManagerProtocol?,
1212
endPoint: String,
1313
networkSession: NetworkSessionProtocol,
14-
deviceMetadata: DeviceMetadata) {
14+
deviceMetadata: DeviceMetadata,
15+
dateProvider: DateProviderProtocol) {
1516
self.authManager = authManager
1617
apiClient = ApiClient(apiKey: apiKey,
1718
authProvider: authProvider,
1819
endPoint: endPoint,
1920
networkSession: networkSession,
20-
deviceMetadata: deviceMetadata)
21+
deviceMetadata: deviceMetadata,
22+
dateProvider: dateProvider)
2123
}
2224

2325
var offlineMode = false

swift-sdk/Internal/OnlineRequestProcessor.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ struct OnlineRequestProcessor: RequestProcessorProtocol {
1111
authManager: IterableInternalAuthManagerProtocol?,
1212
endPoint: String,
1313
networkSession: NetworkSessionProtocol,
14-
deviceMetadata: DeviceMetadata) {
14+
deviceMetadata: DeviceMetadata,
15+
dateProvider: DateProviderProtocol) {
1516
self.authManager = authManager
1617
apiClient = ApiClient(apiKey: apiKey,
1718
authProvider: authProvider,
1819
endPoint: endPoint,
1920
networkSession: networkSession,
20-
deviceMetadata: deviceMetadata)
21+
deviceMetadata: deviceMetadata,
22+
dateProvider: dateProvider)
2123
}
2224

2325
@discardableResult

tests/common/CommonMocks.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import WebKit
1010

1111
class MockDateProvider: DateProviderProtocol {
1212
var currentDate = Date()
13+
14+
func reset() {
15+
currentDate = Date()
16+
}
1317
}
1418

1519
@available(iOS 10.0, *)

0 commit comments

Comments
 (0)