@@ -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