Catch changes to test group (#4802)

# Catch changes to test group

Add test to catch changes to test group.
This commit is contained in:
Eugene Yurtsev 2023-05-16 14:48:56 -04:00 committed by GitHub
parent c3b6129beb
commit 255690d78e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 5 deletions

View File

@ -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"

View File

@ -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",
]