@@ -152,46 +152,64 @@ describe('getPluginOptions', () => {
152152 ) ;
153153 } ) ;
154154
155- it ( 'sets filesToDeleteAfterUpload correctly based on fallback options' , ( ) => {
156- // Scenario 1: Both client and server fallback are true
157- const optionsBothTrue = getPluginOptions ( { } , { client : true , server : true } ) ;
158- expect ( optionsBothTrue ?. sourcemaps ?. filesToDeleteAfterUpload ) . toEqual ( [
159- '.*/**/public/**/*.map' ,
160- '.*/**/server/**/*.map' ,
161- '.*/**/output/**/*.map' ,
162- '.*/**/function/**/*.map' ,
163- ] ) ;
164-
165- // Scenario 2: Only client fallback is true
166- const optionsClientTrue = getPluginOptions ( { } , { client : true , server : false } ) ;
167- expect ( optionsClientTrue ?. sourcemaps ?. filesToDeleteAfterUpload ) . toEqual ( [ '.*/**/public/**/*.map' ] ) ;
168-
169- // Scenario 3: Only server fallback is true
170- const optionsServerTrue = getPluginOptions ( { } , { client : false , server : true } ) ;
171- expect ( optionsServerTrue ?. sourcemaps ?. filesToDeleteAfterUpload ) . toEqual ( [
172- '.*/**/server/**/*.map' ,
173- '.*/**/output/**/*.map' ,
174- '.*/**/function/**/*.map' ,
175- ] ) ;
176-
177- // Scenario 4: No fallback, but custom filesToDeleteAfterUpload is provided
178- const customDeleteFiles = [ 'custom/path/**/*.map' ] ;
179- const optionsWithCustomDelete = getPluginOptions (
180- {
155+ it . each ( [
156+ {
157+ name : 'both client and server fallback are true' ,
158+ clientFallback : true ,
159+ serverFallback : true ,
160+ customOptions : { } ,
161+ expectedFilesToDelete : [
162+ '.*/**/public/**/*.map' ,
163+ '.*/**/server/**/*.map' ,
164+ '.*/**/output/**/*.map' ,
165+ '.*/**/function/**/*.map' ,
166+ ] ,
167+ } ,
168+ {
169+ name : 'only client fallback is true' ,
170+ clientFallback : true ,
171+ serverFallback : false ,
172+ customOptions : { } ,
173+ expectedFilesToDelete : [ '.*/**/public/**/*.map' ] ,
174+ } ,
175+ {
176+ name : 'only server fallback is true' ,
177+ clientFallback : false ,
178+ serverFallback : true ,
179+ customOptions : { } ,
180+ expectedFilesToDelete : [ '.*/**/server/**/*.map' , '.*/**/output/**/*.map' , '.*/**/function/**/*.map' ] ,
181+ } ,
182+ {
183+ name : 'no fallback, but custom filesToDeleteAfterUpload is provided' ,
184+ clientFallback : false ,
185+ serverFallback : false ,
186+ customOptions : {
181187 sourceMapsUploadOptions : {
182188 sourcemaps : {
183- filesToDeleteAfterUpload : customDeleteFiles ,
189+ filesToDeleteAfterUpload : [ 'custom/path/**/*.map' ] ,
184190 } ,
185191 } ,
186192 } ,
187- { client : false , server : false } ,
188- ) ;
189- expect ( optionsWithCustomDelete ?. sourcemaps ?. filesToDeleteAfterUpload ) . toEqual ( customDeleteFiles ) ;
193+ expectedFilesToDelete : [ 'custom/path/**/*.map' ] ,
194+ } ,
195+ {
196+ name : 'no fallback, both source maps explicitly false and no custom filesToDeleteAfterUpload' ,
197+ clientFallback : false ,
198+ serverFallback : false ,
199+ customOptions : { } ,
200+ expectedFilesToDelete : undefined ,
201+ } ,
202+ ] ) (
203+ 'sets filesToDeleteAfterUpload correctly when $name' ,
204+ ( { clientFallback, serverFallback, customOptions, expectedFilesToDelete } ) => {
205+ const options = getPluginOptions ( customOptions as SentryNuxtModuleOptions , {
206+ client : clientFallback ,
207+ server : serverFallback ,
208+ } ) ;
190209
191- // Scenario 5: No fallback, both source maps explicitly false and no custom filesToDeleteAfterUpload
192- const optionsNoDelete = getPluginOptions ( { } , { client : false , server : false } ) ;
193- expect ( optionsNoDelete ?. sourcemaps ?. filesToDeleteAfterUpload ) . toBeUndefined ( ) ;
194- } ) ;
210+ expect ( options ?. sourcemaps ?. filesToDeleteAfterUpload ) . toEqual ( expectedFilesToDelete ) ;
211+ } ,
212+ ) ;
195213} ) ;
196214
197215describe ( 'validate sourcemap settings' , ( ) => {
@@ -266,62 +284,61 @@ describe('change Nuxt source map settings', () => {
266284 let nuxt : { options : { sourcemap : { client : boolean | 'hidden' ; server : boolean | 'hidden' } } } ;
267285 let sentryModuleOptions : SentryNuxtModuleOptions ;
268286
287+ const consoleLogSpy = vi . spyOn ( console , 'log' ) . mockImplementation ( ( ) => { } ) ;
288+
269289 beforeEach ( ( ) => {
290+ consoleLogSpy . mockClear ( ) ;
291+
270292 // @ts -expect-error - Nuxt types don't accept `undefined` but we want to test this case
271293 nuxt = { options : { sourcemap : { client : undefined } } } ;
272294 sentryModuleOptions = { } ;
273295 } ) ;
274296
275- it ( 'should handle nuxt.options.sourcemap.client settings' , ( ) => {
276- const cases = [
277- { clientSourcemap : false , expectedSourcemap : false , expectedReturn : 'disabled' } ,
278- { clientSourcemap : 'hidden' , expectedSourcemap : 'hidden' , expectedReturn : 'enabled' } ,
279- { clientSourcemap : true , expectedSourcemap : true , expectedReturn : 'enabled' } ,
280- { clientSourcemap : undefined , expectedSourcemap : 'hidden' , expectedReturn : 'unset' } ,
281- ] ;
282-
283- cases . forEach ( ( { clientSourcemap, expectedSourcemap, expectedReturn } ) => {
297+ it . each ( [
298+ { clientSourcemap : false , expectedSourcemap : false , expectedReturn : 'disabled' } ,
299+ { clientSourcemap : 'hidden' , expectedSourcemap : 'hidden' , expectedReturn : 'enabled' } ,
300+ { clientSourcemap : true , expectedSourcemap : true , expectedReturn : 'enabled' } ,
301+ { clientSourcemap : undefined , expectedSourcemap : 'hidden' , expectedReturn : 'unset' } ,
302+ ] ) (
303+ 'should handle client sourcemap setting: $clientSourcemap' ,
304+ ( { clientSourcemap, expectedSourcemap, expectedReturn } ) => {
284305 // @ts -expect-error - Nuxt types don't accept `undefined` but we want to test this case
285306 nuxt . options . sourcemap . client = clientSourcemap ;
286307 const previousUserSourcemapSetting = changeNuxtSourceMapSettings ( nuxt as Nuxt , sentryModuleOptions ) ;
287308 expect ( nuxt . options . sourcemap . client ) . toBe ( expectedSourcemap ) ;
288309 expect ( previousUserSourcemapSetting . client ) . toBe ( expectedReturn ) ;
289- } ) ;
290- } ) ;
291-
292- it ( 'should handle nuxt.options.sourcemap.server settings' , ( ) => {
293- const cases = [
294- { serverSourcemap : false , expectedSourcemap : false , expectedReturn : 'disabled' } ,
295- { serverSourcemap : 'hidden' , expectedSourcemap : 'hidden' , expectedReturn : 'enabled' } ,
296- { serverSourcemap : true , expectedSourcemap : true , expectedReturn : 'enabled' } ,
297- { serverSourcemap : undefined , expectedSourcemap : 'hidden' , expectedReturn : 'unset' } ,
298- ] ;
299-
300- cases . forEach ( ( { serverSourcemap, expectedSourcemap, expectedReturn } ) => {
310+ } ,
311+ ) ;
312+
313+ it . each ( [
314+ { serverSourcemap : false , expectedSourcemap : false , expectedReturn : 'disabled' } ,
315+ { serverSourcemap : 'hidden' , expectedSourcemap : 'hidden' , expectedReturn : 'enabled' } ,
316+ { serverSourcemap : true , expectedSourcemap : true , expectedReturn : 'enabled' } ,
317+ { serverSourcemap : undefined , expectedSourcemap : 'hidden' , expectedReturn : 'unset' } ,
318+ ] ) (
319+ 'should handle server sourcemap setting: $serverSourcemap' ,
320+ ( { serverSourcemap, expectedSourcemap, expectedReturn } ) => {
301321 // @ts -expect-error server available
302322 nuxt . options . sourcemap . server = serverSourcemap ;
303323 const previousUserSourcemapSetting = changeNuxtSourceMapSettings ( nuxt as Nuxt , sentryModuleOptions ) ;
304324 expect ( nuxt . options . sourcemap . server ) . toBe ( expectedSourcemap ) ;
305325 expect ( previousUserSourcemapSetting . server ) . toBe ( expectedReturn ) ;
306- } ) ;
307- } ) ;
326+ } ,
327+ ) ;
308328
309329 describe ( 'should handle nuxt.options.sourcemap as a boolean' , ( ) => {
310- it ( 'keeps setting of nuxt.options.sourcemap if it is set' , ( ) => {
311- const cases = [
312- { sourcemap : false , expectedSourcemap : false , expectedReturn : 'disabled' } ,
313- { sourcemap : true , expectedSourcemap : true , expectedReturn : 'enabled' } ,
314- { sourcemap : 'hidden' , expectedSourcemap : 'hidden' , expectedReturn : 'enabled' } ,
315- ] ;
316-
317- cases . forEach ( ( { sourcemap, expectedSourcemap, expectedReturn } ) => {
318- // @ts -expect-error string type is possible in Nuxt (but type says differently)
319- nuxt . options . sourcemap = sourcemap ;
320- const previousUserSourcemapSetting = changeNuxtSourceMapSettings ( nuxt as Nuxt , sentryModuleOptions ) ;
321- expect ( nuxt . options . sourcemap ) . toBe ( expectedSourcemap ) ;
322- expect ( previousUserSourcemapSetting . client ) . toBe ( expectedReturn ) ;
323- expect ( previousUserSourcemapSetting . server ) . toBe ( expectedReturn ) ;
324- } ) ;
330+ it . each ( [
331+ { sourcemap : false , expectedSourcemap : false , expectedReturn : 'disabled' } ,
332+ { sourcemap : true , expectedSourcemap : true , expectedReturn : 'enabled' } ,
333+ { sourcemap : 'hidden' , expectedSourcemap : 'hidden' , expectedReturn : 'enabled' } ,
334+ ] ) ( 'keeps nuxt.options.sourcemap setting: $sourcemap' , ( { sourcemap, expectedSourcemap, expectedReturn } ) => {
335+ // @ts -expect-error string type is possible in Nuxt (but type says differently)
336+ nuxt . options . sourcemap = sourcemap ;
337+ const previousUserSourcemapSetting = changeNuxtSourceMapSettings ( nuxt as Nuxt , { debug : true } ) ;
338+
339+ expect ( nuxt . options . sourcemap ) . toBe ( expectedSourcemap ) ;
340+ expect ( previousUserSourcemapSetting . client ) . toBe ( expectedReturn ) ;
341+ expect ( previousUserSourcemapSetting . server ) . toBe ( expectedReturn ) ;
325342 } ) ;
326343
327344 it ( "sets client and server to 'hidden' if nuxt.options.sourcemap not set" , ( ) => {
@@ -333,5 +350,43 @@ describe('change Nuxt source map settings', () => {
333350 expect ( previousUserSourcemapSetting . client ) . toBe ( 'unset' ) ;
334351 expect ( previousUserSourcemapSetting . server ) . toBe ( 'unset' ) ;
335352 } ) ;
353+
354+ it ( 'should log a message when source maps are enabled and debug is true' , ( ) => {
355+ const settingKey = 'sourcemap.client' ;
356+ const settingValue = 'hidden' ;
357+
358+ nuxt . options . sourcemap . client = settingValue ;
359+
360+ changeNuxtSourceMapSettings ( nuxt as Nuxt , { debug : true } ) ;
361+
362+ expect ( consoleLogSpy ) . toHaveBeenCalledWith (
363+ `[Sentry] \`${ settingKey } \` is enabled with \`${ settingValue } \`. This will correctly un-minify the code snippet on the Sentry Issue Details page.` ,
364+ ) ;
365+ } ) ;
366+
367+ it ( 'should log a message when debug is false and one of the source maps are unset' , ( ) => {
368+ nuxt . options . sourcemap . server = true ;
369+
370+ const { client, server } = changeNuxtSourceMapSettings ( nuxt as Nuxt , { debug : false } ) ;
371+
372+ expect ( client ) . toBe ( 'unset' ) ;
373+ expect ( server ) . toBe ( 'enabled' ) ;
374+
375+ expect ( consoleLogSpy ) . toHaveBeenCalledWith (
376+ '[Sentry] Enabled source map generation in the build options with `sourcemap.client: hidden`.' ,
377+ ) ;
378+ } ) ;
379+
380+ it ( 'should not log a message when debug is false and client/server source maps are defined' , ( ) => {
381+ nuxt . options . sourcemap . client = false ;
382+ nuxt . options . sourcemap . server = true ;
383+
384+ const { client, server } = changeNuxtSourceMapSettings ( nuxt as Nuxt , { debug : false } ) ;
385+
386+ expect ( client ) . toBe ( 'disabled' ) ;
387+ expect ( server ) . toBe ( 'enabled' ) ;
388+
389+ expect ( consoleLogSpy ) . not . toHaveBeenCalled ( ) ;
390+ } ) ;
336391 } ) ;
337392} ) ;
0 commit comments