@@ -6449,6 +6449,72 @@ describe('lib/senders/emails:', () => {
64496449 } ) ;
64506450 } ) ;
64516451
6452+ describe ( 'constructLocalDateString - locale isolation' , ( ) => {
6453+ it ( 'does not leak locale between concurrent calls' , async ( ) => {
6454+ const date = new Date ( '2025-03-13T12:00:00Z' ) ;
6455+
6456+ // Simulate concurrent calls with different locales
6457+ const [ enResult , gbResult ] = await Promise . all ( [
6458+ Promise . resolve (
6459+ mailer . _constructLocalDateString ( undefined , 'en' , date )
6460+ ) ,
6461+ Promise . resolve (
6462+ mailer . _constructLocalDateString ( undefined , 'en-GB' , date )
6463+ ) ,
6464+ ] ) ;
6465+
6466+ // en formats as MM/DD/YYYY, en-GB formats as DD/MM/YYYY
6467+ assert . equal ( enResult , '03/13/2025' ) ;
6468+ assert . equal ( gbResult , '13/03/2025' ) ;
6469+ } ) ;
6470+
6471+ it ( 'does not leak locale into subsequent calls' , ( ) => {
6472+ const date = new Date ( '2025-03-13T12:00:00Z' ) ;
6473+
6474+ // Call with en-GB first
6475+ mailer . _constructLocalDateString ( undefined , 'en-GB' , date ) ;
6476+ // Then call with en
6477+ const enResult = mailer . _constructLocalDateString ( undefined , 'en' , date ) ;
6478+
6479+ assert . equal ( enResult , '03/13/2025' ) ;
6480+ } ) ;
6481+ } ) ;
6482+
6483+ describe ( 'constructLocalTimeString - locale isolation' , ( ) => {
6484+ it ( 'does not leak locale between concurrent calls' , async ( ) => {
6485+ const [ enResult , esResult ] = await Promise . all ( [
6486+ Promise . resolve (
6487+ mailer . _constructLocalTimeString ( 'America/Los_Angeles' , 'en' )
6488+ ) ,
6489+ Promise . resolve (
6490+ mailer . _constructLocalTimeString ( 'America/Los_Angeles' , 'es' )
6491+ ) ,
6492+ ] ) ;
6493+
6494+ // en day names vs es day names
6495+ const enDays = [
6496+ 'Monday' ,
6497+ 'Tuesday' ,
6498+ 'Wednesday' ,
6499+ 'Thursday' ,
6500+ 'Friday' ,
6501+ 'Saturday' ,
6502+ 'Sunday' ,
6503+ ] ;
6504+ const esDays = [
6505+ 'lunes' ,
6506+ 'martes' ,
6507+ 'miércoles' ,
6508+ 'jueves' ,
6509+ 'viernes' ,
6510+ 'sábado' ,
6511+ 'domingo' ,
6512+ ] ;
6513+ assert . include ( enDays , enResult [ 1 ] . split ( ',' ) [ 0 ] ) ;
6514+ assert . include ( esDays , esResult [ 1 ] . split ( ',' ) [ 0 ] ) ;
6515+ } ) ;
6516+ } ) ;
6517+
64526518 describe ( 'constructLocalTimeString - returns date/time' , ( ) => {
64536519 // Moment expects a single locale identifier. This tests to ensure
64546520 // we account for this in _constructLocalTimeString
0 commit comments