@@ -2,6 +2,7 @@ package ldreason
22
33import (
44 "encoding/json"
5+ "strings"
56 "testing"
67
78 "gopkg.in/launchdarkly/go-jsonstream.v1/jreader"
@@ -100,12 +101,28 @@ func TestReasonErrorProperties(t *testing.T) {
100101 }
101102}
102103
104+ func TestReasonUnboundedSegmentsStatus (t * testing.T ) {
105+ for _ , r := range []EvaluationReason {
106+ NewEvalReasonOff (), NewEvalReasonFallthrough (), NewEvalReasonTargetMatch (),
107+ NewEvalReasonRuleMatch (0 , "id" ), NewEvalReasonPrerequisiteFailed ("key" ),
108+ NewEvalReasonError (EvalErrorFlagNotFound ),
109+ } {
110+ t .Run (string (r .GetKind ()), func (t * testing.T ) {
111+ assert .Equal (t , BigSegmentsStatus ("" ), r .GetBigSegmentsStatus ())
112+ r1 := NewEvalReasonFromReasonWithBigSegmentsStatus (r , BigSegmentsHealthy )
113+ assert .Equal (t , BigSegmentsHealthy , r1 .GetBigSegmentsStatus ())
114+ })
115+ }
116+ }
117+
118+ type serializationTestParams struct {
119+ reason EvaluationReason
120+ stringRep string
121+ expectedJSON string
122+ }
123+
103124func TestReasonSerializationAndDeserialization (t * testing.T ) {
104- params := []struct {
105- reason EvaluationReason
106- stringRep string
107- expectedJSON string
108- }{
125+ baseParams := []serializationTestParams {
109126 {EvaluationReason {}, "" , "null" },
110127 {NewEvalReasonOff (), "OFF" , `{"kind":"OFF"}` },
111128 {NewEvalReasonFallthrough (), "FALLTHROUGH" , `{"kind":"FALLTHROUGH"}` },
@@ -115,38 +132,52 @@ func TestReasonSerializationAndDeserialization(t *testing.T) {
115132 {NewEvalReasonRuleMatch (1 , "x" ), "RULE_MATCH(1,x)" , `{"kind":"RULE_MATCH","ruleIndex":1,"ruleId":"x"}` },
116133 {NewEvalReasonRuleMatchExperiment (1 , "x" , true ), "RULE_MATCH(1,x)" , `{"kind":"RULE_MATCH","ruleIndex":1,"ruleId":"x","inExperiment":true}` },
117134 {NewEvalReasonRuleMatchExperiment (1 , "x" , false ), "RULE_MATCH(1,x)" , `{"kind":"RULE_MATCH","ruleIndex":1,"ruleId":"x"}` },
118- {NewEvalReasonPrerequisiteFailed ("x" ), "PREREQUISITE_FAILED(x)" , `{"kind":"PREREQUISITE_FAILED","prerequisiteKey":"x"} ` },
135+ {NewEvalReasonPrerequisiteFailed ("x" ), "PREREQUISITE_FAILED(x)" , `{"kind":"PREREQUISITE_FAILED","prerequisiteKey":"x"}` },
119136 {NewEvalReasonError (EvalErrorWrongType ), "ERROR(WRONG_TYPE)" , `{"kind":"ERROR","errorKind":"WRONG_TYPE"}` },
120137 }
138+ params := baseParams
139+ for _ , param := range baseParams {
140+ if param .reason .IsDefined () {
141+ params = append (params , serializationTestParams {
142+ reason : NewEvalReasonFromReasonWithBigSegmentsStatus (param .reason , BigSegmentsHealthy ),
143+ stringRep : param .stringRep ,
144+ expectedJSON : strings .TrimSuffix (param .expectedJSON , "}" ) +
145+ `,"bigSegmentsStatus":"HEALTHY"}` ,
146+ })
147+ }
148+ }
149+
121150 for _ , param := range params {
122- actual , err := json .Marshal (param .reason )
123- assert .NoError (t , err )
124- assert .JSONEq (t , param .expectedJSON , string (actual ))
125-
126- var r1 EvaluationReason
127- err = json .Unmarshal (actual , & r1 )
128- assert .NoError (t , err )
129- assert .Equal (t , param .reason , r1 )
130-
131- assert .Equal (t , param .stringRep , param .reason .String ())
132-
133- var r2 EvaluationReason
134- reader := jreader .NewReader (actual )
135- r2 .ReadFromJSONReader (& reader )
136- assert .NoError (t , reader .Error ())
137- assert .Equal (t , param .reason , r2 )
138-
139- w := jwriter .NewWriter ()
140- param .reason .WriteToJSONWriter (& w )
141- assert .NoError (t , w .Error ())
142- bytes := w .Bytes ()
143- assert .JSONEq (t , param .expectedJSON , string (bytes ))
144-
145- var buf jsonstream.JSONBuffer
146- param .reason .WriteToJSONBuffer (& buf )
147- bytes , err = buf .Get ()
148- assert .NoError (t , err )
149- assert .JSONEq (t , param .expectedJSON , string (bytes ))
151+ t .Run (param .expectedJSON , func (t * testing.T ) {
152+ actual , err := json .Marshal (param .reason )
153+ assert .NoError (t , err )
154+ assert .JSONEq (t , param .expectedJSON , string (actual ))
155+
156+ var r1 EvaluationReason
157+ err = json .Unmarshal (actual , & r1 )
158+ assert .NoError (t , err )
159+ assert .Equal (t , param .reason , r1 )
160+
161+ assert .Equal (t , param .stringRep , param .reason .String ())
162+
163+ var r2 EvaluationReason
164+ reader := jreader .NewReader (actual )
165+ r2 .ReadFromJSONReader (& reader )
166+ assert .NoError (t , reader .Error ())
167+ assert .Equal (t , param .reason , r2 )
168+
169+ w := jwriter .NewWriter ()
170+ param .reason .WriteToJSONWriter (& w )
171+ assert .NoError (t , w .Error ())
172+ bytes := w .Bytes ()
173+ assert .JSONEq (t , param .expectedJSON , string (bytes ))
174+
175+ var buf jsonstream.JSONBuffer
176+ param .reason .WriteToJSONBuffer (& buf )
177+ bytes , err = buf .Get ()
178+ assert .NoError (t , err )
179+ assert .JSONEq (t , param .expectedJSON , string (bytes ))
180+ })
150181 }
151182
152183 var r EvaluationReason
0 commit comments