Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 52 additions & 33 deletions tests/shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,24 @@ def first(c: Collection[T]) -> T:


def do_entity_test(
rocrate_path: Union[Path, str],
requirement_severity: models.Severity,
expected_validation_result: bool,
expected_triggered_requirements: Optional[list[str]] = None,
expected_triggered_issues: Optional[list[str]] = None,
abort_on_first: bool = False,
profile_identifier: str = DEFAULT_PROFILE_IDENTIFIER,
rocrate_entity_patch: Optional[dict] = None,
skip_checks: Optional[list[str]] = (),
rocrate_relative_root_path: Optional[str] = None,
metadata_only: bool = False,
metadata_dict: Optional[dict] = None
rocrate_path: Union[Path, str],
requirement_severity: models.Severity,
expected_validation_result: bool,
expected_triggered_requirements: Optional[list[str]] = None,
expected_triggered_issues: Optional[list[str]] = None,
abort_on_first: bool = False,
profile_identifier: str = DEFAULT_PROFILE_IDENTIFIER,
rocrate_entity_patch: Optional[dict] = None,
skip_checks: Optional[list[str]] = (),
rocrate_relative_root_path: Optional[str] = None,
metadata_only: bool = False,
metadata_dict: Optional[dict] = None,
**kwargs,
):
"""
Shared function to test a RO-Crate entity
Shared function to test a RO-Crate entity.

Additional keyword arguments (kwargs) are passed along to initialise ValidationSettings.
"""
# declare variables
failed_requirements = None
Expand Down Expand Up @@ -95,23 +98,28 @@ def do_entity_test(
abort_on_first = abort_on_first

# validate RO-Crate
result: models.ValidationResult = \
services.validate(models.ValidationSettings(**{
"rocrate_uri": rocrate_path,
"requirement_severity": requirement_severity,
"abort_on_first": abort_on_first,
"profile_identifier": profile_identifier,
"skip_checks": skip_checks,
"rocrate_relative_root_path": rocrate_relative_root_path,
"metadata_only": metadata_only,
"metadata_dict": metadata_dict
}))
result: models.ValidationResult = services.validate(
models.ValidationSettings(
**{
"rocrate_uri": rocrate_path,
"requirement_severity": requirement_severity,
"abort_on_first": abort_on_first,
"profile_identifier": profile_identifier,
"skip_checks": skip_checks,
"rocrate_relative_root_path": rocrate_relative_root_path,
"metadata_only": metadata_only,
"metadata_dict": metadata_dict,
},
**kwargs,
)
)
logger.debug("Expected validation result: %s", expected_validation_result)

assert result.context is not None, "Validation context should not be None"
f"Expected requirement severity to be {requirement_severity}, but got {result.context.requirement_severity}"
assert result.passed() == expected_validation_result, \
f"RO-Crate should be {'valid' if expected_validation_result else 'invalid'}"
assert (
result.passed() == expected_validation_result
), f"RO-Crate should be {'valid' if expected_validation_result else 'invalid'}"

# check requirement
failed_requirements = [_.name for _ in result.failed_requirements]
Expand All @@ -122,24 +130,35 @@ def do_entity_test(
# check that the expected requirements are triggered
for expected_triggered_requirement in expected_triggered_requirements:
if expected_triggered_requirement not in failed_requirements:
assert False, f"The expected requirement " \
f"\"{expected_triggered_requirement}\" was not found in the failed requirements"
assert False, (
f"The expected requirement "
f'"{expected_triggered_requirement}" was not found in the failed requirements'
)

# check requirement issues
detected_issues = [issue.message for issue in result.get_issues(requirement_severity)
if issue.message is not None]
detected_issues = [
issue.message
for issue in result.get_issues(requirement_severity)
if issue.message is not None
]
logger.debug("Detected issues: %s", detected_issues)
logger.debug("Expected issues: %s", expected_triggered_issues)
for expected_issue in expected_triggered_issues:
if not any(expected_issue in issue for issue in detected_issues): # support partial match
assert False, f"The expected issue \"{expected_issue}\" was not found in the detected issues"
if not any(
expected_issue in issue for issue in detected_issues
): # support partial match
assert (
False
), f'The expected issue "{expected_issue}" was not found in the detected issues'
except Exception as e:
if logger.isEnabledFor(logging.DEBUG):
logger.exception(e)
logger.debug("Failed to validate RO-Crate @ path: %s", rocrate_path)
logger.debug("Requirement severity: %s", requirement_severity)
logger.debug("Expected validation result: %s", expected_validation_result)
logger.debug("Expected triggered requirements: %s", expected_triggered_requirements)
logger.debug(
"Expected triggered requirements: %s", expected_triggered_requirements
)
logger.debug("Expected triggered issues: %s", expected_triggered_issues)
logger.debug("Failed requirements: %s", failed_requirements)
logger.debug("Detected issues: %s", detected_issues)
Expand Down