1- // @ts -nocheck
21import { evaluateFeature } from '../index' ;
32import { EXCEPTION , NOT_IN_SPLIT , SPLIT_ARCHIVED , SPLIT_KILLED , SPLIT_NOT_FOUND } from '../../utils/labels' ;
43import { loggerMock } from '../../logger/__tests__/sdkLogger.mock' ;
5-
6- const splitsMock = {
7- regular : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
8- config : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on' , 'seed' : 1684183541 , 'configurations' : { 'on' : "{color:'black'}" } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
9- killed : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on2' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ACTIVE' , 'killed' : true , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
10- archived : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on3' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ARCHIVED' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
11- trafficAlocation1 : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : - 1667452163 , 'trafficAllocation' : 1 , 'trafficTypeName' : 'user' , 'name' : 'always-on4' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
12- killedWithConfig : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on5' , 'seed' : 1684183541 , 'configurations' : { 'off' : "{color:'black'}" } , 'status' : 'ACTIVE' , 'killed' : true , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
13- archivedWithConfig : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on5' , 'seed' : 1684183541 , 'configurations' : { 'off' : "{color:'black'}" } , 'status' : 'ARCHIVED' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
14- trafficAlocation1WithConfig : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : - 1667452163 , 'trafficAllocation' : 1 , 'trafficTypeName' : 'user' , 'name' : 'always-on6' , 'seed' : 1684183541 , 'configurations' : { 'off' : "{color:'black'}" } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : '' , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : '' , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] }
4+ import { ISplit } from '../../dtos/types' ;
5+ import { IStorageSync } from '../../storages/types' ;
6+
7+ const splitsMock : Record < string , ISplit > = {
8+ regular : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
9+ config : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on' , 'seed' : 1684183541 , 'configurations' : { 'on' : "{color:'black'}" } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
10+ killed : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on2' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ACTIVE' , 'killed' : true , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
11+ archived : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on3' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ARCHIVED' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
12+ trafficAlocation1 : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : - 1667452163 , 'trafficAllocation' : 1 , 'trafficTypeName' : 'user' , 'name' : 'always-on4' , 'seed' : 1684183541 , 'configurations' : { } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
13+ killedWithConfig : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on5' , 'seed' : 1684183541 , 'configurations' : { 'off' : "{color:'black'}" } , 'status' : 'ACTIVE' , 'killed' : true , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
14+ archivedWithConfig : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : 1667452163 , 'trafficAllocation' : 100 , 'trafficTypeName' : 'user' , 'name' : 'always-on5' , 'seed' : 1684183541 , 'configurations' : { 'off' : "{color:'black'}" } , 'status' : 'ARCHIVED' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] } ,
15+ trafficAlocation1WithConfig : { 'changeNumber' : 1487277320548 , 'trafficAllocationSeed' : - 1667452163 , 'trafficAllocation' : 1 , 'trafficTypeName' : 'user' , 'name' : 'always-on6' , 'seed' : 1684183541 , 'configurations' : { 'off' : "{color:'black'}" } , 'status' : 'ACTIVE' , 'killed' : false , 'defaultTreatment' : 'off' , 'conditions' : [ { 'conditionType' : 'ROLLOUT' , 'matcherGroup' : { 'combiner' : 'AND' , 'matchers' : [ { 'keySelector' : { 'trafficType' : 'user' , 'attribute' : '' } , 'matcherType' : 'ALL_KEYS' , 'negate' : false , 'userDefinedSegmentMatcherData' : { 'segmentName' : '' } , 'unaryNumericMatcherData' : { 'dataType' : null , 'value' : 0 } , 'whitelistMatcherData' : { 'whitelist' : null } , 'betweenMatcherData' : { 'dataType' : null , 'start' : 0 , 'end' : 0 } } ] } , 'partitions' : [ { 'treatment' : 'on' , 'size' : 100 } , { 'treatment' : 'off' , 'size' : 0 } ] , 'label' : 'in segment all' } ] }
1516} ;
1617
1718const mockStorage = {
1819 splits : {
19- getSplit ( name ) {
20+ getSplit ( name : string ) {
2021 if ( name === 'throw_exception' ) throw new Error ( 'Error' ) ;
2122 if ( splitsMock [ name ] ) return splitsMock [ name ] ;
2223
2324 return null ;
2425 }
2526 }
26- } ;
27+ } as IStorageSync ;
2728
2829test ( 'EVALUATOR / should return label exception, treatment control and config null on error' , async ( ) => {
2930 const expectedOutput = {
@@ -35,7 +36,7 @@ test('EVALUATOR / should return label exception, treatment control and config nu
3536 loggerMock ,
3637 'fake-key' ,
3738 'throw_exception' ,
38- null ,
39+ undefined ,
3940 mockStorage ,
4041 ) ;
4142
@@ -59,7 +60,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
5960 loggerMock ,
6061 'fake-key' ,
6162 'config' ,
62- null ,
63+ undefined ,
6364 mockStorage ,
6465 ) ;
6566 expect ( evaluationWithConfig ) . toEqual ( expectedOutput ) ; // If the split is retrieved successfully we should get the right evaluation result, label and config.
@@ -68,7 +69,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
6869 loggerMock ,
6970 'fake-key' ,
7071 'not_existent_split' ,
71- null ,
72+ undefined ,
7273 mockStorage ,
7374 ) ;
7475 expect ( evaluationNotFound ) . toEqual ( expectedOutputControl ) ; // If the split is not retrieved successfully because it does not exist, we should get the right evaluation result, label and config.
@@ -77,7 +78,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
7778 loggerMock ,
7879 'fake-key' ,
7980 'regular' ,
80- null ,
81+ undefined ,
8182 mockStorage ,
8283 ) ;
8384 expect ( evaluation ) . toEqual ( { ...expectedOutput , config : null } ) ; // If the split is retrieved successfully we should get the right evaluation result, label and config. If Split has no config it should have config equal null.
@@ -86,7 +87,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
8687 loggerMock ,
8788 'fake-key' ,
8889 'killed' ,
89- null ,
90+ undefined ,
9091 mockStorage ,
9192 ) ;
9293 expect ( evaluationKilled ) . toEqual ( { ...expectedOutput , treatment : 'off' , config : null , label : SPLIT_KILLED } ) ;
@@ -96,7 +97,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
9697 loggerMock ,
9798 'fake-key' ,
9899 'archived' ,
99- null ,
100+ undefined ,
100101 mockStorage ,
101102 ) ;
102103 expect ( evaluationArchived ) . toEqual ( { ...expectedOutput , treatment : 'control' , label : SPLIT_ARCHIVED , config : null } ) ;
@@ -106,7 +107,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
106107 loggerMock ,
107108 'fake-key' ,
108109 'trafficAlocation1' ,
109- null ,
110+ undefined ,
110111 mockStorage ,
111112 ) ;
112113 expect ( evaluationtrafficAlocation1 ) . toEqual ( { ...expectedOutput , label : NOT_IN_SPLIT , config : null , treatment : 'off' } ) ;
@@ -116,7 +117,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
116117 loggerMock ,
117118 'fake-key' ,
118119 'killedWithConfig' ,
119- null ,
120+ undefined ,
120121 mockStorage ,
121122 ) ;
122123 expect ( evaluationKilledWithConfig ) . toEqual ( { ...expectedOutput , treatment : 'off' , label : SPLIT_KILLED } ) ;
@@ -126,7 +127,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
126127 loggerMock ,
127128 'fake-key' ,
128129 'archivedWithConfig' ,
129- null ,
130+ undefined ,
130131 mockStorage ,
131132 ) ;
132133 expect ( evaluationArchivedWithConfig ) . toEqual ( { ...expectedOutput , treatment : 'control' , label : SPLIT_ARCHIVED , config : null } ) ;
@@ -136,7 +137,7 @@ test('EVALUATOR / should return right label, treatment and config if storage ret
136137 loggerMock ,
137138 'fake-key' ,
138139 'trafficAlocation1WithConfig' ,
139- null ,
140+ undefined ,
140141 mockStorage ,
141142 ) ;
142143 expect ( evaluationtrafficAlocation1WithConfig ) . toEqual ( { ...expectedOutput , label : NOT_IN_SPLIT , treatment : 'off' } ) ;
0 commit comments