Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Update test harness (add assertions) #1467 #415

Merged
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[submodule "test-harness"]
path = test-harness
url = https://github.com/open-feature/test-harness.git
[submodule "spec"]
path = spec
url = https://github.com/open-feature/spec.git
12 changes: 12 additions & 0 deletions tests/features/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,16 @@ def context_func(flag: InMemoryFlag, evaluation_context: EvaluationContext):
variants={"one": "uno", "two": "dos"},
default_variant="one",
),
"metadata-flag": InMemoryFlag(
state=InMemoryFlag.State.ENABLED,
default_variant="on",
variants={"on": True, "off": False},
context_evaluator=None,
flag_metadata={
"string": "1.0.2",
"integer": 2,
"float": 0.1,
"boolean": True,
},
),
}
22 changes: 22 additions & 0 deletions tests/features/steps/flag_steps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from behave import given, when


@given('a {flag_type}-flag with key "{flag_key}" and a default value "{default_value}"')
def step_impl_flag(context, flag_type: str, flag_key, default_value):
context.flag = (flag_type, flag_key, default_value)


@when("the flag was evaluated with details")
def step_impl_evaluation(context):
client = context.client
flag_type, key, default_value = context.flag
if flag_type.lower() == "string":
context.evaluation = client.get_string_details(key, default_value)
elif flag_type.lower() == "boolean":
context.evaluation = client.get_boolean_details(key, default_value)
elif flag_type.lower() == "object":
context.evaluation = client.get_object_details(key, default_value)
elif flag_type.lower() == "float":
context.evaluation = client.get_float_details(key, default_value)
elif flag_type.lower() == "integer":
context.evaluation = client.get_integer_details(key, default_value)
43 changes: 43 additions & 0 deletions tests/features/steps/metadata_steps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from behave import given, then

from openfeature.api import get_client, set_provider
from openfeature.provider.in_memory_provider import InMemoryProvider
from tests.features.data import IN_MEMORY_FLAGS


@given("a stable provider")
def step_impl_stable_provider(context):
set_provider(InMemoryProvider(IN_MEMORY_FLAGS))
context.client = get_client()


@then('the resolved metadata value "{key}" should be "{value}"')
def step_impl_check_metadata(context, key, value):
assert context.evaluation.flag_metadata[key] == value


@then("the resolved metadata is empty")
def step_impl_empty_metadata(context):
assert not context.evaluation.flag_metadata


@then("the resolved metadata should contain")
def step_impl_metadata_contains(context):
for row in context.table:
key, metadata_type, value = row

assert context.evaluation.flag_metadata[
key
] == convert_value_from_metadata_type(value, metadata_type)


def convert_value_from_metadata_type(value, metadata_type):
if value == "None":
return None
if metadata_type.lower() == "boolean":
return bool(value)
elif metadata_type.lower() == "integer":
return int(value)
elif metadata_type.lower() == "float":
return float(value)
return value
Loading