Skip to content

Commit

Permalink
test: add tests for namespaced package
Browse files Browse the repository at this point in the history
  • Loading branch information
mkniewallner committed Aug 10, 2024
1 parent 0a23227 commit 3c443b0
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/data/project_using_namespace/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
Empty file.
7 changes: 7 additions & 0 deletions tests/data/project_using_namespace/foo/database/bar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from os import chdir, walk
from pathlib import Path

import flake8
import white as w

from foo import api
17 changes: 17 additions & 0 deletions tests/data/project_using_namespace/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[project]
# PEP 621 project metadata
# See https://www.python.org/dev/peps/pep-0621/
name = "foo"
version = "1.2.3"
requires-python = ">=3.7"
dependencies = ["tomli==2.0.1"]

[project.optional-dependencies]
dev = ["flake8==7.1.1"]

[build-system]
requires = ["setuptools>=61.0.0"]
build-backend = "setuptools.build_meta"

[tool.deptry]
pep621_dev_dependency_groups = ["dev"]
70 changes: 70 additions & 0 deletions tests/functional/cli/test_cli_namespace.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from __future__ import annotations

import uuid
from pathlib import Path
from typing import TYPE_CHECKING

import pytest

from tests.functional.utils import Project
from tests.utils import get_issues_report

if TYPE_CHECKING:
from tests.utils import PipVenvFactory


@pytest.mark.xdist_group(name=Project.NAMESPACE)
def test_cli_with_namespace(pip_venv_factory: PipVenvFactory) -> None:
with pip_venv_factory(Project.NAMESPACE) as virtual_env:
issue_report = f"{uuid.uuid4()}.json"
result = virtual_env.run(f"deptry . --experimental-namespace-package -o {issue_report}")

assert result.returncode == 1
assert get_issues_report(Path(issue_report)) == [
{
"error": {"code": "DEP004", "message": "'flake8' imported but declared as a dev dependency"},
"module": "flake8",
"location": {"file": str(Path("foo/database/bar.py")), "line": 4, "column": 8},
},
{
"error": {"code": "DEP001", "message": "'white' imported but missing from the dependency definitions"},
"module": "white",
"location": {"file": str(Path("foo/database/bar.py")), "line": 5, "column": 8},
},
{
"error": {"code": "DEP002", "message": "'tomli' defined as a dependency but not used in the codebase"},
"module": "tomli",
"location": {"file": str(Path("pyproject.toml")), "line": None, "column": None},
},
]


@pytest.mark.xdist_group(name=Project.NAMESPACE)
def test_cli_with_namespace_without_experimental_flag(pip_venv_factory: PipVenvFactory) -> None:
with pip_venv_factory(Project.NAMESPACE) as virtual_env:
issue_report = f"{uuid.uuid4()}.json"
result = virtual_env.run(f"deptry . -o {issue_report}")

assert result.returncode == 1
assert get_issues_report(Path(issue_report)) == [
{
"error": {"code": "DEP004", "message": "'flake8' imported but declared as a dev dependency"},
"module": "flake8",
"location": {"file": str(Path("foo/database/bar.py")), "line": 4, "column": 8},
},
{
"error": {"code": "DEP001", "message": "'white' imported but missing from the dependency definitions"},
"module": "white",
"location": {"file": str(Path("foo/database/bar.py")), "line": 5, "column": 8},
},
{
"error": {"code": "DEP003", "message": "'foo' imported but it is a transitive dependency"},
"module": "foo",
"location": {"file": "foo/database/bar.py", "line": 7, "column": 1},
},
{
"error": {"code": "DEP002", "message": "'tomli' defined as a dependency but not used in the codebase"},
"module": "tomli",
"location": {"file": str(Path("pyproject.toml")), "line": None, "column": None},
},
]
1 change: 1 addition & 0 deletions tests/functional/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class Project(str, Enum):
FUTURE_DEPRECATED_OBSOLETE_ARGUMENT = "project_with_future_deprecated_obsolete_argument"
GITIGNORE = "project_with_gitignore"
MULTIPLE_SOURCE_DIRECTORIES = "project_with_multiple_source_directories"
NAMESPACE = "project_using_namespace"
PDM = "project_with_pdm"
POETRY = "project_with_poetry"
PYPROJECT_DIFFERENT_DIRECTORY = "project_with_pyproject_different_directory"
Expand Down

0 comments on commit 3c443b0

Please sign in to comment.