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

* 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>
This commit is contained in:
chrfwow 2025-01-21 15:11:10 +01:00 committed by GitHub
parent 9304292ea9
commit f559d1b27a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 80 additions and 0 deletions

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "test-harness"] [submodule "test-harness"]
path = test-harness path = test-harness
url = https://github.com/open-feature/test-harness.git url = https://github.com/open-feature/test-harness.git
[submodule "spec"]
path = spec
url = https://github.com/open-feature/spec.git

View File

@ -69,4 +69,16 @@ IN_MEMORY_FLAGS = {
variants={"one": "uno", "two": "dos"}, variants={"one": "uno", "two": "dos"},
default_variant="one", 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,
},
),
} }

View File

@ -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)

View File

@ -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