Skip to content

Commit

Permalink
feat: Update test harness (add assertions) #1467 (#415)
Browse files Browse the repository at this point in the history
* Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

* fixup! Update test harness (add assertions) #1467

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>

---------

Signed-off-by: christian.lutnik <christian.lutnik@dynatrace.com>
Co-authored-by: Anton Grübel <anton.gruebel@gmail.com>
  • Loading branch information
chrfwow and gruebel authored Jan 21, 2025
1 parent 9304292 commit f559d1b
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 0 deletions.
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

0 comments on commit f559d1b

Please sign in to comment.