Skip to content

Commit 0264e92

Browse files
committed
Fixing event reporter state method invocation. Adding tests for upload start/upload success/upload error test cases
1 parent 118ae7b commit 0264e92

4 files changed

Lines changed: 97 additions & 37 deletions

File tree

IFTTT SDK/LocationEvent.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ public enum LocationEvent: Equatable {
4848
///
4949
/// - Parameters:
5050
/// - `region`: The details of the region that was successfully uploaded.
51-
/// - `delay`:
51+
/// - `delay`: The time in seconds between reporting the event and a successful upload.
5252
case uploadSuccessful(region: RegionEvent, delay: TimeInterval)
5353

54-
/// The SDK failed in uploaded the region event.
54+
/// The SDK failed to upload the region event.
5555
///
5656
/// - Parameters:
5757
/// - `region`: The details of the region that was successfully uploaded.

IFTTT SDK/LocationEventReporter.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,13 @@ final class LocationEventReporter {
110110
case .uploadStart:
111111
locationEvents = regions.map { region -> LocationEvent in
112112
let delay = eventStore.delay(for: region, against: date)
113-
eventStore.trackRecordedEvent(region, at: date)
113+
eventStore.trackEventUploadStart(region, at: date)
114114
return LocationEvent.uploadAttempted(region: region, delay: delay)
115115
}
116116
case .uploadSuccess:
117117
locationEvents = regions.map { region -> LocationEvent in
118118
let delay = eventStore.delay(for: region, against: date)
119-
eventStore.trackRecordedEvent(region, at: date)
119+
eventStore.trackEventSuccessfulUpload(region, at: date)
120120
return LocationEvent.uploadSuccessful(region: region, delay: delay)
121121
}
122122
case .uploadError:

IFTTT SDK/LocationEventStore.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,8 @@ struct LocationEventStore {
161161
///
162162
/// - Parameters:
163163
/// - event: The event to compute the delay for.
164-
/// - delay: The timestamp to compute the delay against.
164+
/// - date: The timestamp to compute the delay against.
165+
/// - Returns: The delay between the parameter date and the last recorded event date for the parameter event. Returns -1 if there is no last recorded event date for the parameter event.
165166
func delay(for event: RegionEvent, against date: Date) -> TimeInterval {
166167
var delay: TimeInterval = -1
167168
if let record = eventMap?[event.recordId.uuidString] {

SDKHostAppTests/LocationEventStoreTests.swift

Lines changed: 91 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,23 @@ class LocationEventStoreTests: XCTestCase {
1717
eventStore.reset()
1818
}
1919

20+
private func runAsserts(
21+
event: RegionEvent,
22+
eventStore: LocationEventStore,
23+
date: Date,
24+
correctState: LocationEventStore.EventState,
25+
expectRecordToBeNil: Bool
26+
) {
27+
let record = eventStore[event.recordId.uuidString]
28+
if expectRecordToBeNil {
29+
XCTAssertNil(record)
30+
} else {
31+
XCTAssertNotNil(record)
32+
XCTAssertEqual(record?.date, date)
33+
XCTAssertEqual(record?.state, correctState)
34+
}
35+
}
36+
2037
func testSubscript() {
2138
let date = Date()
2239
let events = (0...5).map { _ in RegionEvent(kind: .entry, triggerSubscriptionId: "1234") }
@@ -74,50 +91,92 @@ class LocationEventStoreTests: XCTestCase {
7491
eventStore.trackRecordedEvent(event2, at: date)
7592

7693
[event1, event2].forEach {
77-
let record = eventStore[$0.recordId.uuidString]
78-
runAsserts(record: record, uploadDate: date, correctState: .recorded)
94+
runAsserts(
95+
event: $0,
96+
eventStore: eventStore,
97+
date: date,
98+
correctState: .recorded,
99+
expectRecordToBeNil: false
100+
)
79101
}
80102
}
81103

82-
private func runAsserts(
83-
record: LocationEventStore.RecordedEvent?,
84-
uploadDate: Date,
85-
correctState: LocationEventStore.EventState
86-
) {
87-
XCTAssertNotNil(record)
88-
XCTAssertEqual(record?.date, uploadDate)
89-
XCTAssertEqual(record?.state, correctState)
90-
}
91-
92104
func testTrackEventUploadStartEvent() {
93105
let event1 = RegionEvent(kind: .entry, triggerSubscriptionId: "1234")
94106
let event2 = RegionEvent(kind: .exit, triggerSubscriptionId: "1234")
95-
let event1UploadStartDate = Date()
96-
let event2UploadStartDate = Date(timeIntervalSinceNow: 2.0)
97-
98-
eventStore.trackEventUploadStart(event1, at: event1UploadStartDate)
99-
eventStore.trackEventUploadStart(event2, at: event2UploadStartDate)
107+
let eventUploadStartDate = Date()
100108

101-
let event1Record = eventStore[event1.recordId.uuidString]
102-
let event2Record = eventStore[event2.recordId.uuidString]
109+
[event1, event2].forEach {
110+
eventStore.trackEventUploadStart($0, at: eventUploadStartDate)
111+
runAsserts(
112+
event: $0,
113+
eventStore: eventStore,
114+
date: eventUploadStartDate,
115+
correctState: .uploadStart,
116+
expectRecordToBeNil: false
117+
)
118+
}
119+
}
120+
121+
func testTrackEventUploadSuccessEvent() {
122+
let event1 = RegionEvent(kind: .entry, triggerSubscriptionId: "1234")
123+
let event2 = RegionEvent(kind: .exit, triggerSubscriptionId: "1234")
124+
let eventUploadStartDate = Date()
125+
let eventUploadSuccessDate = eventUploadStartDate.addingTimeInterval(4.0)
103126

104-
runAsserts(record: event1Record, uploadDate: event1UploadStartDate, correctState: .uploadStart)
105-
runAsserts(record: event2Record, uploadDate: event2UploadStartDate, correctState: .uploadStart)
127+
[event1, event2].forEach {
128+
eventStore.trackEventUploadStart($0, at: eventUploadStartDate)
129+
eventStore.trackEventSuccessfulUpload($0, at: eventUploadSuccessDate)
130+
131+
runAsserts(
132+
event: $0,
133+
eventStore: eventStore,
134+
date: eventUploadSuccessDate,
135+
correctState: .uploadSuccess,
136+
expectRecordToBeNil: true
137+
)
138+
}
106139
}
107140

108141
func testTrackEventUploadNetworkErrorEvent() {
109142
let event1 = RegionEvent(kind: .entry, triggerSubscriptionId: "1234")
110143
let event2 = RegionEvent(kind: .exit, triggerSubscriptionId: "1234")
111-
let event1ErrorDate = Date()
112-
let event2ErrorDate = Date(timeIntervalSinceNow: 2.0)
113-
114-
eventStore.trackEventFailedUpload(event1, error: .networkError, at: event1ErrorDate)
115-
eventStore.trackEventFailedUpload(event2, error: .networkError, at: event2ErrorDate)
116-
117-
let event1Record = eventStore[event1.recordId.uuidString]
118-
let event2Record = eventStore[event2.recordId.uuidString]
119-
120-
runAsserts(record: event1Record, uploadDate: event1ErrorDate, correctState: .uploadError)
121-
runAsserts(record: event2Record, uploadDate: event2ErrorDate, correctState: .uploadError)
144+
let eventErrorDate = Date()
145+
146+
[event1, event2].forEach {
147+
eventStore.trackEventFailedUpload(
148+
$0,
149+
error: .networkError,
150+
at: eventErrorDate
151+
)
152+
runAsserts(
153+
event: $0,
154+
eventStore: eventStore,
155+
date: eventErrorDate,
156+
correctState: .uploadError,
157+
expectRecordToBeNil: false
158+
)
159+
}
160+
}
161+
162+
func testTrackEventUploadErrorSanityThresholdCrossedEvent() {
163+
let event1 = RegionEvent(kind: .entry, triggerSubscriptionId: "1234")
164+
let event2 = RegionEvent(kind: .exit, triggerSubscriptionId: "1234")
165+
let eventErrorDate = Date()
166+
167+
[event1, event2].forEach {
168+
eventStore.trackEventFailedUpload(
169+
$0,
170+
error: .crossedSanityThreshold,
171+
at: eventErrorDate
172+
)
173+
runAsserts(
174+
event: $0,
175+
eventStore: eventStore,
176+
date: eventErrorDate,
177+
correctState: .uploadError,
178+
expectRecordToBeNil: true
179+
)
180+
}
122181
}
123182
}

0 commit comments

Comments
 (0)