Provide more asserts

This commit is contained in:
Fang-Pen Lin
2025-11-07 09:18:49 -08:00
parent e4655532a8
commit dca819615f
+30 -3
View File
@@ -9,6 +9,7 @@ from behave import when
from behave import then from behave import then
import glom import glom
from josepy.jwk import JWKRSA from josepy.jwk import JWKRSA
from josepy import JSONObjectWithFields
from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography import x509 from cryptography import x509
@@ -38,11 +39,14 @@ def replace_vars(payload: dict | list | int | float | str, vars: dict):
return payload return payload
def eval_var(context: Context, var_path: str): def eval_var(context: Context, var_path: str, as_json: bool = True):
parts = var_path.split(".", 1) parts = var_path.split(".", 1)
value = context.vars[parts[0]] value = context.vars[parts[0]]
if len(parts) == 2: if len(parts) == 2:
value = glom.glom(value, parts[1]) value = glom.glom(value, parts[1])
if as_json:
if isinstance(value, JSONObjectWithFields):
value = value.to_json()
return value return value
@@ -173,8 +177,31 @@ def step_impl(context: Context, var_path: str, query: str):
assert result, f"{value} does not match {query}" assert result, f"{value} does not match {query}"
@then("the value {var_path} should be {expected}") def match_value_with_jq(context: Context, var_path: str, jq_query: str, expected: str):
value = eval_var(context, var_path)
result = jq.compile(replace_vars(jq_query, context.vars)).input_value(value).first()
expected_value = json.loads(expected)
assert result == expected_value, (
f"{json.dumps(value)!r} with jq {jq_query!r}, the result {json.dumps(result)!r} does not match {json.dumps(expected_value)!r}"
)
@then("the value {var_path} with jq {jq_query} should be equal to json")
def step_impl(context: Context, var_path: str, jq_query: str):
return match_value_with_jq(
context=context, var_path=var_path, jq_query=jq_query, expected=context.text
)
@then("the value {var_path} with jq {jq_query} should be equal to {expected}")
def step_impl(context: Context, var_path: str, jq_query: str, expected: str):
return match_value_with_jq(
context=context, var_path=var_path, jq_query=jq_query, expected=expected
)
@then("the value {var_path} should be equal to {expected}")
def step_impl(context: Context, var_path: str, expected: str): def step_impl(context: Context, var_path: str, expected: str):
value = eval_var(context, var_path) value = eval_var(context, var_path)
expected_value = json.loads(expected) expected_value = json.loads(expected)
assert value == expected_value, f"{value:!r} does not match {expected_value:!r}" assert value == expected_value, f"{value!r} does not match {expected_value!r}"