1- import { FallbacksSanitizer } from '../fallbackSanitizer' ;
1+ import { isValidFlagName , isValidTreatment , sanitizeFallbacks } from '../fallbackSanitizer' ;
22import { TreatmentWithConfig } from '../../../../types/splitio' ;
33import { loggerMock } from '../../../logger/__tests__/sdkLogger.mock' ;
44
55describe ( 'FallbacksSanitizer' , ( ) => {
66 const validTreatment : TreatmentWithConfig = { treatment : 'on' , config : '{"color":"blue"}' } ;
77 const invalidTreatment : TreatmentWithConfig = { treatment : ' ' , config : null } ;
8+ const fallbackMock = {
9+ global : undefined ,
10+ byFlag : { }
11+ } ;
812
913 beforeEach ( ( ) => {
1014 jest . spyOn ( console , 'error' ) . mockImplementation ( ( ) => { } ) ;
@@ -17,49 +21,54 @@ describe('FallbacksSanitizer', () => {
1721 describe ( 'isValidFlagName' , ( ) => {
1822 test ( 'returns true for a valid flag name' , ( ) => {
1923 // @ts -expect-private-access
20- expect ( ( FallbacksSanitizer as any ) . isValidFlagName ( 'my_flag' ) ) . toBe ( true ) ;
24+ expect ( isValidFlagName ( 'my_flag' ) ) . toBe ( true ) ;
2125 } ) ;
2226
2327 test ( 'returns false for a name longer than 100 chars' , ( ) => {
2428 const longName = 'a' . repeat ( 101 ) ;
25- expect ( ( FallbacksSanitizer as any ) . isValidFlagName ( longName ) ) . toBe ( false ) ;
29+ expect ( isValidFlagName ( longName ) ) . toBe ( false ) ;
2630 } ) ;
2731
2832 test ( 'returns false if the name contains spaces' , ( ) => {
29- expect ( ( FallbacksSanitizer as any ) . isValidFlagName ( 'invalid flag' ) ) . toBe ( false ) ;
33+ expect ( isValidFlagName ( 'invalid flag' ) ) . toBe ( false ) ;
34+ } ) ;
35+
36+ test ( 'returns false if the name contains spaces' , ( ) => {
37+ // @ts -ignore
38+ expect ( isValidFlagName ( true ) ) . toBe ( false ) ;
3039 } ) ;
3140 } ) ;
3241
3342 describe ( 'isValidTreatment' , ( ) => {
3443 test ( 'returns true for a valid treatment string' , ( ) => {
35- expect ( ( FallbacksSanitizer as any ) . isValidTreatment ( validTreatment ) ) . toBe ( true ) ;
44+ expect ( isValidTreatment ( validTreatment ) ) . toBe ( true ) ;
3645 } ) ;
3746
3847 test ( 'returns false for null or undefined' , ( ) => {
39- expect ( ( FallbacksSanitizer as any ) . isValidTreatment ( null ) ) . toBe ( false ) ;
40- expect ( ( FallbacksSanitizer as any ) . isValidTreatment ( undefined ) ) . toBe ( false ) ;
48+ expect ( isValidTreatment ( ) ) . toBe ( false ) ;
49+ expect ( isValidTreatment ( undefined ) ) . toBe ( false ) ;
4150 } ) ;
4251
4352 test ( 'returns false for a treatment longer than 100 chars' , ( ) => {
44- const long = { treatment : 'a' . repeat ( 101 ) } ;
45- expect ( ( FallbacksSanitizer as any ) . isValidTreatment ( long ) ) . toBe ( false ) ;
53+ const long = { treatment : 'a' . repeat ( 101 ) , config : null } ;
54+ expect ( isValidTreatment ( long ) ) . toBe ( false ) ;
4655 } ) ;
4756
4857 test ( 'returns false if treatment does not match regex pattern' , ( ) => {
49- const invalid = { treatment : 'invalid treatment!' } ;
50- expect ( ( FallbacksSanitizer as any ) . isValidTreatment ( invalid ) ) . toBe ( false ) ;
58+ const invalid = { treatment : 'invalid treatment!' , config : null } ;
59+ expect ( isValidTreatment ( invalid ) ) . toBe ( false ) ;
5160 } ) ;
5261 } ) ;
5362
5463 describe ( 'sanitizeGlobal' , ( ) => {
5564 test ( 'returns the treatment if valid' , ( ) => {
56- expect ( FallbacksSanitizer . sanitizeGlobal ( loggerMock , validTreatment ) ) . toEqual ( validTreatment ) ;
65+ expect ( sanitizeFallbacks ( loggerMock , { ... fallbackMock , global : validTreatment } ) ) . toEqual ( { ... fallbackMock , global : validTreatment } ) ;
5766 expect ( loggerMock . error ) . not . toHaveBeenCalled ( ) ;
5867 } ) ;
5968
6069 test ( 'returns undefined and logs error if invalid' , ( ) => {
61- const result = FallbacksSanitizer . sanitizeGlobal ( loggerMock , invalidTreatment ) ;
62- expect ( result ) . toBeUndefined ( ) ;
70+ const result = sanitizeFallbacks ( loggerMock , { ... fallbackMock , global : invalidTreatment } ) ;
71+ expect ( result ) . toEqual ( fallbackMock ) ;
6372 expect ( loggerMock . error ) . toHaveBeenCalledWith (
6473 expect . stringContaining ( 'Fallback treatments - Discarded fallback' )
6574 ) ;
@@ -74,9 +83,9 @@ describe('FallbacksSanitizer', () => {
7483 bad_treatment : invalidTreatment ,
7584 } ;
7685
77- const result = FallbacksSanitizer . sanitizeByFlag ( loggerMock , input ) ;
86+ const result = sanitizeFallbacks ( loggerMock , { ... fallbackMock , byFlag : input } ) ;
7887
79- expect ( result ) . toEqual ( { valid_flag : validTreatment } ) ;
88+ expect ( result ) . toEqual ( { ... fallbackMock , byFlag : { valid_flag : validTreatment } } ) ;
8089 expect ( loggerMock . error ) . toHaveBeenCalledTimes ( 2 ) ; // invalid flag + bad_treatment
8190 } ) ;
8291
@@ -85,20 +94,45 @@ describe('FallbacksSanitizer', () => {
8594 'invalid flag' : invalidTreatment ,
8695 } ;
8796
88- const result = FallbacksSanitizer . sanitizeByFlag ( loggerMock , input ) ;
89- expect ( result ) . toEqual ( { } ) ;
97+ const result = sanitizeFallbacks ( loggerMock , { ... fallbackMock , byFlag : input } ) ;
98+ expect ( result ) . toEqual ( fallbackMock ) ;
9099 expect ( loggerMock . error ) . toHaveBeenCalled ( ) ;
91100 } ) ;
92101
93102 test ( 'returns same object if all valid' , ( ) => {
94103 const input = {
95- flag_one : validTreatment ,
96- flag_two : { treatment : 'valid_2' , config : null } ,
104+ ...fallbackMock ,
105+ byFlag :{
106+ flag_one : validTreatment ,
107+ flag_two : { treatment : 'valid_2' , config : null } ,
108+ }
97109 } ;
98110
99- const result = FallbacksSanitizer . sanitizeByFlag ( loggerMock , input ) ;
111+ const result = sanitizeFallbacks ( loggerMock , input ) ;
100112 expect ( result ) . toEqual ( input ) ;
101113 expect ( loggerMock . error ) . not . toHaveBeenCalled ( ) ;
102114 } ) ;
103115 } ) ;
116+ describe ( 'sanitizeFallbacks' , ( ) => {
117+ test ( 'returns undefined and logs error if fallbacks is not an object' , ( ) => {
118+ const result = sanitizeFallbacks ( loggerMock , 'invalid_fallbacks' ) ;
119+ expect ( result ) . toBeUndefined ( ) ;
120+ expect ( loggerMock . error ) . toHaveBeenCalledWith (
121+ 'Fallback treatments - Discarded configuration: it must be an object with optional `global` and `byFlag` properties'
122+ ) ;
123+ } ) ;
124+
125+ test ( 'returns undefined and logs error if fallbacks is not an object' , ( ) => {
126+ const result = sanitizeFallbacks ( loggerMock , true ) ;
127+ expect ( result ) . toBeUndefined ( ) ;
128+ expect ( loggerMock . error ) . toHaveBeenCalledWith (
129+ 'Fallback treatments - Discarded configuration: it must be an object with optional `global` and `byFlag` properties'
130+ ) ;
131+ } ) ;
132+
133+ test ( 'sanitizes both global and byFlag fallbacks for empty object' , ( ) => {
134+ const result = sanitizeFallbacks ( loggerMock , { global : { } } ) ;
135+ expect ( result ) . toEqual ( { global : undefined , byFlag : { } } ) ;
136+ } ) ;
137+ } ) ;
104138} ) ;
0 commit comments