-
Notifications
You must be signed in to change notification settings - Fork 7
/
MomentBoundaryTest.kt
108 lines (89 loc) · 4.15 KB
/
MomentBoundaryTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package io.embrace.android.embracesdk.session
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.embrace.android.embracesdk.EventType
import io.embrace.android.embracesdk.IntegrationTestRule
import io.embrace.android.embracesdk.recordSession
import org.junit.Assert.assertEquals
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
/**
* Asserts that moments (including startup moments) remain between session boundaries.
*/
@RunWith(AndroidJUnit4::class)
internal class MomentBoundaryTest {
companion object {
private const val MOMENT_NAME = "my_moment"
}
@Rule
@JvmField
val testRule: IntegrationTestRule = IntegrationTestRule()
@Test
fun `startup moment completes within one session`() {
with(testRule) {
val message = harness.recordSession {
embrace.endAppStartup()
embrace.startMoment(MOMENT_NAME)
embrace.endMoment(MOMENT_NAME)
}
checkNotNull(message)
val moments = fetchDeliveredEvents()
assertEquals(4, moments.size)
val startMoment = moments[0]
val endMoment = moments[1]
val myStartMoment = moments[2]
val myEndMoment = moments[3]
assertEquals("_startup", startMoment.event.name)
assertEquals(EventType.START, startMoment.event.type)
assertEquals(message.session.sessionId, startMoment.event.sessionId)
assertEquals("_startup", endMoment.event.name)
assertEquals(EventType.END, endMoment.event.type)
assertEquals(message.session.sessionId, endMoment.event.sessionId)
assertEquals(MOMENT_NAME, myStartMoment.event.name)
assertEquals(EventType.START, myStartMoment.event.type)
assertEquals(message.session.sessionId, myStartMoment.event.sessionId)
assertEquals(MOMENT_NAME, myEndMoment.event.name)
assertEquals(EventType.END, myEndMoment.event.type)
assertEquals(message.session.sessionId, myEndMoment.event.sessionId)
val expectedEventIds = listOf(startMoment.event.eventId, myStartMoment.event.eventId)
assertEquals(expectedEventIds, message.session.eventIds)
}
}
@Test
fun `startup moment completes within two sessions`() {
with(testRule) {
val firstMessage = harness.recordSession {
embrace.startMoment(MOMENT_NAME)
}
val secondMessage = harness.recordSession {
embrace.endAppStartup()
embrace.endMoment(MOMENT_NAME)
}
checkNotNull(firstMessage)
checkNotNull(secondMessage)
val moments = fetchDeliveredEvents()
assertEquals(4, moments.size)
val startMoment = moments[0]
val myStartMoment = moments[1]
val endMoment = moments[2]
val myEndMoment = moments[3]
assertEquals("_startup", startMoment.event.name)
assertEquals(EventType.START, startMoment.event.type)
assertEquals(firstMessage.session.sessionId, startMoment.event.sessionId)
assertEquals(MOMENT_NAME, myStartMoment.event.name)
assertEquals(EventType.START, myStartMoment.event.type)
assertEquals(firstMessage.session.sessionId, myStartMoment.event.sessionId)
assertEquals("_startup", endMoment.event.name)
assertEquals(EventType.END, endMoment.event.type)
assertEquals(secondMessage.session.sessionId, endMoment.event.sessionId)
assertEquals(MOMENT_NAME, myEndMoment.event.name)
assertEquals(EventType.END, myEndMoment.event.type)
assertEquals(secondMessage.session.sessionId, myEndMoment.event.sessionId)
val expectedEventIds = listOf(startMoment.event.eventId, myStartMoment.event.eventId)
assertEquals(expectedEventIds, firstMessage.session.eventIds)
assertEquals(expectedEventIds, secondMessage.session.eventIds)
}
}
private fun IntegrationTestRule.fetchDeliveredEvents() =
harness.fakeDeliveryModule.deliveryService.sentMoments
}