@@ -142,4 +142,101 @@ def test_to_flags_and_payloads_empty(self):
142142 result = to_flags_and_payloads (resp )
143143
144144 self .assertEqual (result ["featureFlags" ], {})
145- self .assertEqual (result ["featureFlagPayloads" ], {})
145+ self .assertEqual (result ["featureFlagPayloads" ], {})
146+
147+ def test_to_flags_and_payloads_with_payload (self ):
148+ resp = {
149+ "flags" : {
150+ "decide-flag" : {
151+ "key" : "decide-flag" ,
152+ "enabled" : True ,
153+ "variant" : "decide-variant" ,
154+ "reason" : {
155+ "code" : "matched_condition" ,
156+ "condition_index" : 0 ,
157+ "description" : "Matched condition set 1" ,
158+ },
159+ "metadata" : {
160+ "id" : 23 ,
161+ "version" : 42 ,
162+ "payload" : "{\" foo\" : \" bar\" }" ,
163+ },
164+ }
165+ },
166+ "requestId" : "18043bf7-9cf6-44cd-b959-9662ee20d371" ,
167+ }
168+
169+ normalized = normalize_decide_response (resp )
170+ result = to_flags_and_payloads (normalized )
171+
172+ self .assertEqual (result ["featureFlags" ]["decide-flag" ], "decide-variant" )
173+ self .assertEqual (result ["featureFlagPayloads" ]["decide-flag" ], "{\" foo\" : \" bar\" }" )
174+
175+ def test_feature_flag_from_json (self ):
176+ # Test with full metadata
177+ resp = {
178+ "key" : "test-flag" ,
179+ "enabled" : True ,
180+ "variant" : "test-variant" ,
181+ "reason" : {
182+ "code" : "matched_condition" ,
183+ "condition_index" : 0 ,
184+ "description" : "Matched condition set 1"
185+ },
186+ "metadata" : {
187+ "id" : 1 ,
188+ "payload" : '{"some": "json"}' ,
189+ "version" : 2 ,
190+ "description" : "test-description"
191+ }
192+ }
193+
194+ flag = FeatureFlag .from_json (resp )
195+ self .assertEqual (flag .key , "test-flag" )
196+ self .assertTrue (flag .enabled )
197+ self .assertEqual (flag .variant , "test-variant" )
198+ self .assertEqual (flag .get_value (), "test-variant" )
199+ self .assertEqual (
200+ flag .reason , FlagReason (code = "matched_condition" , condition_index = 0 , description = "Matched condition set 1" )
201+ )
202+ self .assertEqual (
203+ flag .metadata , FlagMetadata (id = 1 , payload = '{"some": "json"}' , version = 2 , description = "test-description" )
204+ )
205+
206+ def test_feature_flag_from_json_minimal (self ):
207+ # Test with minimal required fields
208+ resp = {
209+ "key" : "test-flag" ,
210+ "enabled" : True
211+ }
212+
213+ flag = FeatureFlag .from_json (resp )
214+ self .assertEqual (flag .key , "test-flag" )
215+ self .assertTrue (flag .enabled )
216+ self .assertIsNone (flag .variant )
217+ self .assertEqual (flag .get_value (), True )
218+ self .assertIsNone (flag .reason )
219+ self .assertEqual (flag .metadata , LegacyFlagMetadata (payload = None ))
220+
221+ def test_feature_flag_from_json_without_metadata (self ):
222+ # Test with reason but no metadata
223+ resp = {
224+ "key" : "test-flag" ,
225+ "enabled" : True ,
226+ "variant" : "test-variant" ,
227+ "reason" : {
228+ "code" : "matched_condition" ,
229+ "condition_index" : 0 ,
230+ "description" : "Matched condition set 1"
231+ }
232+ }
233+
234+ flag = FeatureFlag .from_json (resp )
235+ self .assertEqual (flag .key , "test-flag" )
236+ self .assertTrue (flag .enabled )
237+ self .assertEqual (flag .variant , "test-variant" )
238+ self .assertEqual (flag .get_value (), "test-variant" )
239+ self .assertEqual (
240+ flag .reason , FlagReason (code = "matched_condition" , condition_index = 0 , description = "Matched condition set 1" )
241+ )
242+ self .assertEqual (flag .metadata , LegacyFlagMetadata (payload = None ))
0 commit comments