Skip to content

Commit da5bcac

Browse files
Merge pull request jazzband#111 from sirkonst/hotfix/ValidationError
Convert DeserializationError to ValidationError
2 parents 3a82c3b + 52aa255 commit da5bcac

2 files changed

Lines changed: 29 additions & 18 deletions

File tree

recurrence/exceptions.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
class RecurrenceError(Exception):
2-
pass
1+
from django.core.exceptions import ValidationError
32

43

5-
class SerializationError(RecurrenceError):
4+
class RecurrenceError(ValidationError):
65
pass
76

87

9-
class DeserializationError(RecurrenceError):
8+
class SerializationError(RecurrenceError):
109
pass
1110

1211

13-
class ValidationError(RecurrenceError):
12+
class DeserializationError(RecurrenceError):
1413
pass

tests/test_saving.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime
2+
from django.core.exceptions import ValidationError
23
from recurrence import Recurrence, Rule
34
from tests.models import EventWithNoNulls
45
import pytest
@@ -59,16 +60,27 @@ def test_recurrence_object_is_saved():
5960
) == instances
6061

6162

63+
@pytest.mark.django_db
64+
@pytest.mark.parametrize('value', [
65+
' ', 'invalid', 'RRULE:', 'RRULE:FREQ=', 'RRULE:FREQ=invalid'
66+
])
67+
def test_recurrence_text_pattern_invalid(value):
68+
with pytest.raises(ValidationError):
69+
EventWithNoNulls.objects.create(
70+
recurs=value
71+
)
72+
73+
6274
@pytest.mark.django_db
6375
def test_invalid_frequency_recurrence_object_raises():
64-
with pytest.raises(recurrence.SerializationError):
76+
with pytest.raises(ValidationError):
6577
EventWithNoNulls.objects.create(
6678
recurs=Recurrence(
6779
rrules=[Rule('fish')]
6880
)
6981
)
7082

71-
with pytest.raises(recurrence.SerializationError):
83+
with pytest.raises(ValidationError):
7284
EventWithNoNulls.objects.create(
7385
recurs=Recurrence(
7486
rrules=[Rule(42)]
@@ -78,14 +90,14 @@ def test_invalid_frequency_recurrence_object_raises():
7890

7991
@pytest.mark.django_db
8092
def test_invalid_interval_recurrence_object_raises():
81-
with pytest.raises(recurrence.SerializationError):
93+
with pytest.raises(ValidationError):
8294
EventWithNoNulls.objects.create(
8395
recurs=Recurrence(
8496
rrules=[Rule(recurrence.DAILY, interval=0)]
8597
)
8698
)
8799

88-
with pytest.raises(recurrence.SerializationError):
100+
with pytest.raises(ValidationError):
89101
EventWithNoNulls.objects.create(
90102
recurs=Recurrence(
91103
rrules=[Rule(recurrence.DAILY, interval='cat')]
@@ -95,7 +107,7 @@ def test_invalid_interval_recurrence_object_raises():
95107

96108
@pytest.mark.django_db
97109
def test_invalid_wkst_recurrence_object_raises():
98-
with pytest.raises(recurrence.SerializationError):
110+
with pytest.raises(ValidationError):
99111
EventWithNoNulls.objects.create(
100112
recurs=Recurrence(
101113
rrules=[Rule(recurrence.DAILY, wkst=17)]
@@ -105,7 +117,7 @@ def test_invalid_wkst_recurrence_object_raises():
105117

106118
@pytest.mark.django_db
107119
def test_invalid_until_recurrence_object_raises():
108-
with pytest.raises(recurrence.SerializationError):
120+
with pytest.raises(ValidationError):
109121
EventWithNoNulls.objects.create(
110122
recurs=Recurrence(
111123
rrules=[Rule(recurrence.DAILY, until=17)]
@@ -115,7 +127,7 @@ def test_invalid_until_recurrence_object_raises():
115127

116128
@pytest.mark.django_db
117129
def test_invalid_count_recurrence_object_raises():
118-
with pytest.raises(recurrence.SerializationError):
130+
with pytest.raises(ValidationError):
119131
EventWithNoNulls.objects.create(
120132
recurs=Recurrence(
121133
rrules=[Rule(recurrence.DAILY, count='fish')]
@@ -125,7 +137,7 @@ def test_invalid_count_recurrence_object_raises():
125137

126138
@pytest.mark.django_db
127139
def test_invalid_byday_recurrence_object_raises():
128-
with pytest.raises(recurrence.SerializationError):
140+
with pytest.raises(ValidationError):
129141
EventWithNoNulls.objects.create(
130142
recurs=Recurrence(
131143
rrules=[Rule(recurrence.DAILY, byday='house')]
@@ -135,7 +147,7 @@ def test_invalid_byday_recurrence_object_raises():
135147

136148
@pytest.mark.django_db
137149
def test_invalid_bymonth_too_high_recurrence_object_raises():
138-
with pytest.raises(recurrence.SerializationError):
150+
with pytest.raises(ValidationError):
139151
EventWithNoNulls.objects.create(
140152
recurs=Recurrence(
141153
rrules=[Rule(recurrence.DAILY, bymonth=[1, 32])]
@@ -145,7 +157,7 @@ def test_invalid_bymonth_too_high_recurrence_object_raises():
145157

146158
@pytest.mark.django_db
147159
def test_invalid_bymonth_toolow_recurrence_object_raises():
148-
with pytest.raises(recurrence.SerializationError):
160+
with pytest.raises(ValidationError):
149161
EventWithNoNulls.objects.create(
150162
recurs=Recurrence(
151163
rrules=[Rule(recurrence.DAILY, bymonth=[0, ])]
@@ -155,7 +167,7 @@ def test_invalid_bymonth_toolow_recurrence_object_raises():
155167

156168
@pytest.mark.django_db
157169
def test_invalid_exclusion_interval_recurrence_object_raises():
158-
with pytest.raises(recurrence.SerializationError):
170+
with pytest.raises(ValidationError):
159171
EventWithNoNulls.objects.create(
160172
recurs=Recurrence(
161173
exrules=[Rule(recurrence.DAILY, interval=0)]
@@ -165,7 +177,7 @@ def test_invalid_exclusion_interval_recurrence_object_raises():
165177

166178
@pytest.mark.django_db
167179
def test_invalid_date_recurrence_object_raises():
168-
with pytest.raises(recurrence.SerializationError):
180+
with pytest.raises(ValidationError):
169181
EventWithNoNulls.objects.create(
170182
recurs=Recurrence(
171183
rdates=["fish"]
@@ -175,7 +187,7 @@ def test_invalid_date_recurrence_object_raises():
175187

176188
@pytest.mark.django_db
177189
def test_invalid_exclusion_date_recurrence_object_raises():
178-
with pytest.raises(recurrence.SerializationError):
190+
with pytest.raises(ValidationError):
179191
EventWithNoNulls.objects.create(
180192
recurs=Recurrence(
181193
exdates=["fish"]

0 commit comments

Comments
 (0)