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)
|