summaryrefslogtreecommitdiff
path: root/day9/task5_vue/tests/test_db_validators.py
blob: b83fcf104ac146ed55a55149909e2a91a66c88d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from backend.database.validators import (
    ValidateNull, ValidateType, ValidateTime,
    ValidateDatetime, ValidateDate, ValidateLength,
    ValidationError
)
from backend.database.field_types import (
    TextField, IntegerField,
    DatetimeField, DateField, TimeField
)

import pytest


def test_validate_null():
    field1 = IntegerField(None, nullable=False, is_auto_increment=False)
    field2 = IntegerField(None, nullable=True, is_auto_increment=False)

    with pytest.raises(ValidationError):
        ValidateNull.validate(None, field1)

    assert ValidateNull.validate(None, field2) is None


def test_validate_type():
    text1 = TextField(10, True, nullable=False)
    text2 = TextField(10, True, nullable=True)

    with pytest.raises(ValidationError):
        ValidateType.validate(None, text1)

    with pytest.raises(ValidationError):
        ValidateType.validate(12, text1)

    with pytest.raises(ValidationError):
        ValidateType.validate({1, 2, 3}, text1)

    with pytest.raises(ValidationError):
        ValidateType.validate({1: 2}, text1)

    assert ValidateType.validate('123', text1) is None
    assert ValidateType.validate(None, text2) is None


def test_validate_length():
    text1 = TextField(10, is_variable_length=True, nullable=False)
    text2 = TextField(10, is_variable_length=False, nullable=False)

    assert ValidateLength.validate('1234567890', text1) is None
    assert ValidateLength.validate('1234567890', text2) is None

    with pytest.raises(ValidationError):
        ValidateLength.validate('1234567890*', text1)

    with pytest.raises(ValidationError):
        ValidateLength.validate('123456789', text2)

    assert ValidateLength.validate('123456789', text1) is None


def test_validate_time():
    time_field = TimeField(False)

    assert ValidateTime.validate('00:00:00', time_field) is None
    assert ValidateTime.validate('23:59:59', time_field) is None

    with pytest.raises(ValidationError):
        ValidateTime.validate('24:00:00', time_field)

    with pytest.raises(ValidationError):
        ValidateTime.validate('12:60:00', time_field)

    with pytest.raises(ValidationError):
        ValidateTime.validate('12:00:60', time_field)

    with pytest.raises(ValidationError, match='Wrong time format'):
        ValidateTime.validate('22:00', time_field)

    with pytest.raises(ValidationError, match='Wrong time format'):
        ValidateTime.validate('22:00 12', time_field)

    with pytest.raises(ValidationError, match='Wrong time format'):
        ValidateTime.validate('gsdfsd', time_field)


def test_validate_date():
    date_field = DateField(False)

    assert ValidateDate.validate('0001-01-01', date_field) is None
    assert ValidateDate.validate('9999-12-31', date_field) is None

    with pytest.raises(ValidationError):
        ValidateDate.validate('0000-00-00', date_field)

    with pytest.raises(ValidationError, match='Wrong day value'):
        ValidateDate.validate('2019-02-29', date_field)

    assert ValidateDate.validate('2020-02-29', date_field) is None

    with pytest.raises(ValidationError):
        ValidateDate.validate('2019-02-30', date_field)

    with pytest.raises(ValidationError, match='Wrong date format'):
        ValidateDate.validate('17-03-21', date_field)

    with pytest.raises(ValidationError, match='Wrong date format'):
        ValidateDate.validate('2002.03.12', date_field)

    with pytest.raises(ValidationError, match='Wrong date format'):
        ValidateDate.validate('gsdfsd', date_field)


def test_validate_datetime():
    datetime_field = DatetimeField(False)

    assert ValidateDatetime.validate('2002-04-25 20:03:12', datetime_field) is None

    with pytest.raises(ValidationError):
        ValidateDatetime.validate('2002-04-25_20:03:12', datetime_field)

    with pytest.raises(ValidationError):
        ValidateDatetime.validate('2002 04 25 20:03:12', datetime_field)

    with pytest.raises(ValidationError):
        ValidateDatetime.validate('2002-04-25 20:03', datetime_field)