From 0ea89efce06ec9163a78500119470543e7d0ddca Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Mon, 9 Dec 2024 11:18:26 -0800 Subject: [PATCH] adds incomplete_test_app decorator (#3551) --- conftest.py | 2 ++ tests/test_the_test/test_manifest.py | 2 +- utils/__init__.py | 3 ++- utils/_decorators.py | 24 +++++++++++++++++++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/conftest.py b/conftest.py index 205bf867fee..53729f3fd83 100644 --- a/conftest.py +++ b/conftest.py @@ -178,6 +178,8 @@ def _collect_item_metadata(item): result["testDeclaration"] = "flaky" elif result["details"].startswith("bug"): result["testDeclaration"] = "bug" + elif result["details"].startswith("incomplete_test_app"): + result["testDeclaration"] = "incompleteTestApp" elif result["details"].startswith("missing_feature"): result["testDeclaration"] = "notImplemented" elif "got empty parameter set" in result["details"]: diff --git a/tests/test_the_test/test_manifest.py b/tests/test_the_test/test_manifest.py index 9c641e81dab..0462197ca28 100644 --- a/tests/test_the_test/test_manifest.py +++ b/tests/test_the_test/test_manifest.py @@ -57,7 +57,7 @@ def assert_in(elements, module, nodeid): def assert_valid_declaration(declaration): assert isinstance(declaration, str) - if re.match(r"^(bug|flaky|irrelevant|missing_feature)( \(.+\))?$", declaration): + if re.match(r"^(bug|flaky|irrelevant|missing_feature|incomplete_test_app)( \(.+\))?$", declaration): return # must be a version declaration or semver spec diff --git a/utils/__init__.py b/utils/__init__.py index 7b8ca702ebb..588bd879bca 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -6,7 +6,7 @@ from utils._weblog import weblog from utils._context.core import context from utils._context._scenarios import scenarios -from utils._decorators import bug, irrelevant, missing_feature, rfc, flaky +from utils._decorators import bug, irrelevant, missing_feature, rfc, flaky, incomplete_test_app from utils import interfaces, _remote_config as remote_config from utils.interfaces._core import ValidationError from utils._features import features @@ -17,6 +17,7 @@ "context", "features", "flaky", + "incomplete_test_app", "interfaces", "irrelevant", "missing_feature", diff --git a/utils/_decorators.py b/utils/_decorators.py index b4616fa7eee..7abecf14fd9 100644 --- a/utils/_decorators.py +++ b/utils/_decorators.py @@ -126,6 +126,28 @@ def decorator(function_or_class): return decorator +def incomplete_test_app( + condition: bool = None, library=None, weblog_variant=None, reason=None, force_skip: bool = False +): + """decorator, marks tests that rely on endpoints in test apps that are incomplete or missing""" + + skip = _should_skip(library=library, weblog_variant=weblog_variant, condition=condition) + + def decorator(function_or_class): + + if inspect.isclass(function_or_class): + assert condition is not None or (library is None and weblog_variant is None), _MANIFEST_ERROR_MESSAGE + + if not skip: + return function_or_class + + full_reason = "incomplete_test_app" if reason is None else f"incomplete_test_app ({reason})" + + return _get_expected_failure_item(function_or_class, full_reason, force_skip=force_skip) + + return decorator + + def irrelevant(condition=None, library=None, weblog_variant=None, reason=None): """decorator, allow to mark a test function/class as not relevant""" @@ -229,7 +251,7 @@ def compute_declaration(only_for_library, component_name, declaration, tested_ve assert declaration != "?" # ensure there is no more ? in version declaration - if declaration.startswith(("missing_feature", "bug", "flaky", "irrelevant")): + if declaration.startswith(("missing_feature", "bug", "flaky", "irrelevant", "incomplete_test_app")): return declaration # declaration must be now a version number