Skip to content

Commit 04bac38

Browse files
authored
Merge pull request #225 from joe733/workshop
maint: improves `between` and `length` modules
2 parents dab3a1f + ddccccc commit 04bac38

File tree

10 files changed

+369
-253
lines changed

10 files changed

+369
-253
lines changed

tests/test__extremes.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
"""Test Extremes."""
2+
# -*- coding: utf-8 -*-
3+
4+
# standard
5+
from typing import Any
6+
7+
# external
8+
import pytest
9+
10+
# project
11+
from validators._extremes import AbsMax, AbsMin
12+
13+
abs_max = AbsMax()
14+
abs_min = AbsMin()
15+
16+
17+
@pytest.mark.parametrize(
18+
("value",),
19+
[(None,), ("",), (12,), (abs_min,)],
20+
)
21+
def test_abs_max_is_greater_than_every_other_value(value: Any):
22+
"""Test if AbsMax is greater than every other value."""
23+
assert value < abs_max
24+
assert abs_max > value
25+
26+
27+
def test_abs_max_is_not_greater_than_itself():
28+
"""Test if AbsMax is not greater than itself."""
29+
assert not (abs_max > abs_max)
30+
31+
32+
def test_other_comparison_methods_for_abs_max():
33+
"""Test other comparison methods for AbsMax."""
34+
assert abs_max <= abs_max
35+
assert abs_max == abs_max
36+
assert abs_max == abs_max
37+
38+
39+
@pytest.mark.parametrize(
40+
("value",),
41+
[(None,), ("",), (12,), (abs_max,)],
42+
)
43+
def test_abs_min_is_smaller_than_every_other_value(value: Any):
44+
"""Test if AbsMin is less than every other value."""
45+
assert value > abs_min
46+
47+
48+
def test_abs_min_is_not_greater_than_itself():
49+
"""Test if AbsMin is not less than itself."""
50+
assert not (abs_min < abs_min)
51+
52+
53+
def test_other_comparison_methods_for_abs_min():
54+
"""Test other comparison methods for AbsMin."""
55+
assert abs_min <= abs_min
56+
assert abs_min == abs_min
57+
assert abs_min == abs_min

tests/test_between.py

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,59 @@
1+
"""Test Between."""
12
# -*- coding: utf-8 -*-
3+
4+
# standard
5+
from datetime import datetime
6+
from typing import TypeVar
7+
8+
# external
29
import pytest
310

4-
import validators
11+
# project
12+
from validators import between, ValidationFailure
13+
514

15+
T = TypeVar("T", int, float, str, datetime)
616

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

18+
@pytest.mark.parametrize(
19+
("value", "min_val", "max_val"),
20+
[(12, 11, 13), (12, None, 14), (12, 11, None), (12, 12, 12)],
21+
)
22+
def test_returns_true_on_valid_range(value: T, min_val: T, max_val: T) -> None:
23+
"""Test returns true on valid range."""
24+
assert between(value, min_val=min_val, max_val=max_val)
1625

17-
@pytest.mark.parametrize(('value', 'min', 'max'), [
18-
(12, 13, 12),
19-
(12, None, None),
20-
])
21-
def test_raises_assertion_error_for_invalid_args(value, min, max):
26+
27+
@pytest.mark.parametrize(
28+
("value", "min_val", "max_val"),
29+
[(12, 13, 12), (12, None, None)],
30+
)
31+
def test_raises_assertion_error_for_invalid_args(value: T, min_val: T, max_val: T) -> None:
32+
"""Test raises assertion error for invalid args."""
2233
with pytest.raises(AssertionError):
23-
assert validators.between(value, min=min, max=max)
34+
assert between(value, min_val=min_val, max_val=max_val)
35+
36+
37+
@pytest.mark.parametrize(
38+
("value", "min_val", "max_val"),
39+
[
40+
(12, "13.5", datetime(1970, 1, 1)),
41+
("12", 20.5, "None"),
42+
(datetime(1970, 1, 1), 20, "string"),
43+
(30, 40, "string"),
44+
],
45+
)
46+
def test_raises_type_error_for_invalid_args(value: T, min_val: T, max_val: T) -> None:
47+
"""Test raises type error for invalid args."""
48+
with pytest.raises(TypeError):
49+
assert between(value, min_val=min_val, max_val=max_val)
2450

2551

26-
@pytest.mark.parametrize(('value', 'min', 'max'), [
27-
(12, 13, 14),
28-
(12, None, 11),
29-
(12, 13, None)
30-
])
31-
def test_returns_failed_validation_on_invalid_range(value, min, max):
32-
result = validators.between(value, min=min, max=max)
33-
assert isinstance(result, validators.ValidationFailure)
52+
@pytest.mark.parametrize(
53+
("value", "min_val", "max_val"),
54+
[(12, 13, 14), (12, None, 11), (12, 13, None)],
55+
)
56+
def test_returns_failed_validation_on_invalid_range(value: T, min_val: T, max_val: T) -> None:
57+
"""Test returns failed validation on invalid range."""
58+
result = between(value, min_val=min_val, max_val=max_val)
59+
assert isinstance(result, ValidationFailure)

tests/test_extremes.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

tests/test_length.py

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,36 @@
1+
"""Test Length."""
12
# -*- coding: utf-8 -*-
3+
4+
# external
25
import pytest
36

4-
import validators
7+
# project
8+
from validators import length, ValidationFailure
59

610

7-
@pytest.mark.parametrize(('value', 'min', 'max'), [
8-
('password', 2, 10),
9-
('password', None, 10),
10-
('password', 2, None),
11-
('password', 8, 8)
12-
])
13-
def test_returns_true_on_valid_length(value, min, max):
14-
assert validators.length(value, min=min, max=max)
11+
@pytest.mark.parametrize(
12+
("value", "min_val", "max_val"),
13+
[("password", 2, 10), ("password", 0, 10), ("password", 8, 8)],
14+
)
15+
def test_returns_true_on_valid_length(value: str, min_val: int, max_val: int):
16+
"""Test returns true on valid length."""
17+
assert length(value, min_val=min_val, max_val=max_val)
1518

1619

17-
@pytest.mark.parametrize(('value', 'min', 'max'), [
18-
('something', 13, 12),
19-
('something', -1, None),
20-
('something', -1, None),
21-
('something', -3, -2)
22-
])
23-
def test_raises_assertion_error_for_invalid_args(value, min, max):
20+
@pytest.mark.parametrize(
21+
("value", "min_val", "max_val"),
22+
[("something", 14, 12), ("something", -10, -20), ("something", 0, -2)],
23+
)
24+
def test_raises_assertion_error_for_invalid_args(value: str, min_val: int, max_val: int):
25+
"""Test raises assertion error for invalid args."""
2426
with pytest.raises(AssertionError):
25-
assert validators.length(value, min=min, max=max)
26-
27-
28-
@pytest.mark.parametrize(('value', 'min', 'max'), [
29-
('something', 13, 14),
30-
('something', None, 6),
31-
('something', 13, None)
32-
])
33-
def test_returns_failed_validation_on_invalid_range(value, min, max):
34-
assert isinstance(
35-
validators.length(value, min=min, max=max),
36-
validators.ValidationFailure
37-
)
27+
assert length(value, min_val=min_val, max_val=max_val)
28+
29+
30+
@pytest.mark.parametrize(
31+
("value", "min_val", "max_val"),
32+
[("something", 13, 14), ("something", 0, 6), ("something", 14, 20)],
33+
)
34+
def test_returns_failed_validation_on_invalid_range(value: str, min_val: int, max_val: int):
35+
"""Test returns failed validation on invalid range."""
36+
assert isinstance(length(value, min_val=min_val, max_val=max_val), ValidationFailure)

tests/test_validation_failure.py

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,35 @@
1-
import validators
1+
"""Test validation Failure."""
2+
# -*- coding: utf-8 -*-
23

3-
obj_repr = (
4-
"ValidationFailure(func=between"
5-
)
4+
# project
5+
from validators import between
66

77

8-
class TestValidationFailure(object):
9-
def setup_method(self, method):
10-
self.obj = validators.between(3, min=4, max=5)
8+
failed_obj_repr = "ValidationFailure(func=between"
9+
10+
11+
class TestValidationFailure:
12+
"""Test validation Failure."""
13+
14+
def setup_method(self):
15+
"""Setup Method."""
16+
self.is_in_between = between(3, min_val=4, max_val=5)
1117

1218
def test_boolean_coerce(self):
13-
assert not bool(self.obj)
14-
assert not self.obj
19+
"""Test Boolean."""
20+
assert not bool(self.is_in_between)
21+
assert not self.is_in_between
1522

1623
def test_repr(self):
17-
assert obj_repr in repr(self.obj)
24+
"""Test Repr."""
25+
assert failed_obj_repr in repr(self.is_in_between)
1826

19-
def test_unicode(self):
20-
assert obj_repr in str(self.obj)
27+
def test_string(self):
28+
"""Test Repr."""
29+
assert failed_obj_repr in str(self.is_in_between)
2130

2231
def test_arguments_as_properties(self):
23-
assert self.obj.value == 3
24-
assert self.obj.min == 4
25-
assert self.obj.max == 5
32+
"""Test argument properties."""
33+
assert self.is_in_between.__dict__["value"] == 3
34+
assert self.is_in_between.__dict__["min_val"] == 4
35+
assert self.is_in_between.__dict__["max_val"] == 5

validators/__init__.py

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
1+
"""Validate Anything!"""
2+
# -*- coding: utf-8 -*-
3+
# from ._extremes import AbsMax, AbsMin
4+
15
from .between import between
26
from .btc_address import btc_address
3-
from .card import (
4-
amex,
5-
card_number,
6-
diners,
7-
discover,
8-
jcb,
9-
mastercard,
10-
unionpay,
11-
visa
12-
)
7+
from .card import amex, card_number, diners, discover, jcb, mastercard, unionpay, visa
138
from .domain import domain
149
from .email import email
15-
from .extremes import Max, Min
1610
from .hashes import md5, sha1, sha224, sha256, sha512
1711
from .i18n import fi_business_id, fi_ssn
1812
from .iban import iban
@@ -25,11 +19,41 @@
2519
from .utils import ValidationFailure, validator
2620
from .uuid import uuid
2721

28-
__all__ = ('between', 'domain', 'email', 'Max', 'Min', 'md5', 'sha1', 'sha224',
29-
'sha256', 'sha512', 'fi_business_id', 'fi_ssn', 'iban', 'ipv4',
30-
'ipv4_cidr', 'ipv6', 'ipv6_cidr', 'length', 'mac_address', 'slug',
31-
'truthy', 'url', 'ValidationFailure', 'validator', 'uuid',
32-
'card_number', 'visa', 'mastercard', 'amex', 'unionpay', 'diners',
33-
'jcb', 'discover', 'btc_address')
22+
__all__ = (
23+
"amex",
24+
"between",
25+
"btc_address",
26+
"card_number",
27+
"diners",
28+
"discover",
29+
"domain",
30+
"email",
31+
"fi_business_id",
32+
"fi_ssn",
33+
"iban",
34+
"ipv4_cidr",
35+
"ipv4",
36+
"ipv6_cidr",
37+
"ipv6",
38+
"jcb",
39+
"length",
40+
"mac_address",
41+
"mastercard",
42+
# "AbsMax",
43+
"md5",
44+
# "AbsMax",
45+
"sha1",
46+
"sha224",
47+
"sha256",
48+
"sha512",
49+
"slug",
50+
"truthy",
51+
"unionpay",
52+
"url",
53+
"uuid",
54+
"ValidationFailure",
55+
"validator",
56+
"visa",
57+
)
3458

35-
__version__ = '0.20.0'
59+
__version__ = "0.20.0"

0 commit comments

Comments
 (0)