@@ -3,8 +3,178 @@ import CoreLocation
3
3
@testable import TestHelper
4
4
@testable import MapboxCoreNavigation
5
5
6
+ final class ActiveNavigationEventsManagerDataSourceSpy : ActiveNavigationEventsManagerDataSource {
7
+ var routeProgress : MapboxCoreNavigation . RouteProgress = makeRouteProgress ( )
8
+ var router : MapboxCoreNavigation . Router = RouterSpy ( indexedRouteResponse: IndexedRouteResponse ( routeResponse: makeRouteResponse ( ) ,
9
+ routeIndex: 0 ) ,
10
+ dataSource: RouterDataSourceSpy ( ) )
11
+ var desiredAccuracy : CLLocationAccuracy = - 1
12
+ var locationManagerType : MapboxCoreNavigation . NavigationLocationManager . Type = NavigationLocationManagerSpy . self
13
+ }
14
+
15
+ final class PassiveNavigationEventsManagerDataSourceSpy : PassiveNavigationEventsManagerDataSource {
16
+ var rawLocation : CLLocation ? = nil
17
+ var locationManagerType : MapboxCoreNavigation . NavigationLocationManager . Type = NavigationLocationManagerSpy . self
18
+ }
19
+
6
20
class NavigationEventsManagerTests : TestCase {
7
-
21
+ private var eventManager : NavigationEventsManager !
22
+ private var eventsAPI : EventsAPIMock !
23
+ private var activeNavigationDataSource : ActiveNavigationEventsManagerDataSourceSpy !
24
+ private var passiveNavigationDataSource : PassiveNavigationEventsManagerDataSourceSpy !
25
+
26
+ override func setUp( ) {
27
+ super. setUp ( )
28
+ eventsAPI = EventsAPIMock ( )
29
+ activeNavigationDataSource = ActiveNavigationEventsManagerDataSourceSpy ( )
30
+ passiveNavigationDataSource = PassiveNavigationEventsManagerDataSourceSpy ( )
31
+ eventManager = NavigationEventsManager ( activeNavigationDataSource: activeNavigationDataSource,
32
+ passiveNavigationDataSource: passiveNavigationDataSource,
33
+ accessToken: " fake token " ,
34
+ eventsAPI: eventsAPI)
35
+ }
36
+
37
+ func testSendCarPlayConnectEventIfDelaysFlushing( ) {
38
+ eventManager. sendCarPlayConnectEvent ( )
39
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . carplayConnect. rawValue) )
40
+ }
41
+
42
+ func testSendCarPlayConnectEventIfDoesNotDelayFlushing( ) {
43
+ eventManager. delaysEventFlushing = false
44
+ eventManager. sendCarPlayConnectEvent ( )
45
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . carplayConnect. rawValue) )
46
+ }
47
+
48
+ func testSendCarPlayDisconnectEventIfDelaysFlushing( ) {
49
+ eventManager. sendCarPlayDisconnectEvent ( )
50
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . carplayDisconnect. rawValue) )
51
+ }
52
+
53
+ func testSendCarPlayDisconnectEventIfDoesNotDelayFlushing( ) {
54
+ eventManager. delaysEventFlushing = false
55
+ eventManager. sendCarPlayDisconnectEvent ( )
56
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . carplayDisconnect. rawValue) )
57
+ }
58
+
59
+ func testSendRouteRetrievalEventIfDelaysFlushing( ) {
60
+ eventManager. reportReroute ( progress: makeRouteProgress ( ) , proactive: false )
61
+
62
+ eventManager. sendRouteRetrievalEvent ( )
63
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . routeRetrieval. rawValue) )
64
+ }
65
+
66
+ func testSendRouteRetrievalEventIfDoesNotDelayFlushing( ) {
67
+ eventManager. reportReroute ( progress: makeRouteProgress ( ) , proactive: false )
68
+ eventManager. delaysEventFlushing = false
69
+
70
+ eventManager. sendRouteRetrievalEvent ( )
71
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . routeRetrieval. rawValue) )
72
+ }
73
+
74
+ func testNoDepartEventIfNoDatasource( ) {
75
+ eventManager. activeNavigationDataSource = nil
76
+ eventManager. sendDepartEvent ( )
77
+ XCTAssertFalse ( eventsAPI. hasQueuedEvent ( with: EventType . depart. rawValue) )
78
+ }
79
+
80
+ func testSendDepartEventIfDelaysFlushing( ) {
81
+ eventManager. sendDepartEvent ( )
82
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . depart. rawValue) )
83
+ }
84
+
85
+ func testSendDepartEventIfDoesNotDelayFlushing( ) {
86
+ eventManager. delaysEventFlushing = false
87
+ eventManager. sendDepartEvent ( )
88
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . depart. rawValue) )
89
+ }
90
+
91
+ func testNoArriveEventIfNoDatasource( ) {
92
+ eventManager. activeNavigationDataSource = nil
93
+ eventManager. sendArriveEvent ( )
94
+ XCTAssertFalse ( eventsAPI. hasQueuedEvent ( with: EventType . arrive. rawValue) )
95
+ }
96
+
97
+ func testSendArriveEventIfDelaysFlushing( ) {
98
+ eventManager. sendArriveEvent ( )
99
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . arrive. rawValue) )
100
+ }
101
+
102
+ func testSendArriveEventIfDoesNotDelayFlushing( ) {
103
+ eventManager. delaysEventFlushing = false
104
+ eventManager. sendArriveEvent ( )
105
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . arrive. rawValue) )
106
+ }
107
+
108
+ func testNoCancelEventIfNoDatasource( ) {
109
+ eventManager. activeNavigationDataSource = nil
110
+ eventManager. sendCancelEvent ( )
111
+ XCTAssertFalse ( eventsAPI. hasQueuedEvent ( with: EventType . cancel. rawValue) )
112
+ }
113
+
114
+ func testSendCancelEventIfDelaysFlushing( ) {
115
+ eventManager. sendCancelEvent ( )
116
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . cancel. rawValue) )
117
+ }
118
+
119
+ func testSendCancelEventIfDoesNotDelayFlushing( ) {
120
+ eventManager. delaysEventFlushing = false
121
+ eventManager. sendCancelEvent ( )
122
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . cancel. rawValue) )
123
+ }
124
+
125
+ func testNoPassiveNavigationStartEventIfNoDatasource( ) {
126
+ let eventManager = NavigationEventsManager ( activeNavigationDataSource: activeNavigationDataSource,
127
+ passiveNavigationDataSource: nil ,
128
+ accessToken: " fake token " ,
129
+ eventsAPI: eventsAPI)
130
+ eventManager. sendPassiveNavigationStart ( )
131
+ XCTAssertFalse ( eventsAPI. hasQueuedEvent ( with: EventType . freeDrive. rawValue) )
132
+ }
133
+
134
+ func testSendPassiveNavigationStartEventIfDelaysFlushing( ) {
135
+ eventManager. sendPassiveNavigationStart ( )
136
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . freeDrive. rawValue) )
137
+ }
138
+
139
+ func testSendPassiveNavigationStartEventIfDoesNotDelayFlushing( ) {
140
+ eventManager. delaysEventFlushing = false
141
+ eventManager. sendPassiveNavigationStart ( )
142
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . freeDrive. rawValue) )
143
+ }
144
+
145
+ func testNoPassiveNavigationStopEventIfNoDatasource( ) {
146
+ let eventManager = NavigationEventsManager ( activeNavigationDataSource: activeNavigationDataSource,
147
+ passiveNavigationDataSource: nil ,
148
+ accessToken: " fake token " ,
149
+ eventsAPI: eventsAPI)
150
+ eventManager. sendPassiveNavigationStop ( )
151
+ XCTAssertFalse ( eventsAPI. hasQueuedEvent ( with: EventType . freeDrive. rawValue) )
152
+ }
153
+
154
+ func testSendPassiveNavigationStopEventIfDelaysFlushing( ) {
155
+ eventManager. sendPassiveNavigationStop ( )
156
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: EventType . freeDrive. rawValue) )
157
+ }
158
+
159
+ func testSendPassiveNavigationStopEventIfDoesNotDelayFlushing( ) {
160
+ eventManager. delaysEventFlushing = false
161
+ eventManager. sendPassiveNavigationStop ( )
162
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: EventType . freeDrive. rawValue) )
163
+ }
164
+
165
+ func testSendFeedbackEventIfDelaysFlushing( ) {
166
+ let coreEvent = CoreFeedbackEvent ( timestamp: Date ( ) , eventDictionary: [ " event " : " feedback " ] )
167
+ eventManager. sendFeedbackEvents ( [ coreEvent] )
168
+ XCTAssertTrue ( eventsAPI. hasQueuedEvent ( with: " feedback " ) )
169
+ }
170
+
171
+ func testSendFeedbackEventIfDoesNotDelayFlushing( ) {
172
+ eventManager. delaysEventFlushing = false
173
+ let coreEvent = CoreFeedbackEvent ( timestamp: Date ( ) , eventDictionary: [ " event " : " feedback " ] )
174
+ eventManager. sendFeedbackEvents ( [ coreEvent] )
175
+ XCTAssertTrue ( eventsAPI. hasImmediateEvent ( with: " feedback " ) )
176
+ }
177
+
8
178
func skipped_testDepartRerouteArrive( ) {
9
179
10
180
let firstRouteOptions = NavigationRouteOptions ( coordinates: [
0 commit comments