This commit was merged in pull request #16.
This commit is contained in:
@@ -2324,8 +2324,14 @@ class FactorSetRef:
|
|||||||
_fail(ContractErrorCode.INPUT_CLOSURE_VIOLATION, "$.dataset_snapshot_id", "external envelope mismatch")
|
_fail(ContractErrorCode.INPUT_CLOSURE_VIOLATION, "$.dataset_snapshot_id", "external envelope mismatch")
|
||||||
if item["foundation_id"] != foundation.foundation_id or item["pit_cutoff"] != foundation.pit_cutoff:
|
if item["foundation_id"] != foundation.foundation_id or item["pit_cutoff"] != foundation.pit_cutoff:
|
||||||
_fail(ContractErrorCode.INPUT_CLOSURE_VIOLATION, "$.foundation_id", "external Foundation mismatch")
|
_fail(ContractErrorCode.INPUT_CLOSURE_VIOLATION, "$.foundation_id", "external Foundation mismatch")
|
||||||
raw_definition_ids = _array(item["definition_ids"], "$.definition_ids", minimum=1, unique=True)
|
raw_definition_ids = _array(item["definition_ids"], "$.definition_ids", minimum=1)
|
||||||
if set(raw_definition_ids) != {definition.definition_id for definition in definitions}:
|
definition_ids = [
|
||||||
|
_string(definition_id, f"$.definition_ids[{index}]")
|
||||||
|
for index, definition_id in enumerate(raw_definition_ids)
|
||||||
|
]
|
||||||
|
if len(definition_ids) != len(set(definition_ids)):
|
||||||
|
_fail(ContractErrorCode.INVALID_VALUE, "$.definition_ids", "items must be unique")
|
||||||
|
if set(definition_ids) != {definition.definition_id for definition in definitions}:
|
||||||
_fail(ContractErrorCode.INPUT_CLOSURE_VIOLATION, "$.definition_ids", "external definitions mismatch")
|
_fail(ContractErrorCode.INPUT_CLOSURE_VIOLATION, "$.definition_ids", "external definitions mismatch")
|
||||||
raw_views = _array(item["selected_view_ref_ids"], "$.selected_view_ref_ids", minimum=1, unique=True)
|
raw_views = _array(item["selected_view_ref_ids"], "$.selected_view_ref_ids", minimum=1, unique=True)
|
||||||
raw_bindings = _array(item["input_bindings"], "$.input_bindings", minimum=1, unique=True)
|
raw_bindings = _array(item["input_bindings"], "$.input_bindings", minimum=1, unique=True)
|
||||||
|
|||||||
@@ -810,6 +810,56 @@ def test_external_snapshot_definition_and_view_references_cannot_be_substituted(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"invalid_definition_id",
|
||||||
|
[
|
||||||
|
{"unexpected": "object"},
|
||||||
|
["array"],
|
||||||
|
42,
|
||||||
|
True,
|
||||||
|
None,
|
||||||
|
],
|
||||||
|
)
|
||||||
|
def test_factor_set_ref_definition_ids_reject_non_string_types(
|
||||||
|
invalid_definition_id: Any,
|
||||||
|
) -> None:
|
||||||
|
factor_set = _factor_set()
|
||||||
|
definition = _golden_definition()
|
||||||
|
value = factor_set.to_dict()
|
||||||
|
value["definition_ids"] = [definition.definition_id, invalid_definition_id]
|
||||||
|
_reidentify(value, "factor_set_id", "rhfactorsetv1:sha256:")
|
||||||
|
snapshot, foundation = _snapshot_and_foundation()
|
||||||
|
|
||||||
|
with pytest.raises(FactorContractError) as error:
|
||||||
|
FactorSetRef.from_json(
|
||||||
|
canonical_json_bytes(value),
|
||||||
|
definitions=(definition,),
|
||||||
|
dataset_snapshot=snapshot,
|
||||||
|
foundation=foundation,
|
||||||
|
)
|
||||||
|
|
||||||
|
_assert_error(error, ContractErrorCode.TYPE_ERROR, "$.definition_ids[1]")
|
||||||
|
|
||||||
|
|
||||||
|
def test_factor_set_ref_definition_ids_still_reject_duplicate_strings() -> None:
|
||||||
|
factor_set = _factor_set()
|
||||||
|
definition = _golden_definition()
|
||||||
|
value = factor_set.to_dict()
|
||||||
|
value["definition_ids"] = [definition.definition_id, definition.definition_id]
|
||||||
|
_reidentify(value, "factor_set_id", "rhfactorsetv1:sha256:")
|
||||||
|
snapshot, foundation = _snapshot_and_foundation()
|
||||||
|
|
||||||
|
with pytest.raises(FactorContractError) as error:
|
||||||
|
FactorSetRef.from_json(
|
||||||
|
canonical_json_bytes(value),
|
||||||
|
definitions=(definition,),
|
||||||
|
dataset_snapshot=snapshot,
|
||||||
|
foundation=foundation,
|
||||||
|
)
|
||||||
|
|
||||||
|
_assert_error(error, ContractErrorCode.INVALID_VALUE, "$.definition_ids")
|
||||||
|
|
||||||
|
|
||||||
def test_factor_set_parent_requires_exact_identity_and_correlation() -> None:
|
def test_factor_set_parent_requires_exact_identity_and_correlation() -> None:
|
||||||
parent = _factor_set()
|
parent = _factor_set()
|
||||||
child_arguments = _factor_set_arguments()
|
child_arguments = _factor_set_arguments()
|
||||||
|
|||||||
Reference in New Issue
Block a user