11import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest' ;
22import type { DsnComponents } from '../../build/types/types-hoist/dsn' ;
33import type { DynamicSamplingContext } from '../../build/types/types-hoist/envelope' ;
4- import type { Client } from '../../src' ;
4+ import type { Client , SdkInfo } from '../../src' ;
55import {
66 getCurrentScope ,
77 getIsolationScope ,
@@ -10,7 +10,7 @@ import {
1010 setAsyncContextStrategy ,
1111 setCurrentClient ,
1212} from '../../src' ;
13- import { createEventEnvelope , createSpanEnvelope } from '../../src/envelope' ;
13+ import { _enhanceEventWithSdkInfo , createEventEnvelope , createSpanEnvelope } from '../../src/envelope' ;
1414import type { Event } from '../../src/types-hoist/event' ;
1515import { getDefaultTestClientOptions , TestClient } from '../mocks/client' ;
1616
@@ -261,3 +261,139 @@ describe('createSpanEnvelope', () => {
261261 } ) ;
262262 } ) ;
263263} ) ;
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