Skip to content

Commit bf7c1c6

Browse files
committed
feat(#28): add navigate(destination)
1 parent 94ee665 commit bf7c1c6

File tree

5 files changed

+96
-3
lines changed

5 files changed

+96
-3
lines changed

lib/src/main/java/com/telemetrydeck/sdk/NavigationStatus.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,9 @@ interface NavigationStatus {
55
* Apply the provided path as a visited destination.
66
*/
77
fun applyDestination(path: String)
8+
9+
/**
10+
* Returns the last destination path or an empty string if none has been provided.
11+
*/
12+
fun getLastDestination(): String
813
}

lib/src/main/java/com/telemetrydeck/sdk/NavigationStatusCache.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@ class MemoryNavigationStatus(private var previousNavigationPath: String? = null)
99
override fun applyDestination(path: String) {
1010
previousNavigationPath = path
1111
}
12+
13+
override fun getLastDestination(): String {
14+
return previousNavigationPath ?: ""
15+
}
1216
}

lib/src/main/java/com/telemetrydeck/sdk/TelemetryManager.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class TelemetryManager(
2020

2121
var cache: SignalCache? = null
2222
var logger: DebugLogger? = null
23-
var navigationStatus: NavigationStatus = MemoryNavigationStatus()
23+
private val navigationStatus: NavigationStatus = MemoryNavigationStatus()
2424

2525
override fun newSession(sessionID: UUID) {
2626
this.configuration.sessionID = sessionID
@@ -59,6 +59,10 @@ class TelemetryManager(
5959
queue(SignalType.TelemetryDeckNavigationPathChanged, clientUser, payload)
6060
}
6161

62+
override fun navigate(destinationPath: String, clientUser: String?) {
63+
navigate(navigationStatus.getLastDestination(), destinationPath, clientUser)
64+
}
65+
6266
override suspend fun send(
6367
signalType: String,
6468
clientUser: String?,
@@ -222,7 +226,11 @@ class TelemetryManager(
222226
}
223227

224228
override fun navigate(sourcePath: String, destinationPath: String, clientUser: String?) {
225-
getInstance()?.navigate(sourcePath, destinationPath, clientUser)
229+
getInstance()?.navigate(sourcePath, destinationPath, clientUser = clientUser)
230+
}
231+
232+
override fun navigate(destinationPath: String, clientUser: String?) {
233+
getInstance()?.navigate(destinationPath, clientUser = clientUser)
226234
}
227235

228236
override suspend fun send(

lib/src/main/java/com/telemetrydeck/sdk/TelemetryManagerSignals.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,19 @@ interface TelemetryManagerSignals {
3939
)
4040

4141
/**
42-
* Send a signal that represents a navigation event with a source and a destination
42+
* Send a signal that represents a navigation event with a source and a destination.
4343
*
4444
* @see <a href="https://telemetrydeck.com/docs/articles/navigation-signals/">Navigation Signals</a>
4545
* */
4646
fun navigate(sourcePath: String, destinationPath: String, clientUser: String? = null)
4747

48+
/**
49+
* Send a signal that represents a navigation event with a destination and a default source.
50+
*
51+
* @see <a href="https://telemetrydeck.com/docs/articles/navigation-signals/">Navigation Signals</a>
52+
* */
53+
fun navigate(destinationPath: String, clientUser: String? = null)
54+
4855

4956
/**
5057
* Send a signal immediately

lib/src/test/java/com/telemetrydeck/sdk/TelemetryManagerTest.kt

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,75 @@ class TelemetryManagerTest {
322322
"6721870580401922549fe8fdb09a064dba5b8792fa018d3bd9ffa90fe37a0149"
323323
)
324324
}
325+
326+
@Test
327+
fun telemetryManager_navigate_destination_no_previous_source() {
328+
val config = TelemetryManagerConfiguration("32CB6574-6732-4238-879F-582FEBEB6536")
329+
val manager = TelemetryManager.Builder().configuration(config).build(null)
330+
331+
manager.navigate("destination")
332+
333+
val queuedSignal = manager.cache?.empty()?.first()
334+
335+
Assert.assertNotNull(queuedSignal)
336+
337+
// validate the signal type
338+
Assert.assertEquals(queuedSignal?.type, "TelemetryDeck.Navigation.pathChanged")
339+
340+
// validate the navigation status payload
341+
// https://github.com/TelemetryDeck/KotlinSDK/issues/28
342+
Assert.assertEquals(
343+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.schemaVersion") },
344+
"TelemetryDeck.Navigation.schemaVersion:1"
345+
)
346+
Assert.assertEquals(
347+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.identifier") },
348+
"TelemetryDeck.Navigation.identifier: -> destination"
349+
)
350+
Assert.assertEquals(
351+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.sourcePath") },
352+
"TelemetryDeck.Navigation.sourcePath:"
353+
)
354+
Assert.assertEquals(
355+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.destinationPath") },
356+
"TelemetryDeck.Navigation.destinationPath:destination"
357+
)
358+
}
359+
360+
@Test
361+
fun telemetryManager_navigate_destination_uses_previous_destination_as_source() {
362+
val config = TelemetryManagerConfiguration("32CB6574-6732-4238-879F-582FEBEB6536")
363+
val manager = TelemetryManager.Builder().configuration(config).build(null)
364+
365+
manager.navigate("destination1")
366+
manager.navigate("destination2")
367+
368+
val queuedSignal = manager.cache?.empty()?.last()
369+
370+
Assert.assertNotNull(queuedSignal)
371+
372+
// validate the signal type
373+
Assert.assertEquals(queuedSignal?.type, "TelemetryDeck.Navigation.pathChanged")
374+
375+
// validate the navigation status payload
376+
// https://github.com/TelemetryDeck/KotlinSDK/issues/28
377+
Assert.assertEquals(
378+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.schemaVersion") },
379+
"TelemetryDeck.Navigation.schemaVersion:1"
380+
)
381+
Assert.assertEquals(
382+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.identifier") },
383+
"TelemetryDeck.Navigation.identifier:destination1 -> destination2"
384+
)
385+
Assert.assertEquals(
386+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.sourcePath") },
387+
"TelemetryDeck.Navigation.sourcePath:destination1"
388+
)
389+
Assert.assertEquals(
390+
queuedSignal?.payload?.single { it.startsWith("TelemetryDeck.Navigation.destinationPath") },
391+
"TelemetryDeck.Navigation.destinationPath:destination2"
392+
)
393+
}
325394
}
326395

327396
open class TestProvider : TelemetryProvider {

0 commit comments

Comments
 (0)