@@ -467,9 +467,11 @@ func TestResolveAllValues(t *testing.T) {
467467 }
468468
469469 for _ , val := range vals {
470- // disabled flag must be ignored from bulk evaluation
470+ // disabled flag must not be ignored from bulk evaluation
471471 if val .FlagKey == DisabledFlag {
472- t .Errorf ("disabled flag '%s' is present in evaluation results" , DisabledFlag )
472+ assert .Equal (t , model .DisabledReason , val .Reason )
473+ assert .Nil (t , val .Error )
474+ continue
473475 }
474476
475477 switch vT := val .Value .(type ) {
@@ -510,7 +512,7 @@ func TestResolveBooleanValue(t *testing.T) {
510512 {DynamicBoolFlag , map [string ]interface {}{ColorProp : ColorValue }, StaticBoolValue , model .TargetingMatchReason , "" },
511513 {StaticObjectFlag , nil , StaticBoolValue , model .ErrorReason , model .TypeMismatchErrorCode },
512514 {MissingFlag , nil , StaticBoolValue , model .ErrorReason , model .FlagNotFoundErrorCode },
513- {DisabledFlag , nil , StaticBoolValue , model .ErrorReason , model . FlagDisabledErrorCode },
515+ {DisabledFlag , nil , false , model .DisabledReason , "" },
514516 }
515517 const reqID = "default"
516518 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -545,7 +547,7 @@ func BenchmarkResolveBooleanValue(b *testing.B) {
545547 {DynamicBoolFlag , map [string ]interface {}{ColorProp : ColorValue }, StaticBoolValue , model .TargetingMatchReason , "" },
546548 {StaticObjectFlag , nil , StaticBoolValue , model .ErrorReason , model .TypeMismatchErrorCode },
547549 {MissingFlag , nil , StaticBoolValue , model .ErrorReason , model .FlagNotFoundErrorCode },
548- {DisabledFlag , nil , StaticBoolValue , model .ErrorReason , model . FlagDisabledErrorCode },
550+ {DisabledFlag , nil , false , model .DisabledReason , "" },
549551 }
550552
551553 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -585,7 +587,7 @@ func TestResolveStringValue(t *testing.T) {
585587 {DynamicStringFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicStringValue , model .TargetingMatchReason , "" },
586588 {StaticObjectFlag , nil , "" , model .ErrorReason , model .TypeMismatchErrorCode },
587589 {MissingFlag , nil , "" , model .ErrorReason , model .FlagNotFoundErrorCode },
588- {DisabledFlag , nil , "" , model .ErrorReason , model . FlagDisabledErrorCode },
590+ {DisabledFlag , nil , "" , model .DisabledReason , "" },
589591 }
590592 const reqID = "default"
591593 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -621,7 +623,7 @@ func BenchmarkResolveStringValue(b *testing.B) {
621623 {DynamicStringFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicStringValue , model .TargetingMatchReason , "" },
622624 {StaticObjectFlag , nil , "" , model .ErrorReason , model .TypeMismatchErrorCode },
623625 {MissingFlag , nil , "" , model .ErrorReason , model .FlagNotFoundErrorCode },
624- {DisabledFlag , nil , "" , model .ErrorReason , model . FlagDisabledErrorCode },
626+ {DisabledFlag , nil , "" , model .DisabledReason , "" },
625627 }
626628
627629 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -661,7 +663,7 @@ func TestResolveFloatValue(t *testing.T) {
661663 {DynamicFloatFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicFloatValue , model .TargetingMatchReason , "" },
662664 {StaticObjectFlag , nil , 13 , model .ErrorReason , model .TypeMismatchErrorCode },
663665 {MissingFlag , nil , 13 , model .ErrorReason , model .FlagNotFoundErrorCode },
664- {DisabledFlag , nil , 0 , model .ErrorReason , model . FlagDisabledErrorCode },
666+ {DisabledFlag , nil , 0 , model .DisabledReason , "" },
665667 }
666668 const reqID = "default"
667669 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -697,7 +699,7 @@ func BenchmarkResolveFloatValue(b *testing.B) {
697699 {DynamicFloatFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicFloatValue , model .TargetingMatchReason , "" },
698700 {StaticObjectFlag , nil , 13 , model .ErrorReason , model .TypeMismatchErrorCode },
699701 {MissingFlag , nil , 13 , model .ErrorReason , model .FlagNotFoundErrorCode },
700- {DisabledFlag , nil , 0 , model .ErrorReason , model . FlagDisabledErrorCode },
702+ {DisabledFlag , nil , 0 , model .DisabledReason , "" },
701703 }
702704
703705 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -737,7 +739,7 @@ func TestResolveIntValue(t *testing.T) {
737739 {DynamicIntFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicIntValue , model .TargetingMatchReason , "" },
738740 {StaticObjectFlag , nil , 13 , model .ErrorReason , model .TypeMismatchErrorCode },
739741 {MissingFlag , nil , 13 , model .ErrorReason , model .FlagNotFoundErrorCode },
740- {DisabledFlag , nil , 0 , model .ErrorReason , model . FlagDisabledErrorCode },
742+ {DisabledFlag , nil , 0 , model .DisabledReason , "" },
741743 }
742744 const reqID = "default"
743745 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -773,7 +775,7 @@ func BenchmarkResolveIntValue(b *testing.B) {
773775 {DynamicIntFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicIntValue , model .TargetingMatchReason , "" },
774776 {StaticObjectFlag , nil , 13 , model .ErrorReason , model .TypeMismatchErrorCode },
775777 {MissingFlag , nil , 13 , model .ErrorReason , model .FlagNotFoundErrorCode },
776- {DisabledFlag , nil , 0 , model .ErrorReason , model . FlagDisabledErrorCode },
778+ {DisabledFlag , nil , 0 , model .DisabledReason , "" },
777779 }
778780
779781 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -801,6 +803,33 @@ func BenchmarkResolveIntValue(b *testing.B) {
801803 }
802804}
803805
806+ func assertObjectResolveResult (
807+ t * testing.T ,
808+ flagKey , expectedJSON , expectedReason , errorCode string ,
809+ val map [string ]any ,
810+ reason string ,
811+ err error ,
812+ ) {
813+ t .Helper ()
814+ if errorCode != "" {
815+ assert .Equal (t , model .ErrorReason , reason )
816+ assert .EqualError (t , err , errorCode )
817+ return
818+ }
819+ if ! assert .NoError (t , err ) {
820+ return
821+ }
822+ if flagKey == DisabledFlag {
823+ assert .Nil (t , val )
824+ } else {
825+ marshalled , marshalErr := json .Marshal (val )
826+ if assert .NoError (t , marshalErr ) {
827+ assert .JSONEq (t , expectedJSON , string (marshalled ))
828+ }
829+ }
830+ assert .Equal (t , expectedReason , reason )
831+ }
832+
804833func TestResolveObjectValue (t * testing.T ) {
805834 tests := []struct {
806835 flagKey string
@@ -813,7 +842,7 @@ func TestResolveObjectValue(t *testing.T) {
813842 {DynamicObjectFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicObjectValue , model .TargetingMatchReason , "" },
814843 {StaticBoolFlag , nil , "{}" , model .ErrorReason , model .TypeMismatchErrorCode },
815844 {MissingFlag , nil , "{}" , model .ErrorReason , model .FlagNotFoundErrorCode },
816- {DisabledFlag , nil , "{} " , model .ErrorReason , model . FlagDisabledErrorCode },
845+ {DisabledFlag , nil , "" , model .DisabledReason , "" },
817846 }
818847 const reqID = "default"
819848 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -824,19 +853,7 @@ func TestResolveObjectValue(t *testing.T) {
824853
825854 for _ , test := range tests {
826855 val , _ , reason , _ , err := evaluator .ResolveObjectValue (context .TODO (), reqID , test .flagKey , test .context )
827-
828- if test .errorCode == "" {
829- if assert .NoError (t , err ) {
830- marshalled , err := json .Marshal (val )
831- if assert .NoError (t , err ) {
832- assert .JSONEq (t , test .val , string (marshalled ))
833- assert .Equal (t , test .reason , reason )
834- }
835- }
836- } else {
837- assert .Equal (t , model .ErrorReason , reason )
838- assert .EqualError (t , err , test .errorCode )
839- }
856+ assertObjectResolveResult (t , test .flagKey , test .val , test .reason , test .errorCode , val , reason , err )
840857 }
841858}
842859
@@ -852,7 +869,7 @@ func BenchmarkResolveObjectValue(b *testing.B) {
852869 {DynamicObjectFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicObjectValue , model .TargetingMatchReason , "" },
853870 {StaticBoolFlag , nil , "{}" , model .ErrorReason , model .TypeMismatchErrorCode },
854871 {MissingFlag , nil , "{}" , model .ErrorReason , model .FlagNotFoundErrorCode },
855- {DisabledFlag , nil , "{} " , model .ErrorReason , model . FlagDisabledErrorCode },
872+ {DisabledFlag , nil , "null " , model .DisabledReason , "" },
856873 }
857874
858875 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
@@ -897,7 +914,7 @@ func TestResolveAsAnyValue(t *testing.T) {
897914 {DynamicObjectFlag , map [string ]interface {}{ColorProp : ColorValue }, DynamicObjectValue , model .TargetingMatchReason , "" },
898915 // errors
899916 {MissingFlag , nil , "{}" , model .ErrorReason , model .FlagNotFoundErrorCode },
900- {DisabledFlag , nil , "{}" , model .ErrorReason , model . FlagDisabledErrorCode },
917+ {DisabledFlag , nil , "{}" , model .DisabledReason , "" },
901918 }
902919
903920 evaluator := flagdEvaluator .NewJSON (logger .NewLogger (nil , false ), store .NewFlags ())
0 commit comments