Skip to content
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,6 @@ jobs:

- name: Validate pre-commit hook
run: pre-commit try-repo . docstringify

- name: Run tests
run: pytest
20 changes: 20 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,26 @@ lint.isort.known-first-party = [
[tool.codespell]
ignore-regex = 'https://([\w/\.])+'

[tool.pytest.ini_options]
filterwarnings = [ "error" ]
addopts = [
"-ra",
"-l",
"-v",
"--tb=short",
"--import-mode=importlib",
"--strict-markers",
"--strict-config",
"--cov=docstringify",
"--cov=tests",
"--no-cov-on-fail",
"--cov-report=term-missing",
]
xfail_strict = true
testpaths = [
"tests",
]

[tool.numpydoc_validation]
checks = [
"all", # report on all checks
Expand Down
1 change: 1 addition & 0 deletions tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Test suite for Docstringify."""
39 changes: 39 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"""Shared test fixtures."""

from collections import namedtuple
from textwrap import dedent

import pytest

EXAMPLE_MODULE_NAME = 'example_module'
EXAMPLE_FUNCTION_NAME = 'function'

DocstringifyTestCase = namedtuple(
'DocstringifyTestCase', ('file', 'total_docstrings', 'missing_docstrings')
)


@pytest.fixture
def function_without_args(tmp_path):
"""
Fixture for generating an example module with a function without args, type
annotations, or a docstring.
"""
source_code = dedent(
f"""
def {EXAMPLE_FUNCTION_NAME}():
pass
"""
)

tmp_file = tmp_path / f'{EXAMPLE_MODULE_NAME}.py'
tmp_file.write_text(source_code)

return DocstringifyTestCase(
file=tmp_file,
total_docstrings=2,
missing_docstrings=[
EXAMPLE_MODULE_NAME,
f'{EXAMPLE_MODULE_NAME}.{EXAMPLE_FUNCTION_NAME}',
],
)
1 change: 1 addition & 0 deletions tests/traversal/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Tests for the docstringify.traversal subpackage."""
23 changes: 23 additions & 0 deletions tests/traversal/test_visitor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"""Test the docstring.traversal.visitor module."""

import pytest

from docstringify.traversal import DocstringVisitor


class TestDocstringVisitor:
"""Test the DocstringVisitor."""

@pytest.mark.parametrize('file', ['function_without_args'])
def test_process_file(self, capsys, request, file):
"""Test that DocstringVisitor.process_file() correctly processes files."""
test_case = request.getfixturevalue(file)
visitor = DocstringVisitor(test_case.file)
visitor.process_file()

assert visitor.docstrings_inspected == test_case.total_docstrings
assert len(visitor.missing_docstrings) == len(test_case.missing_docstrings)

stderr = capsys.readouterr().err.strip().split('\n')
for missing_docstring in test_case.missing_docstrings:
assert f'{missing_docstring} is missing a docstring' in stderr
Loading