9
9
from openfeature .exception import FlagNotFoundError , ParseError
10
10
11
11
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
23
12
def targeting ():
24
13
return {
25
14
"if" : [
@@ -30,22 +19,31 @@ def targeting():
30
19
}
31
20
32
21
22
+ def context (targeting_key ):
23
+ return EvaluationContext (targeting_key = targeting_key )
24
+
25
+
33
26
@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 ():
35
38
return Flag (
36
39
key = "flag" ,
37
40
state = "ENABLED" ,
38
41
variants = {"default_variant" : False , "target_variant" : True },
39
42
default_variant = "default_variant" ,
40
- targeting = targeting ,
43
+ targeting = targeting () ,
41
44
)
42
45
43
46
44
- @pytest .fixture
45
- def context ():
46
- return EvaluationContext (targeting_key = "target_variant" )
47
-
48
-
49
47
@pytest .fixture
50
48
def resolver (config ):
51
49
config .offline_flag_source_path = "flag.json"
@@ -59,31 +57,6 @@ def resolver(config):
59
57
)
60
58
61
59
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
-
87
60
def test_resolve_boolean_details_flag_not_found (resolver ):
88
61
resolver .flag_store .get_flag = Mock (return_value = None )
89
62
with pytest .raises (FlagNotFoundError ):
@@ -97,8 +70,8 @@ def test_resolve_boolean_details_disabled_flag(flag, resolver):
97
70
result = resolver .resolve_boolean_details ("disabled_flag" , False )
98
71
99
72
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
102
75
103
76
104
77
def test_resolve_boolean_details_invalid_variant (resolver , flag ):
@@ -111,89 +84,107 @@ def test_resolve_boolean_details_invalid_variant(resolver, flag):
111
84
112
85
113
86
@pytest .mark .parametrize (
114
- "variants, targeting,"
115
- "context, method, default_value,"
116
- "expected_reason, expected_variant, expected_value," ,
87
+ "input_config, resolve_config, expected" ,
117
88
[
118
89
(
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 },
127
100
),
128
101
(
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 },
137
112
),
138
113
(
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 },
147
124
),
148
125
(
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
+ },
157
140
),
158
141
(
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 },
167
152
),
168
153
(
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 },
177
164
),
178
165
(
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 },
187
176
),
188
177
(
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" : {}},
197
188
),
198
189
],
199
190
ids = [
@@ -210,21 +201,18 @@ def test_resolve_boolean_details_invalid_variant(resolver, flag):
210
201
def test_resolver_details (
211
202
resolver ,
212
203
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 ,
221
207
):
222
- flag .variants = variants
223
- flag .targeting = targeting
208
+ flag .variants = input_config [ " variants" ]
209
+ flag .targeting = input_config [ " targeting" ]
224
210
resolver .flag_store .get_flag = Mock (return_value = flag )
225
211
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
+ )
227
215
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