@@ -6,7 +6,6 @@ import io.sentry.SpanDataConvention
66import io.sentry.rrweb.RRWebBreadcrumbEvent
77import io.sentry.rrweb.RRWebSpanEvent
88import junit.framework.TestCase.assertEquals
9- import junit.framework.TestCase.assertTrue
109import java.util.Date
1110import kotlin.test.Test
1211import kotlin.test.assertNull
@@ -115,9 +114,6 @@ class DefaultReplayBreadcrumbConverterTest {
115114 check(rrwebEvent is RRWebBreadcrumbEvent )
116115 assertEquals(" device.orientation" , rrwebEvent.category)
117116 assertEquals(" landscape" , rrwebEvent.data!! [" position" ])
118- assertEquals(123L , rrwebEvent.timestamp)
119- assertEquals(0.123 , rrwebEvent.breadcrumbTimestamp)
120- assertEquals(" default" , rrwebEvent.breadcrumbType)
121117 }
122118
123119 @Test
@@ -150,9 +146,6 @@ class DefaultReplayBreadcrumbConverterTest {
150146 check(rrwebEvent is RRWebBreadcrumbEvent )
151147 assertEquals(" navigation" , rrwebEvent.category)
152148 assertEquals(" MainActivity" , rrwebEvent.data!! [" to" ])
153- assertEquals(123L , rrwebEvent.timestamp)
154- assertEquals(0.123 , rrwebEvent.breadcrumbTimestamp)
155- assertEquals(" default" , rrwebEvent.breadcrumbType)
156149 }
157150
158151 @Test
@@ -170,48 +163,126 @@ class DefaultReplayBreadcrumbConverterTest {
170163 check(rrwebEvent is RRWebBreadcrumbEvent )
171164 assertEquals(" navigation" , rrwebEvent.category)
172165 assertEquals(" /github" , rrwebEvent.data!! [" to" ])
173- assertEquals(123L , rrwebEvent.timestamp)
174- assertEquals(0.123 , rrwebEvent.breadcrumbTimestamp)
175- assertEquals(" default" , rrwebEvent.breadcrumbType)
176166 }
177167
178- // @Test
179- // fun `test convert with navigation and app lifecycle`() {
180- // val breadcrumb = Breadcrumb().apply {
181- // message = "message"
182- // category = "navigation"
183- // type = "navigation"
184- // level = SentryLevel.ERROR
185- // data["state"] = "resumed"
186- // data["screen"] = "screen"
187- // }
188- //
189- // val result = DefaultReplayBreadcrumbConverter().convert(breadcrumb)
190- //
191- // assertTrue(result is RRWebBreadcrumbEvent)
192- // assertEquals("navigation", result.category)
193- // assertEquals("navigation", result.type)
194- // assertEquals(SentryLevel.ERROR, result.level)
195- // assertEquals("resumed", result.data["state"])
196- // assertEquals("screen", result.data["screen"])
197- // }
198- //
199- // @Test
200- // fun `test convert with navigation and device orientation`() {
201- // val breadcrumb = Breadcrumb().apply {
202- // message = "message"
203- // category = "navigation"
204- // type = "navigation"
205- // level = SentryLevel.ERROR
206- // data["position"] = "landscape"
207- // }
208- //
209- // val result = DefaultReplayBreadcrumbConverter().convert(breadcrumb)
210- //
211- // assertTrue(result is RRWebBreadcrumbEvent)
212- // assertEquals("navigation", result.category)
213- // assertEquals("navigation", result.type)
214- // assertEquals(SentryLevel.ERROR, result.level)
215- // assertEquals("landscape", result.data["position"])
216- // }
168+ @Test
169+ fun `returns null when lifecycle state is not 'resumed'` () {
170+ val converter = fixture.getSut()
171+
172+ val breadcrumb = Breadcrumb (Date (123L )).apply {
173+ category = " navigation"
174+ type = " navigation"
175+ data[" state" ] = " started"
176+ data[" screen" ] = " io.sentry.MainActivity"
177+ }
178+
179+ val rrwebEvent = converter.convert(breadcrumb)
180+
181+ assertNull(rrwebEvent)
182+ }
183+
184+ @Test
185+ fun `converts ui click breadcrumbs` () {
186+ val converter = fixture.getSut()
187+
188+ val breadcrumb = Breadcrumb (Date (123L )).apply {
189+ category = " ui.click"
190+ type = " user"
191+ data[" view.id" ] = " button_login"
192+ }
193+
194+ val rrwebEvent = converter.convert(breadcrumb)
195+
196+ check(rrwebEvent is RRWebBreadcrumbEvent )
197+ assertEquals(" ui.tap" , rrwebEvent.category)
198+ assertEquals(" button_login" , rrwebEvent.message)
199+ }
200+
201+ @Test
202+ fun `returns null if no view identifier in data` () {
203+ val converter = fixture.getSut()
204+
205+ val breadcrumb = Breadcrumb (Date (123L )).apply {
206+ category = " ui.click"
207+ type = " user"
208+ }
209+
210+ val rrwebEvent = converter.convert(breadcrumb)
211+
212+ assertNull(rrwebEvent)
213+ }
214+
215+ @Test
216+ fun `converts network connectivity breadcrumbs` () {
217+ val converter = fixture.getSut()
218+
219+ val breadcrumb = Breadcrumb (Date (123L )).apply {
220+ category = " network.event"
221+ type = " system"
222+ data[" network_type" ] = " cellular"
223+ }
224+
225+ val rrwebEvent = converter.convert(breadcrumb)
226+
227+ check(rrwebEvent is RRWebBreadcrumbEvent )
228+ assertEquals(" device.connectivity" , rrwebEvent.category)
229+ assertEquals(" cellular" , rrwebEvent.data!! [" state" ])
230+ }
231+
232+ @Test
233+ fun `returns null if no network connectivity state` () {
234+ val converter = fixture.getSut()
235+
236+ val breadcrumb = Breadcrumb (Date (123L )).apply {
237+ category = " network.event"
238+ type = " system"
239+ }
240+
241+ val rrwebEvent = converter.convert(breadcrumb)
242+
243+ assertNull(rrwebEvent)
244+ }
245+
246+ @Test
247+ fun `converts battery status breadcrumbs` () {
248+ val converter = fixture.getSut()
249+
250+ val breadcrumb = Breadcrumb (Date (123L )).apply {
251+ category = " device.event"
252+ type = " system"
253+ data[" action" ] = " BATTERY_CHANGED"
254+ data[" level" ] = 85.0f
255+ data[" charging" ] = true
256+ data[" stuff" ] = " shiet"
257+ }
258+
259+ val rrwebEvent = converter.convert(breadcrumb)
260+
261+ check(rrwebEvent is RRWebBreadcrumbEvent )
262+ assertEquals(" device.battery" , rrwebEvent.category)
263+ assertEquals(85.0f , rrwebEvent.data!! [" level" ])
264+ assertEquals(true , rrwebEvent.data!! [" charging" ])
265+ assertNull(rrwebEvent.data!! [" stuff" ])
266+ }
267+
268+ @Test
269+ fun `converts generic breadcrumbs` () {
270+ val converter = fixture.getSut()
271+
272+ val breadcrumb = Breadcrumb (Date (123L )).apply {
273+ category = " device.event"
274+ type = " system"
275+ message = " message"
276+ level = SentryLevel .ERROR
277+ data[" stuff" ] = " shiet"
278+ }
279+
280+ val rrwebEvent = converter.convert(breadcrumb)
281+
282+ check(rrwebEvent is RRWebBreadcrumbEvent )
283+ assertEquals(" device.event" , rrwebEvent.category)
284+ assertEquals(" message" , rrwebEvent.message)
285+ assertEquals(SentryLevel .ERROR , rrwebEvent.level)
286+ assertEquals(" shiet" , rrwebEvent.data!! [" stuff" ])
287+ }
217288}
0 commit comments