-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_filtering_mixin.py
102 lines (74 loc) · 3.63 KB
/
test_filtering_mixin.py
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
import unittest
from sqlalchemy import Integer, Unicode
from nanohttp import HTTPBadRequest
from nanohttp.contexts import Context
from microhttp.ext import db
from microhttp_restful import FilteringMixin, Field
from microhttp_restful.tests.helpers import WebAppTestCase
from microhttp_restful.tests.helpers import DeclarativeBase
class FilteringObject(FilteringMixin, DeclarativeBase):
__tablename__ = 'filtering_object'
id = Field(Integer, primary_key=True)
title = Field(Unicode(50))
class FilteringMixinTestCase(WebAppTestCase):
def test_filtering_mixin(self):
db_session = db.get_session()
for i in range(1, 6):
# noinspection PyArgumentList
obj = FilteringObject(
title='object %s' % i,
)
db_session.add(obj)
db_session.commit()
# Bad Value
with Context({'QUERY_STRING': 'id=1'}, self.application) as context:
context.query['id'] = 1
self.assertRaises(HTTPBadRequest, FilteringObject.filter_by_request)
# IN
with Context({'QUERY_STRING': 'id=^1,2,3'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 3)
# NOT IN
with Context({'QUERY_STRING': 'id=!^1,2,3'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 2)
# IN (error)
with Context({'QUERY_STRING': 'id=^'}, self.application):
self.assertRaises(HTTPBadRequest, FilteringObject.filter_by_request)
# Between
with Context({'QUERY_STRING': 'id=~1,3'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 3)
# IS NULL
with Context({'QUERY_STRING': 'title=null'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 0)
# IS NOT NULL
with Context({'QUERY_STRING': 'title=!null'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 5)
# LIKE
with Context({'QUERY_STRING': 'title=%obj'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 5)
with Context({'QUERY_STRING': 'title=%OBJ'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 0)
# ILIKE
with Context({'QUERY_STRING': 'title=%~obj'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 5)
with Context({'QUERY_STRING': 'title=%~OBJ'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 5)
# ==
with Context({'QUERY_STRING': 'id=1'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 1)
# !=
with Context({'QUERY_STRING': 'id=!1'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 4)
# >=
with Context({'QUERY_STRING': 'id=>=2'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 4)
# >
with Context({'QUERY_STRING': 'id=>2'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 3)
# <=
with Context({'QUERY_STRING': 'id=<=3'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 3)
# <
with Context({'QUERY_STRING': 'id=<3'}, self.application):
self.assertEqual(FilteringObject.filter_by_request().count(), 2)
if __name__ == '__main__': # pragma: no cover
unittest.main()