1
1
import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest' ;
2
2
import type { DsnComponents } from '../../build/types/types-hoist/dsn' ;
3
3
import type { DynamicSamplingContext } from '../../build/types/types-hoist/envelope' ;
4
- import type { Client } from '../../src' ;
4
+ import type { Client , SdkInfo } from '../../src' ;
5
5
import {
6
6
getCurrentScope ,
7
7
getIsolationScope ,
@@ -10,7 +10,7 @@ import {
10
10
setAsyncContextStrategy ,
11
11
setCurrentClient ,
12
12
} from '../../src' ;
13
- import { createEventEnvelope , createSpanEnvelope } from '../../src/envelope' ;
13
+ import { _enhanceEventWithSdkInfo , createEventEnvelope , createSpanEnvelope } from '../../src/envelope' ;
14
14
import type { Event } from '../../src/types-hoist/event' ;
15
15
import { getDefaultTestClientOptions , TestClient } from '../mocks/client' ;
16
16
@@ -261,3 +261,139 @@ describe('createSpanEnvelope', () => {
261
261
} ) ;
262
262
} ) ;
263
263
} ) ;
264
+
265
+ describe ( '_enhanceEventWithSdkInfo' , ( ) => {
266
+ it ( 'does nothing if no new sdk info is provided' , ( ) => {
267
+ const event : Event = {
268
+ sdk : { name : 'original' , version : '1.0.0' } ,
269
+ } ;
270
+ const enhancedEvent = _enhanceEventWithSdkInfo ( event , undefined ) ;
271
+ expect ( enhancedEvent . sdk ) . toEqual ( { name : 'original' , version : '1.0.0' } ) ;
272
+ } ) ;
273
+
274
+ /**
275
+ * Note LS: I'm not sure if this is intended behaviour, but this is how it was before
276
+ * I made implementation changes for the `settings` object. Documenting behaviour for now,
277
+ * we can revisit it if it turns out this is not intended.
278
+ */
279
+ it ( 'prefers original version and name over newSdkInfo' , ( ) => {
280
+ const event : Event = {
281
+ sdk : {
282
+ name : 'original' ,
283
+ version : '1.0.0' ,
284
+ integrations : [ 'integration1' , 'integration2' ] ,
285
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
286
+ } ,
287
+ } ;
288
+ const newSdkInfo : SdkInfo = { name : 'newName' , version : '2.0.0' } ;
289
+
290
+ const enhancedEvent = _enhanceEventWithSdkInfo ( event , newSdkInfo ) ;
291
+
292
+ expect ( enhancedEvent . sdk ) . toEqual ( {
293
+ name : 'original' ,
294
+ version : '1.0.0' ,
295
+ integrations : [ 'integration1' , 'integration2' ] ,
296
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
297
+ } ) ;
298
+ } ) ;
299
+
300
+ describe ( 'integrations and packages' , ( ) => {
301
+ it ( 'merges integrations and packages of original and newSdkInfo' , ( ) => {
302
+ const event : Event = {
303
+ sdk : {
304
+ name : 'original' ,
305
+ version : '1.0.0' ,
306
+ integrations : [ 'integration1' , 'integration2' ] ,
307
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
308
+ } ,
309
+ } ;
310
+
311
+ const newSdkInfo : SdkInfo = {
312
+ name : 'newName' ,
313
+ version : '2.0.0' ,
314
+ integrations : [ 'integration3' , 'integration4' ] ,
315
+ packages : [ { name : '@sentry/node' , version : '11.0.0' } ] ,
316
+ } ;
317
+
318
+ const enhancedEvent = _enhanceEventWithSdkInfo ( event , newSdkInfo ) ;
319
+
320
+ expect ( enhancedEvent . sdk ) . toEqual ( {
321
+ name : 'original' ,
322
+ version : '1.0.0' ,
323
+ integrations : [ 'integration1' , 'integration2' , 'integration3' , 'integration4' ] ,
324
+ packages : [
325
+ { name : '@sentry/browser' , version : '10.0.0' } ,
326
+ { name : '@sentry/node' , version : '11.0.0' } ,
327
+ ] ,
328
+ } ) ;
329
+ } ) ;
330
+
331
+ it ( 'creates empty integrations and packages arrays if no original or newSdkInfo are provided' , ( ) => {
332
+ const event : Event = {
333
+ sdk : {
334
+ name : 'original' ,
335
+ version : '1.0.0' ,
336
+ } ,
337
+ } ;
338
+
339
+ const newSdkInfo : SdkInfo = { } ;
340
+
341
+ const enhancedEvent = _enhanceEventWithSdkInfo ( event , newSdkInfo ) ;
342
+ expect ( enhancedEvent . sdk ) . toEqual ( {
343
+ name : 'original' ,
344
+ version : '1.0.0' ,
345
+ integrations : [ ] ,
346
+ packages : [ ] ,
347
+ } ) ;
348
+ } ) ;
349
+ } ) ;
350
+
351
+ describe ( 'settings' , ( ) => {
352
+ it ( 'prefers newSdkInfo settings over original settings' , ( ) => {
353
+ const event : Event = {
354
+ sdk : {
355
+ name : 'original' ,
356
+ version : '1.0.0' ,
357
+ integrations : [ 'integration1' , 'integration2' ] ,
358
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
359
+ settings : { infer_ip : 'auto' } ,
360
+ } ,
361
+ } ;
362
+ const newSdkInfo : SdkInfo = {
363
+ settings : { infer_ip : 'never' } ,
364
+ } ;
365
+
366
+ const enhancedEvent = _enhanceEventWithSdkInfo ( event , newSdkInfo ) ;
367
+
368
+ expect ( enhancedEvent . sdk ) . toEqual ( {
369
+ name : 'original' ,
370
+ version : '1.0.0' ,
371
+ integrations : [ 'integration1' , 'integration2' ] ,
372
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
373
+ settings : { infer_ip : 'never' } ,
374
+ } ) ;
375
+ } ) ;
376
+
377
+ it ( "doesn't create a `settings` object if no settings are provided" , ( ) => {
378
+ const event : Event = {
379
+ sdk : {
380
+ name : 'original' ,
381
+ version : '1.0.0' ,
382
+ } ,
383
+ } ;
384
+
385
+ const newSdkInfo : SdkInfo = {
386
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
387
+ } ;
388
+
389
+ const enhancedEvent = _enhanceEventWithSdkInfo ( event , newSdkInfo ) ;
390
+ expect ( enhancedEvent . sdk ) . toEqual ( {
391
+ name : 'original' ,
392
+ version : '1.0.0' ,
393
+ packages : [ { name : '@sentry/browser' , version : '10.0.0' } ] ,
394
+ integrations : [ ] ,
395
+ settings : undefined , // undefined is fine because JSON.stringify omits undefined values anyways
396
+ } ) ;
397
+ } ) ;
398
+ } ) ;
399
+ } ) ;
0 commit comments