11import XCTest
2+ import Sentry
23
34final class RNSentryReplayBreadcrumbConverterTests : XCTestCase {
45
6+ func testConvertNavigationBreadcrumb( ) {
7+ let converter = RNSentryReplayBreadcrumbConverter ( )
8+ let testBreadcrumb = Breadcrumb ( )
9+ testBreadcrumb. timestamp = Date ( )
10+ testBreadcrumb. level = . info
11+ testBreadcrumb. type = " navigation "
12+ testBreadcrumb. category = " navigation "
13+ testBreadcrumb. data = [
14+ " from " : " HomeScreen " ,
15+ " to " : " ProfileScreen " ,
16+ ]
17+ let actual = converter. convert ( from: testBreadcrumb)
18+
19+ XCTAssertNotNil ( actual)
20+ let event = actual!. serialize ( )
21+ let data = event [ " data " ] as! [ String : Any ? ]
22+ let payload = data [ " payload " ] as! [ String : Any ? ]
23+ let payloadData = payload [ " data " ] as! [ String : Any ? ]
24+ assertRRWebBreadcrumbDefaults ( actual: event)
25+ XCTAssertEqual ( " info " , payload [ " level " ] as! String )
26+ XCTAssertEqual ( " navigation " , payload [ " category " ] as! String )
27+ XCTAssertEqual ( " HomeScreen " , payloadData [ " from " ] as! String )
28+ XCTAssertEqual ( " ProfileScreen " , payloadData [ " to " ] as! String )
29+ }
30+
31+ func testConvertNavigationBreadcrumbWithOnlyTo( ) {
32+ let converter = RNSentryReplayBreadcrumbConverter ( )
33+ let testBreadcrumb = Breadcrumb ( )
34+ testBreadcrumb. timestamp = Date ( )
35+ testBreadcrumb. level = . info
36+ testBreadcrumb. type = " navigation "
37+ testBreadcrumb. category = " navigation "
38+ testBreadcrumb. data = [
39+ " to " : " ProfileScreen " ,
40+ ]
41+ let actual = converter. convert ( from: testBreadcrumb)
42+
43+ XCTAssertNotNil ( actual)
44+ let event = actual!. serialize ( )
45+ let data = event [ " data " ] as! [ String : Any ? ]
46+ let payload = data [ " payload " ] as! [ String : Any ? ]
47+ let payloadData = payload [ " data " ] as! [ String : Any ? ]
48+ assertRRWebBreadcrumbDefaults ( actual: event)
49+ XCTAssertEqual ( " info " , payload [ " level " ] as! String )
50+ XCTAssertEqual ( " navigation " , payload [ " category " ] as! String )
51+ XCTAssertNil ( payloadData [ " from " ] ?? nil )
52+ XCTAssertEqual ( " ProfileScreen " , payloadData [ " to " ] as! String )
53+ }
54+
555 func testConvertForegroundBreadcrumb( ) {
656 let converter = RNSentryReplayBreadcrumbConverter ( )
757 let testBreadcrumb = Breadcrumb ( )
@@ -11,8 +61,10 @@ final class RNSentryReplayBreadcrumbConverterTests: XCTestCase {
1161 let actual = converter. convert ( from: testBreadcrumb)
1262
1363 XCTAssertNotNil ( actual)
14- let data = actual!. serialize ( ) [ " data " ] as! [ String : Any ? ] ;
64+ let event = actual!. serialize ( )
65+ let data = event [ " data " ] as! [ String : Any ? ]
1566 let payload = data [ " payload " ] as! [ String : Any ? ] ;
67+ assertRRWebBreadcrumbDefaults ( actual: event)
1668 XCTAssertEqual ( payload [ " category " ] as! String , " app.foreground " )
1769 }
1870
@@ -25,8 +77,10 @@ final class RNSentryReplayBreadcrumbConverterTests: XCTestCase {
2577 let actual = converter. convert ( from: testBreadcrumb)
2678
2779 XCTAssertNotNil ( actual)
28- let data = actual!. serialize ( ) [ " data " ] as! [ String : Any ? ] ;
80+ let event = actual!. serialize ( )
81+ let data = event [ " data " ] as! [ String : Any ? ]
2982 let payload = data [ " payload " ] as! [ String : Any ? ] ;
83+ assertRRWebBreadcrumbDefaults ( actual: event)
3084 XCTAssertEqual ( payload [ " category " ] as! String , " app.background " )
3185 }
3286
@@ -46,6 +100,36 @@ final class RNSentryReplayBreadcrumbConverterTests: XCTestCase {
46100 XCTAssertNil ( actual)
47101 }
48102
103+ func testConvertTouchBreadcrumb( ) {
104+ let converter = RNSentryReplayBreadcrumbConverter ( )
105+ let testBreadcrumb = Breadcrumb ( )
106+ testBreadcrumb. timestamp = Date ( )
107+ testBreadcrumb. level = . info
108+ testBreadcrumb. type = " user "
109+ testBreadcrumb. category = " touch "
110+ testBreadcrumb. message = " this won't be used for replay "
111+ testBreadcrumb. data = [
112+ " path " : [
113+ [ " element " : " element4 " , " file " : " file4 " ]
114+ ]
115+ ]
116+ let actual = converter. convert ( from: testBreadcrumb)
117+
118+ XCTAssertNotNil ( actual)
119+ let event = actual!. serialize ( )
120+ let data = event [ " data " ] as! [ String : Any ? ]
121+ let payload = data [ " payload " ] as! [ String : Any ? ]
122+ let payloadData = payload [ " data " ] as! [ String : Any ? ]
123+ assertRRWebBreadcrumbDefaults ( actual: event)
124+ XCTAssertEqual ( " info " , payload [ " level " ] as! String )
125+ XCTAssertEqual ( " ui.tap " , payload [ " category " ] as! String )
126+ XCTAssertEqual ( 1 , payloadData. keys. count)
127+ XCTAssertEqual ( [ [
128+ " element " : " element4 " ,
129+ " file " : " file4 "
130+ ] ] , payloadData [ " path " ] as! [ [ String : String ] ] )
131+ }
132+
49133 func testTouchMessageReturnsNilOnEmptyArray( ) throws {
50134 let actual = RNSentryReplayBreadcrumbConverter . getTouchPathMessage ( from: [ ] )
51135 XCTAssertEqual ( actual, nil ) ;
@@ -88,4 +172,12 @@ final class RNSentryReplayBreadcrumbConverterTests: XCTestCase {
88172 XCTAssertEqual ( actual, " label5(element5, file5) > label4(file4) > label3(element3) > label2 " ) ;
89173 }
90174
175+ private func assertRRWebBreadcrumbDefaults( actual: [ String : Any ? ] ) {
176+ let data = actual [ " data " ] as! [ String : Any ? ]
177+ let payload = data [ " payload " ] as! [ String : Any ? ]
178+ XCTAssertEqual ( " default " , payload [ " type " ] as! String )
179+ XCTAssertEqual ( ( payload [ " timestamp " ] as! Double ) * 1000.0 , Double ( actual [ " timestamp " ] as! Int ) , accuracy: 1.0 )
180+ XCTAssertTrue ( payload [ " timestamp " ] as! Double > 0.0 )
181+ }
182+
91183}
0 commit comments