Skip to content

Commit eb59786

Browse files
chrfwowgruebel
authored andcommitted
feat: Update test harness (add assertions) #1467 (#415)
* Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> * fixup! Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> * fixup! Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> * fixup! Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> * fixup! Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> * fixup! Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> * fixup! Update test harness (add assertions) #1467 Signed-off-by: christian.lutnik <[email protected]> --------- Signed-off-by: christian.lutnik <[email protected]> Co-authored-by: Anton Grübel <[email protected]> Signed-off-by: leohoare <[email protected]>
1 parent 9d9d8be commit eb59786

File tree

4 files changed

+80
-0
lines changed

4 files changed

+80
-0
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[submodule "test-harness"]
22
path = test-harness
33
url = https://github.com/open-feature/test-harness.git
4+
[submodule "spec"]
5+
path = spec
6+
url = https://github.com/open-feature/spec.git

tests/features/data.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,16 @@ def context_func(flag: InMemoryFlag, evaluation_context: EvaluationContext):
6969
variants={"one": "uno", "two": "dos"},
7070
default_variant="one",
7171
),
72+
"metadata-flag": InMemoryFlag(
73+
state=InMemoryFlag.State.ENABLED,
74+
default_variant="on",
75+
variants={"on": True, "off": False},
76+
context_evaluator=None,
77+
flag_metadata={
78+
"string": "1.0.2",
79+
"integer": 2,
80+
"float": 0.1,
81+
"boolean": True,
82+
},
83+
),
7284
}

tests/features/steps/flag_steps.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from behave import given, when
2+
3+
4+
@given('a {flag_type}-flag with key "{flag_key}" and a default value "{default_value}"')
5+
def step_impl_flag(context, flag_type: str, flag_key, default_value):
6+
context.flag = (flag_type, flag_key, default_value)
7+
8+
9+
@when("the flag was evaluated with details")
10+
def step_impl_evaluation(context):
11+
client = context.client
12+
flag_type, key, default_value = context.flag
13+
if flag_type.lower() == "string":
14+
context.evaluation = client.get_string_details(key, default_value)
15+
elif flag_type.lower() == "boolean":
16+
context.evaluation = client.get_boolean_details(key, default_value)
17+
elif flag_type.lower() == "object":
18+
context.evaluation = client.get_object_details(key, default_value)
19+
elif flag_type.lower() == "float":
20+
context.evaluation = client.get_float_details(key, default_value)
21+
elif flag_type.lower() == "integer":
22+
context.evaluation = client.get_integer_details(key, default_value)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from behave import given, then
2+
3+
from openfeature.api import get_client, set_provider
4+
from openfeature.provider.in_memory_provider import InMemoryProvider
5+
from tests.features.data import IN_MEMORY_FLAGS
6+
7+
8+
@given("a stable provider")
9+
def step_impl_stable_provider(context):
10+
set_provider(InMemoryProvider(IN_MEMORY_FLAGS))
11+
context.client = get_client()
12+
13+
14+
@then('the resolved metadata value "{key}" should be "{value}"')
15+
def step_impl_check_metadata(context, key, value):
16+
assert context.evaluation.flag_metadata[key] == value
17+
18+
19+
@then("the resolved metadata is empty")
20+
def step_impl_empty_metadata(context):
21+
assert not context.evaluation.flag_metadata
22+
23+
24+
@then("the resolved metadata should contain")
25+
def step_impl_metadata_contains(context):
26+
for row in context.table:
27+
key, metadata_type, value = row
28+
29+
assert context.evaluation.flag_metadata[
30+
key
31+
] == convert_value_from_metadata_type(value, metadata_type)
32+
33+
34+
def convert_value_from_metadata_type(value, metadata_type):
35+
if value == "None":
36+
return None
37+
if metadata_type.lower() == "boolean":
38+
return bool(value)
39+
elif metadata_type.lower() == "integer":
40+
return int(value)
41+
elif metadata_type.lower() == "float":
42+
return float(value)
43+
return value

0 commit comments

Comments
 (0)