99from openfeature .exception import FlagNotFoundError , ParseError
1010
1111
12- @pytest .fixture
13- def config ():
14- return create_autospec (Config )
15-
16-
17- @pytest .fixture
18- def flag_store ():
19- return create_autospec (FlagStore )
20-
21-
22- @pytest .fixture
2312def targeting ():
2413 return {
2514 "if" : [
@@ -30,22 +19,31 @@ def targeting():
3019 }
3120
3221
22+ def context (targeting_key ):
23+ return EvaluationContext (targeting_key = targeting_key )
24+
25+
3326@pytest .fixture
34- def flag (targeting ):
27+ def config ():
28+ return create_autospec (Config )
29+
30+
31+ @pytest .fixture
32+ def flag_store ():
33+ return create_autospec (FlagStore )
34+
35+
36+ @pytest .fixture
37+ def flag ():
3538 return Flag (
3639 key = "flag" ,
3740 state = "ENABLED" ,
3841 variants = {"default_variant" : False , "target_variant" : True },
3942 default_variant = "default_variant" ,
40- targeting = targeting ,
43+ targeting = targeting () ,
4144 )
4245
4346
44- @pytest .fixture
45- def context ():
46- return EvaluationContext (targeting_key = "target_variant" )
47-
48-
4947@pytest .fixture
5048def resolver (config ):
5149 config .offline_flag_source_path = "flag.json"
@@ -59,31 +57,6 @@ def resolver(config):
5957 )
6058
6159
62- @pytest .fixture
63- def flag ():
64- return Flag (
65- key = "flag" ,
66- state = "ENABLED" ,
67- variants = {"default_variant" : False },
68- default_variant = "default_variant" ,
69- targeting = None ,
70- )
71-
72-
73- def targeting ():
74- return {
75- "if" : [
76- {"==" : [{"var" : "targetingKey" }, "target_variant" ]},
77- "target_variant" ,
78- None ,
79- ]
80- }
81-
82-
83- def context (targeting_key ):
84- return EvaluationContext (targeting_key = targeting_key )
85-
86-
8760def test_resolve_boolean_details_flag_not_found (resolver ):
8861 resolver .flag_store .get_flag = Mock (return_value = None )
8962 with pytest .raises (FlagNotFoundError ):
@@ -97,8 +70,8 @@ def test_resolve_boolean_details_disabled_flag(flag, resolver):
9770 result = resolver .resolve_boolean_details ("disabled_flag" , False )
9871
9972 assert result .reason == "DISABLED"
100- assert result .variant == None
101- assert result .value == False
73+ assert result .variant is None
74+ assert not result .value
10275
10376
10477def test_resolve_boolean_details_invalid_variant (resolver , flag ):
@@ -111,89 +84,107 @@ def test_resolve_boolean_details_invalid_variant(resolver, flag):
11184
11285
11386@pytest .mark .parametrize (
114- "variants, targeting,"
115- "context, method, default_value,"
116- "expected_reason, expected_variant, expected_value," ,
87+ "input_config, resolve_config, expected" ,
11788 [
11889 (
119- {"default_variant" : False , "target_variant" : True },
120- None ,
121- None ,
122- "resolve_boolean_details" ,
123- False ,
124- "STATIC" ,
125- "default_variant" ,
126- False ,
90+ {
91+ "variants" : {"default_variant" : False , "target_variant" : True },
92+ "targeting" : None ,
93+ },
94+ {
95+ "context" : None ,
96+ "method" : "resolve_boolean_details" ,
97+ "default_value" : False ,
98+ },
99+ {"reason" : "STATIC" , "variant" : "default_variant" , "value" : False },
127100 ),
128101 (
129- {"default_variant" : False , "target_variant" : True },
130- targeting (),
131- context ("no_target_variant" ),
132- "resolve_boolean_details" ,
133- False ,
134- "DEFAULT" ,
135- "default_variant" ,
136- False ,
102+ {
103+ "variants" : {"default_variant" : False , "target_variant" : True },
104+ "targeting" : targeting (),
105+ },
106+ {
107+ "context" : context ("no_target_variant" ),
108+ "method" : "resolve_boolean_details" ,
109+ "default_value" : False ,
110+ },
111+ {"reason" : "DEFAULT" , "variant" : "default_variant" , "value" : False },
137112 ),
138113 (
139- {"default_variant" : False , "target_variant" : True },
140- targeting (),
141- context ("target_variant" ),
142- "resolve_boolean_details" ,
143- False ,
144- "TARGETING_MATCH" ,
145- "target_variant" ,
146- True ,
114+ {
115+ "variants" : {"default_variant" : False , "target_variant" : True },
116+ "targeting" : targeting (),
117+ },
118+ {
119+ "context" : context ("target_variant" ),
120+ "method" : "resolve_boolean_details" ,
121+ "default_value" : False ,
122+ },
123+ {"reason" : "TARGETING_MATCH" , "variant" : "target_variant" , "value" : True },
147124 ),
148125 (
149- {"default_variant" : "default" , "target_variant" : "target" },
150- targeting (),
151- context ("target_variant" ),
152- "resolve_string_details" ,
153- "placeholder" ,
154- "TARGETING_MATCH" ,
155- "target_variant" ,
156- "target" ,
126+ {
127+ "variants" : {"default_variant" : "default" , "target_variant" : "target" },
128+ "targeting" : targeting (),
129+ },
130+ {
131+ "context" : context ("target_variant" ),
132+ "method" : "resolve_string_details" ,
133+ "default_value" : "placeholder" ,
134+ },
135+ {
136+ "reason" : "TARGETING_MATCH" ,
137+ "variant" : "target_variant" ,
138+ "value" : "target" ,
139+ },
157140 ),
158141 (
159- {"default_variant" : 1.0 , "target_variant" : 2.0 },
160- targeting (),
161- context ("target_variant" ),
162- "resolve_float_details" ,
163- 0.0 ,
164- "TARGETING_MATCH" ,
165- "target_variant" ,
166- 2.0 ,
142+ {
143+ "variants" : {"default_variant" : 1.0 , "target_variant" : 2.0 },
144+ "targeting" : targeting (),
145+ },
146+ {
147+ "context" : context ("target_variant" ),
148+ "method" : "resolve_float_details" ,
149+ "default_value" : 0.0 ,
150+ },
151+ {"reason" : "TARGETING_MATCH" , "variant" : "target_variant" , "value" : 2.0 },
167152 ),
168153 (
169- {"default_variant" : True , "target_variant" : False },
170- targeting (),
171- context ("target_variant" ),
172- "resolve_boolean_details" ,
173- True ,
174- "TARGETING_MATCH" ,
175- "target_variant" ,
176- False ,
154+ {
155+ "variants" : {"default_variant" : True , "target_variant" : False },
156+ "targeting" : targeting (),
157+ },
158+ {
159+ "context" : context ("target_variant" ),
160+ "method" : "resolve_boolean_details" ,
161+ "default_value" : True ,
162+ },
163+ {"reason" : "TARGETING_MATCH" , "variant" : "target_variant" , "value" : False },
177164 ),
178165 (
179- {"default_variant" : 10 , "target_variant" : 0 },
180- targeting (),
181- context ("target_variant" ),
182- "resolve_integer_details" ,
183- 1 ,
184- "TARGETING_MATCH" ,
185- "target_variant" ,
186- 0 ,
166+ {
167+ "variants" : {"default_variant" : 10 , "target_variant" : 0 },
168+ "targeting" : targeting (),
169+ },
170+ {
171+ "context" : context ("target_variant" ),
172+ "method" : "resolve_integer_details" ,
173+ "default_value" : 1 ,
174+ },
175+ {"reason" : "TARGETING_MATCH" , "variant" : "target_variant" , "value" : 0 },
187176 ),
188177 (
189- {"default_variant" : {}, "target_variant" : {}},
190- targeting (),
191- context ("target_variant" ),
192- "resolve_object_details" ,
193- {},
194- "TARGETING_MATCH" ,
195- "target_variant" ,
196- {},
178+ {
179+ "variants" : {"default_variant" : {}, "target_variant" : {}},
180+ "targeting" : targeting (),
181+ },
182+ {
183+ "context" : context ("target_variant" ),
184+ "method" : "resolve_object_details" ,
185+ "default_value" : {},
186+ },
187+ {"reason" : "TARGETING_MATCH" , "variant" : "target_variant" , "value" : {}},
197188 ),
198189 ],
199190 ids = [
@@ -210,21 +201,18 @@ def test_resolve_boolean_details_invalid_variant(resolver, flag):
210201def test_resolver_details (
211202 resolver ,
212203 flag ,
213- variants ,
214- targeting ,
215- context ,
216- method ,
217- default_value ,
218- expected_reason ,
219- expected_variant ,
220- expected_value ,
204+ input_config ,
205+ resolve_config ,
206+ expected ,
221207):
222- flag .variants = variants
223- flag .targeting = targeting
208+ flag .variants = input_config [ " variants" ]
209+ flag .targeting = input_config [ " targeting" ]
224210 resolver .flag_store .get_flag = Mock (return_value = flag )
225211
226- result = getattr (resolver , method )("flag" , default_value , context )
212+ result = getattr (resolver , resolve_config ["method" ])(
213+ "flag" , resolve_config ["default_value" ], resolve_config ["context" ]
214+ )
227215
228- assert result .reason == expected_reason
229- assert result .variant == expected_variant
230- assert result .value == expected_value
216+ assert result .reason == expected [ "reason" ]
217+ assert result .variant == expected [ "variant" ]
218+ assert result .value == expected [ "value" ]
0 commit comments