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 ( ( ) => {
10- jest . spyOn ( console , 'error' ) . mockImplementation ( ( ) => { } ) ;
11- } ) ;
12-
13- afterEach ( ( ) => {
14- ( loggerMock . error as jest . Mock ) . mockRestore ( ) ;
14+ loggerMock . mockClear ( ) ;
1515 } ) ;
1616
1717 describe ( 'isValidFlagName' , ( ) => {
1818 test ( 'returns true for a valid flag name' , ( ) => {
1919 // @ts -expect-private-access
20- expect ( ( FallbacksSanitizer as any ) . isValidFlagName ( 'my_flag' ) ) . toBe ( true ) ;
20+ expect ( isValidFlagName ( 'my_flag' ) ) . toBe ( true ) ;
2121 } ) ;
2222
2323 test ( 'returns false for a name longer than 100 chars' , ( ) => {
2424 const longName = 'a' . repeat ( 101 ) ;
25- expect ( ( FallbacksSanitizer as any ) . isValidFlagName ( longName ) ) . toBe ( false ) ;
25+ expect ( isValidFlagName ( longName ) ) . toBe ( false ) ;
26+ } ) ;
27+
28+ test ( 'returns false if the name contains spaces' , ( ) => {
29+ expect ( isValidFlagName ( 'invalid flag' ) ) . toBe ( false ) ;
2630 } ) ;
2731
2832 test ( 'returns false if the name contains spaces' , ( ) => {
29- expect ( ( FallbacksSanitizer as any ) . isValidFlagName ( 'invalid flag' ) ) . toBe ( false ) ;
33+ // @ts -ignore
34+ expect ( isValidFlagName ( true ) ) . toBe ( false ) ;
3035 } ) ;
3136 } ) ;
3237
3338 describe ( 'isValidTreatment' , ( ) => {
3439 test ( 'returns true for a valid treatment string' , ( ) => {
35- expect ( ( FallbacksSanitizer as any ) . isValidTreatment ( validTreatment ) ) . toBe ( true ) ;
40+ expect ( isValidTreatment ( validTreatment ) ) . toBe ( true ) ;
3641 } ) ;
3742
3843 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 ) ;
44+ expect ( isValidTreatment ( ) ) . toBe ( false ) ;
45+ expect ( isValidTreatment ( undefined ) ) . toBe ( false ) ;
4146 } ) ;
4247
4348 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 ) ;
49+ const long = { treatment : 'a' . repeat ( 101 ) , config : null } ;
50+ expect ( isValidTreatment ( long ) ) . toBe ( false ) ;
4651 } ) ;
4752
4853 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 ) ;
54+ const invalid = { treatment : 'invalid treatment!' , config : null } ;
55+ expect ( isValidTreatment ( invalid ) ) . toBe ( false ) ;
5156 } ) ;
5257 } ) ;
5358
5459 describe ( 'sanitizeGlobal' , ( ) => {
5560 test ( 'returns the treatment if valid' , ( ) => {
56- expect ( FallbacksSanitizer . sanitizeGlobal ( loggerMock , validTreatment ) ) . toEqual ( validTreatment ) ;
61+ expect ( sanitizeFallbacks ( loggerMock , { ... fallbackMock , global : validTreatment } ) ) . toEqual ( { ... fallbackMock , global : validTreatment } ) ;
5762 expect ( loggerMock . error ) . not . toHaveBeenCalled ( ) ;
5863 } ) ;
5964
6065 test ( 'returns undefined and logs error if invalid' , ( ) => {
61- const result = FallbacksSanitizer . sanitizeGlobal ( loggerMock , invalidTreatment ) ;
62- expect ( result ) . toBeUndefined ( ) ;
66+ const result = sanitizeFallbacks ( loggerMock , { ... fallbackMock , global : invalidTreatment } ) ;
67+ expect ( result ) . toEqual ( fallbackMock ) ;
6368 expect ( loggerMock . error ) . toHaveBeenCalledWith (
6469 expect . stringContaining ( 'Fallback treatments - Discarded fallback' )
6570 ) ;
@@ -74,9 +79,9 @@ describe('FallbacksSanitizer', () => {
7479 bad_treatment : invalidTreatment ,
7580 } ;
7681
77- const result = FallbacksSanitizer . sanitizeByFlag ( loggerMock , input ) ;
82+ const result = sanitizeFallbacks ( loggerMock , { ... fallbackMock , byFlag : input } ) ;
7883
79- expect ( result ) . toEqual ( { valid_flag : validTreatment } ) ;
84+ expect ( result ) . toEqual ( { ... fallbackMock , byFlag : { valid_flag : validTreatment } } ) ;
8085 expect ( loggerMock . error ) . toHaveBeenCalledTimes ( 2 ) ; // invalid flag + bad_treatment
8186 } ) ;
8287
@@ -85,20 +90,46 @@ describe('FallbacksSanitizer', () => {
8590 'invalid flag' : invalidTreatment ,
8691 } ;
8792
88- const result = FallbacksSanitizer . sanitizeByFlag ( loggerMock , input ) ;
89- expect ( result ) . toEqual ( { } ) ;
93+ const result = sanitizeFallbacks ( loggerMock , { ... fallbackMock , byFlag : input } ) ;
94+ expect ( result ) . toEqual ( fallbackMock ) ;
9095 expect ( loggerMock . error ) . toHaveBeenCalled ( ) ;
9196 } ) ;
9297
9398 test ( 'returns same object if all valid' , ( ) => {
9499 const input = {
95- flag_one : validTreatment ,
96- flag_two : { treatment : 'valid_2' , config : null } ,
100+ ...fallbackMock ,
101+ byFlag :{
102+ flag_one : validTreatment ,
103+ flag_two : { treatment : 'valid_2' , config : null } ,
104+ }
97105 } ;
98106
99- const result = FallbacksSanitizer . sanitizeByFlag ( loggerMock , input ) ;
107+ const result = sanitizeFallbacks ( loggerMock , input ) ;
100108 expect ( result ) . toEqual ( input ) ;
101109 expect ( loggerMock . error ) . not . toHaveBeenCalled ( ) ;
102110 } ) ;
103111 } ) ;
112+
113+ describe ( 'sanitizeFallbacks' , ( ) => {
114+ test ( 'returns undefined and logs error if fallbacks is not an object' , ( ) => { // @ts -expect-error
115+ const result = sanitizeFallbacks ( loggerMock , 'invalid_fallbacks' ) ;
116+ expect ( result ) . toBeUndefined ( ) ;
117+ expect ( loggerMock . error ) . toHaveBeenCalledWith (
118+ 'Fallback treatments - Discarded configuration: it must be an object with optional `global` and `byFlag` properties'
119+ ) ;
120+ } ) ;
121+
122+ test ( 'returns undefined and logs error if fallbacks is not an object' , ( ) => { // @ts -expect-error
123+ const result = sanitizeFallbacks ( loggerMock , true ) ;
124+ expect ( result ) . toBeUndefined ( ) ;
125+ expect ( loggerMock . error ) . toHaveBeenCalledWith (
126+ 'Fallback treatments - Discarded configuration: it must be an object with optional `global` and `byFlag` properties'
127+ ) ;
128+ } ) ;
129+
130+ test ( 'sanitizes both global and byFlag fallbacks for empty object' , ( ) => { // @ts -expect-error
131+ const result = sanitizeFallbacks ( loggerMock , { global : { } } ) ;
132+ expect ( result ) . toEqual ( { global : undefined , byFlag : { } } ) ;
133+ } ) ;
134+ } ) ;
104135} ) ;
0 commit comments