Add more tests
This commit is contained in:
parent
99e7b40535
commit
2b0b71cb08
7 changed files with 194 additions and 5 deletions
45
tests/test_manage.py
Normal file
45
tests/test_manage.py
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
import types
|
||||
from typing import Never
|
||||
|
||||
import pytest
|
||||
|
||||
import manage
|
||||
|
||||
|
||||
def test_main_importerror(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""Test main raises ImportError if django cannot be imported."""
|
||||
monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "")
|
||||
|
||||
def import_fail(*args, **kwargs) -> Never:
|
||||
msg = "No Django"
|
||||
raise ImportError(msg)
|
||||
|
||||
monkeypatch.setitem(sys.modules, "django.core.management", None)
|
||||
monkeypatch.setattr("builtins.__import__", import_fail)
|
||||
with pytest.raises(ImportError) as excinfo:
|
||||
manage.main()
|
||||
assert "Couldn't import Django" in str(excinfo.value)
|
||||
|
||||
|
||||
def test_main_executes_command(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""Test main calls execute_from_command_line with sys.argv."""
|
||||
called: dict[str, list[str]] = {}
|
||||
|
||||
def fake_execute(argv: list[str]) -> None:
|
||||
called["argv"] = argv
|
||||
|
||||
fake_module = types.SimpleNamespace(execute_from_command_line=fake_execute)
|
||||
monkeypatch.setenv("DJANGO_SETTINGS_MODULE", "")
|
||||
monkeypatch.setitem(sys.modules, "django.core.management", fake_module)
|
||||
original_import = __import__
|
||||
monkeypatch.setattr(
|
||||
"builtins.__import__",
|
||||
lambda name, *a, **kw: fake_module if name == "django.core.management" else original_import(name, *a, **kw),
|
||||
)
|
||||
test_argv: list[str] = ["manage.py", "check"]
|
||||
monkeypatch.setattr(sys, "argv", test_argv)
|
||||
manage.main()
|
||||
assert called["argv"] == test_argv
|
||||
Loading…
Add table
Add a link
Reference in a new issue