diff --git a/src/extensions/score_metamodel/BUILD b/src/extensions/score_metamodel/BUILD index 3ddd80e15..dd991fe03 100644 --- a/src/extensions/score_metamodel/BUILD +++ b/src/extensions/score_metamodel/BUILD @@ -74,16 +74,41 @@ score_pytest( ) score_pytest( - name = "file_based_tests", - size = "medium", + name = "file_based_tests_architecture", srcs = ["tests/test_rules_file_based.py"], - # All requirements already in the library so no need to have it double - data = glob( - [ - "tests/**/*.rst", - "tests/**/*.yaml", - ], - ) + ["tests/rst/conf.py"], + data = glob(["tests/rst/architecture/*.rst"]) + ["tests/rst/conf.py"], + pytest_config = "//:pyproject.toml", + deps = [":score_metamodel"], +) + +score_pytest( + name = "file_based_tests_attributes", + srcs = ["tests/test_rules_file_based.py"], + data = glob(["tests/rst/attributes/*.rst"]) + ["tests/rst/conf.py", "tests/rst/attributes/needs.json"], + pytest_config = "//:pyproject.toml", + deps = [":score_metamodel"], +) + +score_pytest( + name = "file_based_tests_graph", + srcs = ["tests/test_rules_file_based.py"], + data = glob(["tests/rst/graph/*.rst"]) + ["tests/rst/conf.py"], + pytest_config = "//:pyproject.toml", + deps = [":score_metamodel"], +) + +score_pytest( + name = "file_based_tests_id_contains_feature", + srcs = ["tests/test_rules_file_based.py"], + data = glob(["tests/rst/id_contains_feature/*.rst"]) + ["tests/rst/conf.py"], + pytest_config = "//:pyproject.toml", + deps = [":score_metamodel"], +) + +score_pytest( + name = "file_based_tests_options", + srcs = ["tests/test_rules_file_based.py"], + data = glob(["tests/rst/options/*.rst"]) + ["tests/rst/conf.py"], pytest_config = "//:pyproject.toml", deps = [":score_metamodel"], ) diff --git a/src/extensions/score_metamodel/tests/rst/attributes/needs.json b/src/extensions/score_metamodel/tests/rst/attributes/needs.json new file mode 100644 index 000000000..b3f9a83ec --- /dev/null +++ b/src/extensions/score_metamodel/tests/rst/attributes/needs.json @@ -0,0 +1,29 @@ +{ + "current_version": "1.0", + "project": "test", + "project_url": "https://eclipse-score.github.io/process_description/main/", + "versions": { + "1.0": { + "needs": { + "doc_getstrt__req__process": { + "docname": "getting_started", + "id": "doc_getstrt__req__process", + "lineno": 1, + "status": "valid", + "title": "Process requirement (stub for tests)", + "type": "doc_req", + "type_name": "doc_req" + }, + "gd_guidl__req__engineering": { + "docname": "guidelines", + "id": "gd_guidl__req__engineering", + "lineno": 1, + "status": "valid", + "title": "Engineering guideline requirement (stub for tests)", + "type": "gd_req", + "type_name": "gd_req" + } + } + } + } +} diff --git a/src/extensions/score_metamodel/tests/rst/conf.py b/src/extensions/score_metamodel/tests/rst/conf.py index 180333964..d69dd9562 100644 --- a/src/extensions/score_metamodel/tests/rst/conf.py +++ b/src/extensions/score_metamodel/tests/rst/conf.py @@ -21,12 +21,6 @@ "score_metamodel", ] -needs_external_needs = [ - { - "base_url": "https://eclipse-score.github.io/process_description/main/", - "json_url": "https://eclipse-score.github.io/process_description/main/needs.json", - } -] # We add these suppress_warnings here to ease the load of the warnings # In the future we might want to check if ANY warnings comes in the document # And then ensure that we error, as this could also be parsing errors etc. diff --git a/src/extensions/score_metamodel/tests/test_rules_file_based.py b/src/extensions/score_metamodel/tests/test_rules_file_based.py index b80527446..53728e3af 100644 --- a/src/extensions/score_metamodel/tests/test_rules_file_based.py +++ b/src/extensions/score_metamodel/tests/test_rules_file_based.py @@ -287,6 +287,21 @@ def test_rst_files( # Build the documentation with the enabled checks app.config.score_metamodel_checks = rst_data.enabled_checks + + # Replace any network json_url with a local json_path to avoid network I/O in tests + local_needs = RST_DIR / Path(rst_file).parent / "needs.json" + if local_needs.exists(): + shutil.copy(local_needs, app.srcdir) + app.config.needs_external_needs = [ + {k: v for k, v in ext.items() if k != "json_url"} + | {"json_path": "needs.json"} + if "json_url" in ext + else ext + for ext in (app.config.needs_external_needs or []) + ] + else: + app.config.needs_external_needs = [] + app.build() # Collect the warnings