1
- import { Event , TransactionSamplingMethod } from '@sentry/types' ;
1
+ import { DebugMeta , Event , SentryRequest , TransactionSamplingMethod } from '@sentry/types' ;
2
2
3
3
import { API } from '../../src/api' ;
4
4
import { eventToSentryRequest } from '../../src/request' ;
5
5
6
6
describe ( 'eventToSentryRequest' , ( ) => {
7
- let api : API ;
7
+ function parseEnvelopeRequest ( request : SentryRequest ) : any {
8
+ const [ envelopeHeaderString , itemHeaderString , eventString ] = request . body . split ( '\n' ) ;
9
+
10
+ return {
11
+ envelopeHeader : JSON . parse ( envelopeHeaderString ) ,
12
+ itemHeader : JSON . parse ( itemHeaderString ) ,
13
+ event : JSON . parse ( eventString ) ,
14
+ } ;
15
+ }
16
+
17
+ const api = new API ( 'https://[email protected] /12312012' , {
18
+ sdk : {
19
+ integrations : [ 'AWSLambda' ] ,
20
+ name : 'sentry.javascript.browser' ,
21
+ version : `12.31.12` ,
22
+ packages : [ { name : 'npm:@sentry/browser' , version : `12.31.12` } ] ,
23
+ } ,
24
+ } ) ;
8
25
let event : Event ;
9
26
10
27
beforeEach ( ( ) => {
11
- api = new API ( 'https://[email protected] /12312012' , {
12
- sdk : {
13
- integrations : [ 'AWSLambda' ] ,
14
- name : 'sentry.javascript.browser' ,
15
- version : `12.31.12` ,
16
- packages : [ { name : 'npm:@sentry/browser' , version : `6.6.6` } ] ,
17
- } ,
18
- } ) ;
19
28
event = {
20
29
contexts : { trace : { trace_id : '1231201211212012' , span_id : '12261980' , op : 'pageload' } } ,
21
30
environment : 'dogpark' ,
@@ -28,68 +37,63 @@ describe('eventToSentryRequest', () => {
28
37
} ;
29
38
} ) ;
30
39
31
- [
32
- { method : TransactionSamplingMethod . Rate , rate : '0.1121' , dog : 'Charlie' } ,
33
- { method : TransactionSamplingMethod . Sampler , rate : '0.1231' , dog : 'Maisey' } ,
34
- { method : TransactionSamplingMethod . Inheritance , dog : 'Cory' } ,
35
- { method : TransactionSamplingMethod . Explicit , dog : 'Bodhi' } ,
36
-
37
- // this shouldn't ever happen (at least the method should always be included in tags), but good to know that things
38
- // won't blow up if it does
39
- { dog : 'Lucy' } ,
40
- ] . forEach ( ( { method, rate, dog } ) => {
41
- it ( `adds transaction sampling information to item header - ${ method } , ${ rate } , ${ dog } ` , ( ) => {
42
- // TODO kmclb - once tag types are loosened, don't need to cast to string here
43
- event . tags = { __sentry_samplingMethod : String ( method ) , __sentry_sampleRate : String ( rate ) , dog } ;
44
-
45
- const result = eventToSentryRequest ( event , api ) ;
46
-
47
- const [ envelopeHeaderString , itemHeaderString , eventString ] = result . body . split ( '\n' ) ;
48
-
49
- const envelope = {
50
- envelopeHeader : JSON . parse ( envelopeHeaderString ) ,
51
- itemHeader : JSON . parse ( itemHeaderString ) ,
52
- event : JSON . parse ( eventString ) ,
53
- } ;
54
-
55
- // the right stuff is added to the item header
56
- expect ( envelope . itemHeader ) . toEqual ( {
57
- type : 'transaction' ,
58
- // TODO kmclb - once tag types are loosened, don't need to cast to string here
59
- sample_rates : [ { id : String ( method ) , rate : String ( rate ) } ] ,
60
- } ) ;
61
-
62
- // show that it pops the right tags and leaves the rest alone
63
- expect ( '__sentry_samplingMethod' in envelope . event . tags ) . toBe ( false ) ;
64
- expect ( '__sentry_sampleRate' in envelope . event . tags ) . toBe ( false ) ;
65
- expect ( 'dog' in envelope . event . tags ) . toBe ( true ) ;
66
- } ) ;
40
+ it ( `adds transaction sampling information to item header` , ( ) => {
41
+ event . debug_meta = { transactionSampling : { method : TransactionSamplingMethod . Rate , rate : 0.1121 } } ;
42
+
43
+ const result = eventToSentryRequest ( event , api ) ;
44
+ const envelope = parseEnvelopeRequest ( result ) ;
45
+
46
+ expect ( envelope . itemHeader ) . toEqual (
47
+ expect . objectContaining ( {
48
+ sample_rates : [ { id : TransactionSamplingMethod . Rate , rate : 0.1121 } ] ,
49
+ } ) ,
50
+ ) ;
67
51
} ) ;
68
52
69
- it ( 'adds sdk info to envelope header' , ( ) => {
53
+ it ( 'removes transaction sampling information (and only that) from debug_meta' , ( ) => {
54
+ event . debug_meta = {
55
+ transactionSampling : { method : TransactionSamplingMethod . Sampler , rate : 0.1121 } ,
56
+ dog : 'Charlie' ,
57
+ } as DebugMeta ;
58
+
70
59
const result = eventToSentryRequest ( event , api ) ;
60
+ const envelope = parseEnvelopeRequest ( result ) ;
71
61
72
- const envelopeHeaderString = result . body . split ( '\n' ) [ 0 ] ;
73
- const parsedHeader = JSON . parse ( envelopeHeaderString ) ;
62
+ expect ( 'transactionSampling' in envelope . event . debug_meta ) . toBe ( false ) ;
63
+ expect ( 'dog' in envelope . event . debug_meta ) . toBe ( true ) ;
64
+ } ) ;
74
65
75
- expect ( parsedHeader ) . toEqual (
66
+ it ( 'removes debug_meta entirely if it ends up empty' , ( ) => {
67
+ event . debug_meta = {
68
+ transactionSampling : { method : TransactionSamplingMethod . Rate , rate : 0.1121 } ,
69
+ } as DebugMeta ;
70
+
71
+ const result = eventToSentryRequest ( event , api ) ;
72
+ const envelope = parseEnvelopeRequest ( result ) ;
73
+
74
+ expect ( 'debug_meta' in envelope . event ) . toBe ( false ) ;
75
+ } ) ;
76
+
77
+ it ( 'adds sdk info to envelope header' , ( ) => {
78
+ const result = eventToSentryRequest ( event , api ) ;
79
+ const envelope = parseEnvelopeRequest ( result ) ;
80
+
81
+ expect ( envelope . envelopeHeader ) . toEqual (
76
82
expect . objectContaining ( { sdk : { name : 'sentry.javascript.browser' , version : '12.31.12' } } ) ,
77
83
) ;
78
84
} ) ;
79
85
80
86
it ( 'adds sdk info to event body' , ( ) => {
81
87
const result = eventToSentryRequest ( event , api ) ;
88
+ const envelope = parseEnvelopeRequest ( result ) ;
82
89
83
- const eventString = result . body . split ( '\n' ) [ 2 ] ;
84
- const parsedEvent = JSON . parse ( eventString ) ;
85
-
86
- expect ( parsedEvent ) . toEqual (
90
+ expect ( envelope . event ) . toEqual (
87
91
expect . objectContaining ( {
88
92
sdk : {
89
93
integrations : [ 'AWSLambda' ] ,
90
94
name : 'sentry.javascript.browser' ,
91
95
version : `12.31.12` ,
92
- packages : [ { name : 'npm:@sentry/browser' , version : `6.6.6 ` } ] ,
96
+ packages : [ { name : 'npm:@sentry/browser' , version : `12.31.12 ` } ] ,
93
97
} ,
94
98
} ) ,
95
99
) ;
@@ -99,22 +103,21 @@ describe('eventToSentryRequest', () => {
99
103
event . sdk = {
100
104
integrations : [ 'Clojure' ] ,
101
105
name : 'foo' ,
102
- packages : [ { name : 'npm:@sentry/clj' , version : `6.6.6 ` } ] ,
106
+ packages : [ { name : 'npm:@sentry/clj' , version : `12.31.12 ` } ] ,
103
107
version : '1337' ,
104
108
} ;
105
- const result = eventToSentryRequest ( event , api ) ;
106
109
107
- const eventString = result . body . split ( '\n' ) [ 2 ] ;
108
- const parsedEvent = JSON . parse ( eventString ) ;
110
+ const result = eventToSentryRequest ( event , api ) ;
111
+ const envelope = parseEnvelopeRequest ( result ) ;
109
112
110
- expect ( parsedEvent ) . toEqual (
113
+ expect ( envelope . event ) . toEqual (
111
114
expect . objectContaining ( {
112
115
sdk : {
113
116
integrations : [ 'Clojure' , 'AWSLambda' ] ,
114
117
name : 'foo' ,
115
118
packages : [
116
- { name : 'npm:@sentry/clj' , version : `6.6.6 ` } ,
117
- { name : 'npm:@sentry/browser' , version : `6.6.6 ` } ,
119
+ { name : 'npm:@sentry/clj' , version : `12.31.12 ` } ,
120
+ { name : 'npm:@sentry/browser' , version : `12.31.12 ` } ,
118
121
] ,
119
122
version : '1337' ,
120
123
} ,
0 commit comments