1- import { Event , TransactionSamplingMethod } from '@sentry/types' ;
1+ import { DebugMeta , Event , SentryRequest , TransactionSamplingMethod } from '@sentry/types' ;
22
33import { API } from '../../src/api' ;
44import { eventToSentryRequest } from '../../src/request' ;
55
66describe ( '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+ } ) ;
825 let event : Event ;
926
1027 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- } ) ;
1928 event = {
2029 contexts : { trace : { trace_id : '1231201211212012' , span_id : '12261980' , op : 'pageload' } } ,
2130 environment : 'dogpark' ,
@@ -28,68 +37,63 @@ describe('eventToSentryRequest', () => {
2837 } ;
2938 } ) ;
3039
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+ ) ;
6751 } ) ;
6852
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+
7059 const result = eventToSentryRequest ( event , api ) ;
60+ const envelope = parseEnvelopeRequest ( result ) ;
7161
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+ } ) ;
7465
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 (
7682 expect . objectContaining ( { sdk : { name : 'sentry.javascript.browser' , version : '12.31.12' } } ) ,
7783 ) ;
7884 } ) ;
7985
8086 it ( 'adds sdk info to event body' , ( ) => {
8187 const result = eventToSentryRequest ( event , api ) ;
88+ const envelope = parseEnvelopeRequest ( result ) ;
8289
83- const eventString = result . body . split ( '\n' ) [ 2 ] ;
84- const parsedEvent = JSON . parse ( eventString ) ;
85-
86- expect ( parsedEvent ) . toEqual (
90+ expect ( envelope . event ) . toEqual (
8791 expect . objectContaining ( {
8892 sdk : {
8993 integrations : [ 'AWSLambda' ] ,
9094 name : 'sentry.javascript.browser' ,
9195 version : `12.31.12` ,
92- packages : [ { name : 'npm:@sentry/browser' , version : `6.6.6 ` } ] ,
96+ packages : [ { name : 'npm:@sentry/browser' , version : `12.31.12 ` } ] ,
9397 } ,
9498 } ) ,
9599 ) ;
@@ -99,22 +103,21 @@ describe('eventToSentryRequest', () => {
99103 event . sdk = {
100104 integrations : [ 'Clojure' ] ,
101105 name : 'foo' ,
102- packages : [ { name : 'npm:@sentry/clj' , version : `6.6.6 ` } ] ,
106+ packages : [ { name : 'npm:@sentry/clj' , version : `12.31.12 ` } ] ,
103107 version : '1337' ,
104108 } ;
105- const result = eventToSentryRequest ( event , api ) ;
106109
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 ) ;
109112
110- expect ( parsedEvent ) . toEqual (
113+ expect ( envelope . event ) . toEqual (
111114 expect . objectContaining ( {
112115 sdk : {
113116 integrations : [ 'Clojure' , 'AWSLambda' ] ,
114117 name : 'foo' ,
115118 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 ` } ,
118121 ] ,
119122 version : '1337' ,
120123 } ,
0 commit comments