11import typing
22
33import pytest
4- from flag_engine .result .types import FlagResult
54
65from flagsmith .models import Flag , Flags
7- from flagsmith .types import SDKEvaluationResult
6+ from flagsmith .types import SDKEvaluationResult , SDKFlagResult
87
98
109def test_flag_from_evaluation_result () -> None :
1110 # Given
12- flag_result : FlagResult = {
11+ flag_result : SDKFlagResult = {
1312 "enabled" : True ,
1413 "feature_key" : "123" ,
1514 "name" : "test_feature" ,
1615 "reason" : "DEFAULT" ,
1716 "value" : "test-value" ,
17+ "metadata" : {"flagsmith_id" : 123 },
1818 }
1919
2020 # When
21- flag : Flag = Flag .from_evaluation_result (flag_result )
21+ flag = Flag .from_evaluation_result (flag_result )
2222
2323 # Then
2424 assert flag .enabled is True
@@ -29,9 +29,9 @@ def test_flag_from_evaluation_result() -> None:
2929
3030
3131@pytest .mark .parametrize (
32- "flags_result,expected_count, expected_names" ,
32+ "flags_result,expected_names" ,
3333 [
34- ({}, 0 , []),
34+ ({}, []),
3535 (
3636 {
3737 "feature1" : {
@@ -40,9 +40,9 @@ def test_flag_from_evaluation_result() -> None:
4040 "name" : "feature1" ,
4141 "reason" : "DEFAULT" ,
4242 "value" : "value1" ,
43+ "metadata" : {"flagsmith_id" : 1 },
4344 }
4445 },
45- 1 ,
4646 ["feature1" ],
4747 ),
4848 (
@@ -53,9 +53,9 @@ def test_flag_from_evaluation_result() -> None:
5353 "name" : "feature1" ,
5454 "reason" : "DEFAULT" ,
5555 "value" : "value1" ,
56+ "metadata" : {"flagsmith_id" : 1 },
5657 }
5758 },
58- 1 ,
5959 ["feature1" ],
6060 ),
6161 (
@@ -66,30 +66,31 @@ def test_flag_from_evaluation_result() -> None:
6666 "name" : "feature1" ,
6767 "reason" : "DEFAULT" ,
6868 "value" : "value1" ,
69+ "metadata" : {"flagsmith_id" : 1 },
6970 },
7071 "feature2" : {
7172 "enabled" : True ,
7273 "feature_key" : "2" ,
7374 "name" : "feature2" ,
7475 "reason" : "DEFAULT" ,
7576 "value" : "value2" ,
77+ "metadata" : {"flagsmith_id" : 2 },
7678 },
7779 "feature3" : {
7880 "enabled" : True ,
7981 "feature_key" : "3" ,
8082 "name" : "feature3" ,
8183 "reason" : "DEFAULT" ,
8284 "value" : 42 ,
85+ "metadata" : {"flagsmith_id" : 3 },
8386 },
8487 },
85- 3 ,
8688 ["feature1" , "feature2" , "feature3" ],
8789 ),
8890 ],
8991)
9092def test_flags_from_evaluation_result (
91- flags_result : typing .Dict [str , FlagResult ],
92- expected_count : int ,
93+ flags_result : typing .Dict [str , SDKFlagResult ],
9394 expected_names : typing .List [str ],
9495) -> None :
9596 # Given
@@ -106,13 +107,10 @@ def test_flags_from_evaluation_result(
106107 )
107108
108109 # Then
109- assert len (flags .flags ) == expected_count
110-
111- for name in expected_names :
112- assert name in flags .flags
113- flag : Flag = flags .flags [name ]
114- assert isinstance (flag , Flag )
115- assert flag .feature_name == name
110+ assert set (flags .flags .keys ()) == set (expected_names )
111+ assert set (flag .feature_name for flag in flags .flags .values ()) == set (
112+ expected_names
113+ )
116114
117115
118116@pytest .mark .parametrize (
@@ -130,16 +128,32 @@ def test_flag_from_evaluation_result_value_types(
130128 value : typing .Any , expected : typing .Any
131129) -> None :
132130 # Given
133- flag_result : FlagResult = {
131+ flag_result : SDKFlagResult = {
134132 "enabled" : True ,
135133 "feature_key" : "123" ,
136134 "name" : "test_feature" ,
137135 "reason" : "DEFAULT" ,
138136 "value" : value ,
137+ "metadata" : {"flagsmith_id" : 123 },
139138 }
140139
141140 # When
142- flag : Flag = Flag .from_evaluation_result (flag_result )
141+ flag = Flag .from_evaluation_result (flag_result )
143142
144143 # Then
145144 assert flag .value == expected
145+
146+
147+ def test_flag_from_evaluation_result_missing_metadata__raises_expected () -> None :
148+ # Given
149+ flag_result : SDKFlagResult = {
150+ "enabled" : True ,
151+ "feature_key" : "123" ,
152+ "name" : "test_feature" ,
153+ "reason" : "DEFAULT" ,
154+ "value" : "test-value" ,
155+ }
156+
157+ # When & Then
158+ with pytest .raises (ValueError ):
159+ Flag .from_evaluation_result (flag_result )
0 commit comments