From 255690d78e77f93bd3f63354e679e1aa7765eb53 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Tue, 16 May 2023 14:48:56 -0400 Subject: [PATCH] Catch changes to test group (#4802) # Catch changes to test group Add test to catch changes to test group. --- pyproject.toml | 3 ++ tests/unit_tests/test_depedencies.py | 42 ++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9be1a87f..cdaa0121 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,6 +104,9 @@ linkchecker = "^10.2.1" sphinx-copybutton = "^0.5.1" [tool.poetry.group.test.dependencies] +# The only dependencies that should be added are +# dependencies used for running tests (e.g., pytest, freezegun, response). +# Any dependencies that do not meet that criteria will be removed. pytest = "^7.3.0" pytest-cov = "^4.0.0" pytest-dotenv = "^0.5.2" diff --git a/tests/unit_tests/test_depedencies.py b/tests/unit_tests/test_depedencies.py index 97e9fe14..36f73eb8 100644 --- a/tests/unit_tests/test_depedencies.py +++ b/tests/unit_tests/test_depedencies.py @@ -1,6 +1,8 @@ """A unit test meant to catch accidental introduction of non-optional dependencies.""" from pathlib import Path +from typing import Any, Dict, Mapping +import pytest import toml HERE = Path(__file__).parent @@ -8,17 +10,21 @@ HERE = Path(__file__).parent PYPROJECT_TOML = HERE / "../../pyproject.toml" -def test_required_dependencies() -> None: +@pytest.fixture() +def poetry_conf() -> Dict[str, Any]: + """Load the pyproject.toml file.""" + with open(PYPROJECT_TOML) as f: + return toml.load(f)["tool"]["poetry"] + + +def test_required_dependencies(poetry_conf: Mapping[str, Any]) -> None: """A test that checks if a new non-optional dependency is being introduced. If this test is triggered, it means that a contributor is trying to introduce a new required dependency. This should be avoided in most situations. """ - with open(PYPROJECT_TOML) as f: - pyproject = toml.load(f) - # Get the dependencies from the [tool.poetry.dependencies] section - dependencies = pyproject["tool"]["poetry"]["dependencies"] + dependencies = poetry_conf["dependencies"] required_dependencies = [ package_name @@ -40,3 +46,29 @@ def test_required_dependencies() -> None: "requests", "tenacity", ] + + +def test_test_group_dependencies(poetry_conf: Mapping[str, Any]) -> None: + """Check if someone is attempting to add additional test dependencies. + + Only dependencies associated with test running infrastructure should be added + to the test group; e.g., pytest, pytest-cov etc. + + Examples of dependencies that should NOT be included: boto3, azure, postgres, etc. + """ + + test_group_deps = sorted(poetry_conf["group"]["test"]["dependencies"]) + + assert test_group_deps == [ + "duckdb-engine", # Should be removed + "freezegun", + "lark", # Should be removed + "pytest", + "pytest-asyncio", + "pytest-cov", + "pytest-dotenv", + "pytest-mock", + "pytest-socket", + "pytest-watcher", + "responses", + ]