@@ -17,7 +17,7 @@ class SentryNetworkTrackerTests: XCTestCase {
17
17
let dateProvider = TestCurrentDateProvider ( )
18
18
let options : Options
19
19
let scope : Scope
20
- let nsUrlRequest = NSURLRequest ( url: SentryNetworkTrackerTests . fullUrl)
20
+ let nsUrlRequest = NSMutableURLRequest ( url: SentryNetworkTrackerTests . fullUrl)
21
21
let client : TestClient !
22
22
let hub : TestHub !
23
23
let securityHeader = [ " X-FORWARDED-FOR " : " value " ,
@@ -48,6 +48,7 @@ class SentryNetworkTrackerTests: XCTestCase {
48
48
result. enableNetworkTracking ( )
49
49
result. enableNetworkBreadcrumbs ( )
50
50
result. enableCaptureFailedRequests ( )
51
+ result. enableGraphQLOperationTracking ( )
51
52
return result
52
53
}
53
54
}
@@ -337,8 +338,41 @@ class SentryNetworkTrackerTests: XCTestCase {
337
338
XCTAssertEqual ( breadcrumb!. data![ " response_body_size " ] as! Int64 , DATA_BYTES_RECEIVED)
338
339
XCTAssertEqual ( breadcrumb!. data![ " http.query " ] as? String , " query=value&query2=value2 " )
339
340
XCTAssertEqual ( breadcrumb!. data![ " http.fragment " ] as? String , " fragment " )
341
+ XCTAssertNil ( breadcrumb!. data![ " graphql_operation_name " ] )
340
342
}
341
-
343
+
344
+ func testBreadcrumb_GraphQLEnabled( ) {
345
+ let body = """
346
+ {
347
+ " operationName " : " someOperationName " ,
348
+ " variables " :{ " a " : 1},
349
+ " query " : " query someOperationName { \\ n someField \\ n} \\ n "
350
+ }
351
+ """
352
+ fixture. nsUrlRequest. httpBody = body. data ( using: . utf8)
353
+ fixture. nsUrlRequest. setValue ( " application/json " , forHTTPHeaderField: " content-type " )
354
+ assertStatus ( status: . ok, state: . completed, response: createResponse ( code: 200 ) )
355
+
356
+ let breadcrumbs = Dynamic ( fixture. scope) . breadcrumbArray as [ Breadcrumb ] ?
357
+ let breadcrumb = breadcrumbs!. first
358
+ XCTAssertEqual ( breadcrumb!. data![ " graphql_operation_name " ] as? String , " someOperationName " )
359
+ }
360
+
361
+ func testBreadcrumb_GraphQLEnabledInvalidData( ) {
362
+ let body = """
363
+ [
364
+ { " message " : " arrays are valid json " }
365
+ ]
366
+ """
367
+ fixture. nsUrlRequest. httpBody = body. data ( using: . utf8)
368
+ fixture. nsUrlRequest. setValue ( " application/json " , forHTTPHeaderField: " content-type " )
369
+ assertStatus ( status: . ok, state: . completed, response: createResponse ( code: 200 ) )
370
+
371
+ let breadcrumbs = Dynamic ( fixture. scope) . breadcrumbArray as [ Breadcrumb ] ?
372
+ let breadcrumb = breadcrumbs!. first
373
+ XCTAssertNil ( breadcrumb!. data![ " graphql_operation_name " ] )
374
+ }
375
+
342
376
func testNoBreadcrumb_DisablingBreadcrumb( ) {
343
377
assertStatus ( status: . ok, state: . completed, response: createResponse ( code: 200 ) ) {
344
378
$0. disable ( )
@@ -868,13 +902,15 @@ class SentryNetworkTrackerTests: XCTestCase {
868
902
let requestType = span. data [ " type " ] as? String
869
903
let query = span. data [ " http.query " ] as? String
870
904
let fragment = span. data [ " http.fragment " ] as? String
905
+ let graphql = span. data [ " graphql_operation_name " ] as? String
871
906
872
907
XCTAssertEqual ( path, " https://www.domain.com/api " )
873
908
XCTAssertEqual ( method, task. currentRequest!. httpMethod)
874
909
XCTAssertEqual ( requestType, " fetch " )
875
910
XCTAssertEqual ( query, " query=value&query2=value2 " )
876
911
XCTAssertEqual ( fragment, " fragment " )
877
-
912
+ XCTAssertNil ( graphql)
913
+
878
914
XCTAssertEqual ( span. status, status)
879
915
XCTAssertNil ( task. observationInfo)
880
916
}
@@ -925,6 +961,11 @@ class SentryNetworkTrackerTests: XCTestCase {
925
961
func createDataTask( method: String = " GET " , modifyRequest: ( ( URLRequest ) -> ( URLRequest ) ) ? = nil ) -> URLSessionDataTaskMock {
926
962
var request = URLRequest ( url: SentryNetworkTrackerTests . fullUrl)
927
963
request. httpMethod = method
964
+ request. httpBody = fixture. nsUrlRequest. httpBody
965
+ fixture. nsUrlRequest. allHTTPHeaderFields? . forEach { key, value in
966
+ request. setValue ( value, forHTTPHeaderField: key)
967
+ }
968
+
928
969
if let modifyRequest = modifyRequest {
929
970
request = modifyRequest ( request)
930
971
}
0 commit comments