@@ -15,17 +15,21 @@ func TestReasonIsDefined(t *testing.T) {
1515 assert .False (t , EvaluationReason {}.IsDefined ())
1616 assert .True (t , NewEvalReasonOff ().IsDefined ())
1717 assert .True (t , NewEvalReasonFallthrough ().IsDefined ())
18+ assert .True (t , NewEvalReasonFallthroughExperiment (true ).IsDefined ())
1819 assert .True (t , NewEvalReasonTargetMatch ().IsDefined ())
1920 assert .True (t , NewEvalReasonRuleMatch (0 , "" ).IsDefined ())
21+ assert .True (t , NewEvalReasonRuleMatchExperiment (0 , "" , true ).IsDefined ())
2022 assert .True (t , NewEvalReasonPrerequisiteFailed ("" ).IsDefined ())
2123 assert .True (t , NewEvalReasonError (EvalErrorFlagNotFound ).IsDefined ())
2224}
2325
2426func TestReasonKind (t * testing.T ) {
2527 assert .Equal (t , EvalReasonOff , NewEvalReasonOff ().GetKind ())
2628 assert .Equal (t , EvalReasonFallthrough , NewEvalReasonFallthrough ().GetKind ())
29+ assert .Equal (t , EvalReasonFallthrough , NewEvalReasonFallthroughExperiment (true ).GetKind ())
2730 assert .Equal (t , EvalReasonTargetMatch , NewEvalReasonTargetMatch ().GetKind ())
2831 assert .Equal (t , EvalReasonRuleMatch , NewEvalReasonRuleMatch (0 , "" ).GetKind ())
32+ assert .Equal (t , EvalReasonRuleMatch , NewEvalReasonRuleMatchExperiment (0 , "" , true ).GetKind ())
2933 assert .Equal (t , EvalReasonPrerequisiteFailed , NewEvalReasonPrerequisiteFailed ("" ).GetKind ())
3034 assert .Equal (t , EvalReasonError , NewEvalReasonError (EvalErrorFlagNotFound ).GetKind ())
3135}
@@ -35,8 +39,12 @@ func TestReasonRuleProperties(t *testing.T) {
3539 assert .Equal (t , 1 , r .GetRuleIndex ())
3640 assert .Equal (t , "id" , r .GetRuleID ())
3741
42+ r = NewEvalReasonRuleMatchExperiment (1 , "id" , true )
43+ assert .Equal (t , 1 , r .GetRuleIndex ())
44+ assert .Equal (t , "id" , r .GetRuleID ())
45+
3846 for _ , r := range []EvaluationReason {
39- NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonTargetMatch (),
47+ NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonFallthroughExperiment ( true ), NewEvalReasonTargetMatch (),
4048 NewEvalReasonPrerequisiteFailed ("" ), NewEvalReasonError (EvalErrorFlagNotFound ),
4149 } {
4250 t .Run (string (r .GetKind ()), func (t * testing.T ) {
@@ -46,13 +54,31 @@ func TestReasonRuleProperties(t *testing.T) {
4654 }
4755}
4856
57+ func TestReasonExperimentProperties (t * testing.T ) {
58+ r := NewEvalReasonFallthroughExperiment (true )
59+ assert .Equal (t , true , r .IsInExperiment ())
60+
61+ r = NewEvalReasonRuleMatchExperiment (1 , "id" , true )
62+ assert .Equal (t , true , r .IsInExperiment ())
63+
64+ for _ , r := range []EvaluationReason {
65+ NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonFallthroughExperiment (false ), NewEvalReasonTargetMatch (),
66+ NewEvalReasonRuleMatch (1 , "id" ),
67+ NewEvalReasonRuleMatchExperiment (1 , "id" , false ), NewEvalReasonPrerequisiteFailed ("" ), NewEvalReasonError (EvalErrorFlagNotFound ),
68+ } {
69+ t .Run (string (r .GetKind ()), func (t * testing.T ) {
70+ assert .Equal (t , false , r .IsInExperiment ())
71+ })
72+ }
73+ }
74+
4975func TestReasonPrerequisiteFailedProperties (t * testing.T ) {
5076 r := NewEvalReasonPrerequisiteFailed ("key" )
5177 assert .Equal (t , "key" , r .GetPrerequisiteKey ())
5278
5379 for _ , r := range []EvaluationReason {
54- NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonTargetMatch (),
55- NewEvalReasonRuleMatch (0 , "id" ), NewEvalReasonError (EvalErrorFlagNotFound ),
80+ NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonFallthroughExperiment ( true ), NewEvalReasonTargetMatch (),
81+ NewEvalReasonRuleMatch (0 , "id" ), NewEvalReasonRuleMatchExperiment ( 0 , "id" , true ), NewEvalReasonError (EvalErrorFlagNotFound ),
5682 } {
5783 t .Run (string (r .GetKind ()), func (t * testing.T ) {
5884 assert .Equal (t , "" , r .GetPrerequisiteKey ())
@@ -65,8 +91,8 @@ func TestReasonErrorProperties(t *testing.T) {
6591 assert .Equal (t , EvalErrorFlagNotFound , r .GetErrorKind ())
6692
6793 for _ , r := range []EvaluationReason {
68- NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonTargetMatch (),
69- NewEvalReasonRuleMatch (0 , "id" ), NewEvalReasonPrerequisiteFailed ("key" ),
94+ NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonFallthroughExperiment ( true ), NewEvalReasonTargetMatch (),
95+ NewEvalReasonRuleMatch (0 , "id" ), NewEvalReasonRuleMatchExperiment ( 0 , "id" , true ), NewEvalReasonPrerequisiteFailed ("key" ),
7096 } {
7197 t .Run (string (r .GetKind ()), func (t * testing.T ) {
7298 assert .Equal (t , EvalErrorKind ("" ), r .GetErrorKind ())
@@ -83,8 +109,12 @@ func TestReasonSerializationAndDeserialization(t *testing.T) {
83109 {EvaluationReason {}, "" , "null" },
84110 {NewEvalReasonOff (), "OFF" , `{"kind":"OFF"}` },
85111 {NewEvalReasonFallthrough (), "FALLTHROUGH" , `{"kind":"FALLTHROUGH"}` },
112+ {NewEvalReasonFallthroughExperiment (true ), "FALLTHROUGH" , `{"kind":"FALLTHROUGH","inExperiment":true}` },
113+ {NewEvalReasonFallthroughExperiment (false ), "FALLTHROUGH" , `{"kind":"FALLTHROUGH"}` },
86114 {NewEvalReasonTargetMatch (), "TARGET_MATCH" , `{"kind":"TARGET_MATCH"}` },
87115 {NewEvalReasonRuleMatch (1 , "x" ), "RULE_MATCH(1,x)" , `{"kind":"RULE_MATCH","ruleIndex":1,"ruleId":"x"}` },
116+ {NewEvalReasonRuleMatchExperiment (1 , "x" , true ), "RULE_MATCH(1,x)" , `{"kind":"RULE_MATCH","ruleIndex":1,"ruleId":"x","inExperiment":true}` },
117+ {NewEvalReasonRuleMatchExperiment (1 , "x" , false ), "RULE_MATCH(1,x)" , `{"kind":"RULE_MATCH","ruleIndex":1,"ruleId":"x"}` },
88118 {NewEvalReasonPrerequisiteFailed ("x" ), "PREREQUISITE_FAILED(x)" , `{"kind":"PREREQUISITE_FAILED","prerequisiteKey":"x"} ` },
89119 {NewEvalReasonError (EvalErrorWrongType ), "ERROR(WRONG_TYPE)" , `{"kind":"ERROR","errorKind":"WRONG_TYPE"}` },
90120 }
0 commit comments