Skip to content

Commit

Permalink
maint: improves between.py and length.py
Browse files Browse the repository at this point in the history
- follows google's python style guide for docstrings
- adds `flake8-docstrings` as dev dependency
- update `README`'s workflow badge
- improves `between.py` and `length.py` scripts
- adapts associated test cases as well
- makes `_extremes.py` a private module
  • Loading branch information
yozachar committed Feb 16, 2023
1 parent 899dd78 commit eec1d66
Show file tree
Hide file tree
Showing 16 changed files with 442 additions and 278 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ True
- [Issue Tracker](http://github.com/kvesteri/validators/issues)
- [Code](http://github.com/kvesteri/validators/)

[bs-badge]: https://github.com/kvesteri/validators/workflows/GH/badge.svg
[bs-link]: https://github.com/kvesteri/validators/actions/workflows/main.yml
[bs-badge]: https://github.com/python-validators/validators/actions/workflows/main.yml/badge.svg
[bs-link]: https://github.com/python-validators/validators/actions/workflows/main.yml
[vs-badge]: https://img.shields.io/pypi/v/validators.svg
[vs-link]: https://pypi.python.org/pypi/validators/
[dw-badge]: https://img.shields.io/pypi/dm/validators.svg
Expand Down
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ Resources
- `Code <http://github.com/kvesteri/validators/>`_


.. |Build Status| image:: https://github.com/kvesteri/validators/workflows/GH/badge.svg
:target: https://github.com/kvesteri/validators/actions/workflows/main.yml
.. |Build Status| image:: https://github.com/python-validators/validators/actions/workflows/main.yml/badge.svg
:target: https://github.com/python-validators/validators/actions/workflows/main.yml
.. |Version Status| image:: https://img.shields.io/pypi/v/validators.svg
:target: https://pypi.python.org/pypi/validators/
.. |Downloads| image:: https://img.shields.io/pypi/dm/validators.svg
Expand Down
48 changes: 47 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ python = "^3.9"
bandit = "^1.7.4"
black = "^23.1.0"
flake8 = "^6.0.0"
flake8-docstrings = "^1.7.0"
pyright = "^1.1.293"
pytest = "^7.2.1"
setuptools = "^67.2.0"
Expand Down
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

[flake8]
max-line-length = 100
docstring-convention = google

# [isort]
# known_first_party = sqlalchemy_utils,tests
Expand Down
57 changes: 57 additions & 0 deletions tests/test__extremes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
"""Test Extremes."""
# -*- coding: utf-8 -*-

# standard
from typing import Any

# external
import pytest

# project
from validators._extremes import AbsMax, AbsMin

abs_max = AbsMax()
abs_min = AbsMin()


@pytest.mark.parametrize(
("value",),
[(None,), ("",), (12,), (abs_min,)],
)
def test_abs_max_is_greater_than_every_other_value(value: Any):
"""Test if AbsMax is greater than every other value."""
assert value < abs_max
assert abs_max > value


def test_abs_max_is_not_greater_than_itself():
"""Test if AbsMax is not greater than itself."""
assert not (abs_max > abs_max)


def test_other_comparison_methods_for_abs_max():
"""Test other comparison methods for AbsMax."""
assert abs_max <= abs_max
assert abs_max == abs_max
assert abs_max == abs_max


@pytest.mark.parametrize(
("value",),
[(None,), ("",), (12,), (abs_max,)],
)
def test_abs_min_is_smaller_than_every_other_value(value: Any):
"""Test if AbsMin is less than every other value."""
assert value > abs_min


def test_abs_min_is_not_greater_than_itself():
"""Test if AbsMin is not less than itself."""
assert not (abs_min < abs_min)


def test_other_comparison_methods_for_abs_min():
"""Test other comparison methods for AbsMin."""
assert abs_min <= abs_min
assert abs_min == abs_min
assert abs_min == abs_min
71 changes: 48 additions & 23 deletions tests/test_between.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,58 @@
"""Test Between."""
# -*- coding: utf-8 -*-

# standard
from datetime import datetime
from typing import TypeVar

# external
import pytest

import validators
# project
from validators import between, ValidationFailure


T = TypeVar("T", int, float, str, datetime)

@pytest.mark.parametrize(('value', 'min', 'max'), [
(12, 11, 13),
(12, None, 14),
(12, 11, None),
(12, 12, 12)
])
def test_returns_true_on_valid_range(value, min, max):
assert validators.between(value, min=min, max=max)

@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[(12, 11, 13), (12, None, 14), (12, 11, None), (12, 12, 12)],
)
def test_returns_true_on_valid_range(value: T, min_val: T, max_val: T) -> None:
"""Test returns true on valid range."""
assert between(value, min_val=min_val, max_val=max_val)

@pytest.mark.parametrize(('value', 'min', 'max'), [
(12, 13, 12),
(12, None, None),
])
def test_raises_assertion_error_for_invalid_args(value, min, max):

@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[(12, 13, 12), (12, None, None)],
)
def test_raises_assertion_error_for_invalid_args(value: T, min_val: T, max_val: T) -> None:
"""Test raises assertion error for invalid args."""
with pytest.raises(AssertionError):
assert validators.between(value, min=min, max=max)
assert between(value, min_val=min_val, max_val=max_val)


@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[
(12, "13.5", datetime(1970, 1, 1)),
("12", 20.5, "None"),
(datetime(1970, 1, 1), 20, "string"),
],
)
def test_raises_type_error_for_invalid_args(value: T, min_val: T, max_val: T) -> None:
"""Test raises type error for invalid args."""
with pytest.raises(TypeError):
assert between(value, min_val=min_val, max_val=max_val)


@pytest.mark.parametrize(('value', 'min', 'max'), [
(12, 13, 14),
(12, None, 11),
(12, 13, None)
])
def test_returns_failed_validation_on_invalid_range(value, min, max):
result = validators.between(value, min=min, max=max)
assert isinstance(result, validators.ValidationFailure)
@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[(12, 13, 14), (12, None, 11), (12, 13, None)],
)
def test_returns_failed_validation_on_invalid_range(value: T, min_val: T, max_val: T) -> None:
"""Test returns failed validation on invalid range."""
result = between(value, min_val=min_val, max_val=max_val)
assert isinstance(result, ValidationFailure)
45 changes: 0 additions & 45 deletions tests/test_extremes.py

This file was deleted.

57 changes: 28 additions & 29 deletions tests/test_length.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,36 @@
"""Test Length."""
# -*- coding: utf-8 -*-

# external
import pytest

import validators
# project
from validators import length, ValidationFailure


@pytest.mark.parametrize(('value', 'min', 'max'), [
('password', 2, 10),
('password', None, 10),
('password', 2, None),
('password', 8, 8)
])
def test_returns_true_on_valid_length(value, min, max):
assert validators.length(value, min=min, max=max)
@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[("password", 2, 10), ("password", 0, 10), ("password", 8, 8)],
)
def test_returns_true_on_valid_length(value: str, min_val: int, max_val: int):
"""Test returns true on valid length."""
assert length(value, min_val=min_val, max_val=max_val)


@pytest.mark.parametrize(('value', 'min', 'max'), [
('something', 13, 12),
('something', -1, None),
('something', -1, None),
('something', -3, -2)
])
def test_raises_assertion_error_for_invalid_args(value, min, max):
@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[("something", 14, 12), ("something", -10, -20), ("something", 0, -2)],
)
def test_raises_assertion_error_for_invalid_args(value: str, min_val: int, max_val: int):
"""Test raises assertion error for invalid args."""
with pytest.raises(AssertionError):
assert validators.length(value, min=min, max=max)


@pytest.mark.parametrize(('value', 'min', 'max'), [
('something', 13, 14),
('something', None, 6),
('something', 13, None)
])
def test_returns_failed_validation_on_invalid_range(value, min, max):
assert isinstance(
validators.length(value, min=min, max=max),
validators.ValidationFailure
)
assert length(value, min_val=min_val, max_val=max_val)


@pytest.mark.parametrize(
("value", "min_val", "max_val"),
[("something", 13, 14), ("something", 0, 6), ("something", 14, 20)],
)
def test_returns_failed_validation_on_invalid_range(value: str, min_val: int, max_val: int):
"""Test returns failed validation on invalid range."""
assert isinstance(length(value, min_val=min_val, max_val=max_val), ValidationFailure)
Loading

0 comments on commit eec1d66

Please sign in to comment.