@@ -3,8 +3,178 @@ import CoreLocation
33@testable import TestHelper
44@testable import MapboxCoreNavigation
55
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+
620class 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+
8178 func skipped_testDepartRerouteArrive( ) {
9179
10180 let firstRouteOptions = NavigationRouteOptions ( coordinates: [
0 commit comments