Compare commits

...

1 Commits

Author SHA1 Message Date
Lila
5cf242c8af Fix awxkit tox test failure caused by root pytest.ini config bleed
Forward-port of ansible/tower#7537 for the devel branch.

When running awxkit's tox tests, pytest picks up the root pytest.ini
which pulls in pytest-django options (--reuse-db, --nomigrations,
DJANGO_SETTINGS_MODULE) and Django-specific filterwarnings.  Since the
awxkit tox environment does not install Django or pytest-django, these
cause test collection to fail.

The root cause is that pytest.ini has absolute priority in pytest's
config discovery — it searches all ancestor directories for pytest.ini
before falling back to tox.ini's [pytest] section.  A [pytest] section
in awxkit/tox.ini alone cannot prevent the root config from being used.

Fix by:
- Adding awxkit/pytest.ini to act as the primary config boundary
  (pytest.ini has the highest priority in config discovery, so its
  presence in awxkit/ stops the upward search before reaching root)
- Adding explicit `test` path argument to the pytest command in
  awxkit/tox.ini so pytest discovers tests correctly
- Adding `testpaths` and `python_files` to the [pytest] section in
  awxkit/tox.ini as a secondary config boundary
- Adding awxkit/conftest.py that registers the Django-specific CLI
  options and INI keys as harmless no-ops, as a further safety net

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-24 09:40:26 -04:00
3 changed files with 28 additions and 1 deletions

16
awxkit/conftest.py Normal file
View File

@@ -0,0 +1,16 @@
# This conftest registers pytest-django CLI options and INI keys as harmless
# no-ops so that the awxkit tox environment (which does not install Django or
# pytest-django) does not crash when the root pytest.ini config leaks through.
#
# Root pytest.ini contains settings like --reuse-db, --nomigrations, and
# DJANGO_SETTINGS_MODULE that are only meaningful for Django tests. Placing
# this conftest at the awxkit/ level ensures it is loaded before argument
# parsing regardless of which config file pytest ultimately selects.
def pytest_addoption(parser):
group = parser.getgroup("awxkit-compat", "awxkit tox compatibility shims")
group.addoption("--reuse-db", action="store_true", default=False, help="(no-op in awxkit) pytest-django compat")
group.addoption("--nomigrations", action="store_true", default=False, help="(no-op in awxkit) pytest-django compat")
group.addoption("--create-db", action="store_true", default=False, help="(no-op in awxkit) pytest-django compat")
parser.addini("DJANGO_SETTINGS_MODULE", help="(no-op in awxkit) pytest-django compat", default="")

9
awxkit/pytest.ini Normal file
View File

@@ -0,0 +1,9 @@
[pytest]
addopts = -v --tb=native
testpaths = test
python_files = test_*.py
filterwarnings =
error
junit_family=xunit2

View File

@@ -19,7 +19,7 @@ deps =
pytest-mock pytest-mock
commands = commands =
coverage run --parallel --source awxkit -m pytest --doctest-glob='*.md' --junit-xml=report.xml {posargs} coverage run --parallel --source awxkit -m pytest -c pytest.ini test --doctest-glob='*.md' --junit-xml=report.xml {posargs}
coverage combine coverage combine
coverage xml coverage xml
@@ -44,6 +44,8 @@ max-line-length = 120
[pytest] [pytest]
addopts = -v --tb=native addopts = -v --tb=native
testpaths = test
python_files = test_*.py
filterwarnings = filterwarnings =
error error