@@ -73,6 +73,7 @@ class SentryApollo3InterceptorClientErrors {
7373 httpStatusCode : Int = 200,
7474 responseBody : String = responseBodyOk,
7575 sendDefaultPii : Boolean = false,
76+ includeCookies : Boolean = sendDefaultPii,
7677 socketPolicy : SocketPolicy = SocketPolicy .KEEP_OPEN ,
7778 configureOptions : SentryOptions .() -> Unit = {},
7879 ): ApolloClient {
@@ -98,8 +99,8 @@ class SentryApollo3InterceptorClientErrors {
9899 .setSocketPolicy(socketPolicy)
99100 .setResponseCode(httpStatusCode)
100101
101- if (sendDefaultPii ) {
102- response.addHeader(" Set-Cookie" , " Test " )
102+ if (includeCookies ) {
103+ response.addHeader(" Set-Cookie" , " theme=dark; Path=/ " )
103104 }
104105
105106 server.enqueue(response)
@@ -112,8 +113,8 @@ class SentryApollo3InterceptorClientErrors {
112113 captureFailedRequests = captureFailedRequests,
113114 failedRequestTargets = failedRequestTargets,
114115 )
115- if (sendDefaultPii ) {
116- builder.addHttpHeader(" Cookie" , " Test " )
116+ if (includeCookies ) {
117+ builder.addHttpHeader(" Cookie" , " theme=dark; sessionId=secret " )
117118 }
118119
119120 return builder.build()
@@ -362,6 +363,46 @@ class SentryApollo3InterceptorClientErrors {
362363 )
363364 }
364365
366+ @Test
367+ fun `data collection filters cookies` () {
368+ val sut =
369+ fixture.getSut(responseBody = fixture.responseBodyNotOk, includeCookies = true ) {
370+ dataCollection.cookies = KeyValueCollectionBehavior .denyList(" theme" )
371+ }
372+ executeQuery(sut)
373+
374+ verify(fixture.scopes)
375+ .captureEvent(
376+ check {
377+ assertEquals(" theme=[Filtered]; sessionId=[Filtered]" , it.request!! .cookies)
378+ assertEquals(" theme=[Filtered]; Path=/" , it.contexts.response!! .cookies)
379+ },
380+ any<Hint >(),
381+ )
382+ }
383+
384+ @Test
385+ fun `data collection can disable cookies` () {
386+ val sut =
387+ fixture.getSut(
388+ responseBody = fixture.responseBodyNotOk,
389+ sendDefaultPii = true ,
390+ includeCookies = true ,
391+ ) {
392+ dataCollection.cookies = KeyValueCollectionBehavior .off()
393+ }
394+ executeQuery(sut)
395+
396+ verify(fixture.scopes)
397+ .captureEvent(
398+ check {
399+ assertNull(it.request!! .cookies)
400+ assertNull(it.contexts.response!! .cookies)
401+ },
402+ any<Hint >(),
403+ )
404+ }
405+
365406 @Test
366407 fun `data collection can disable request headers` () {
367408 val sut =
@@ -387,7 +428,7 @@ class SentryApollo3InterceptorClientErrors {
387428 check {
388429 val request = it.request!!
389430
390- assertEquals(" Test " , request.cookies)
431+ assertEquals(" theme=dark; sessionId=secret " , request.cookies)
391432 assertNotNull(request.headers)
392433 assertEquals(" LaunchDetails" , request.headers?.get(" X-APOLLO-OPERATION-NAME" ))
393434 },
@@ -477,7 +518,7 @@ class SentryApollo3InterceptorClientErrors {
477518 check {
478519 val response = it.contexts.response!!
479520
480- assertEquals(" Test " , response.cookies)
521+ assertEquals(" theme=dark; Path=/ " , response.cookies)
481522 assertNotNull(response.headers)
482523 assertEquals(200 , response.headers?.get(" Content-Length" )?.toInt())
483524 },
0 commit comments