-
Notifications
You must be signed in to change notification settings - Fork 2k
/
test_interface.py
132 lines (105 loc) · 4.15 KB
/
test_interface.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import nose
import ckan.plugins as p
import ckan.new_tests.helpers as helpers
import ckan.new_tests.factories as factories
assert_equals = nose.tools.assert_equals
class TestInterfaces(object):
@classmethod
def setup_class(cls):
p.load('datastore')
p.load('sample_datastore_plugin')
@classmethod
def teardown_class(cls):
p.unload('sample_datastore_plugin')
p.unload('datastore')
def setup(self):
helpers.reset_db()
def test_search_data_can_create_custom_filters(self):
records = [
{'age': 20}, {'age': 30}, {'age': 40}
]
resource = self._create_datastore_resource(records)
filters = {'age_between': [25, 35]}
result = helpers.call_action('datastore_search',
resource_id=resource['id'],
filters=filters)
assert result['total'] == 1, result
assert result['records'][0]['age'] == 30, result
def test_search_data_filters_sent_arent_modified(self):
records = [
{'age': 20}, {'age': 30}, {'age': 40}
]
resource = self._create_datastore_resource(records)
filters = {'age_between': [25, 35]}
result = helpers.call_action('datastore_search',
resource_id=resource['id'],
filters=filters.copy())
assert_equals(result['filters'], filters)
def test_search_data_custom_filters_have_the_correct_operator_precedence(self):
'''
We're testing that the WHERE clause becomes:
(age < 50 OR age > 60) AND age = 30
And not:
age < 50 OR age > 60 AND age = 30
'''
records = [
{'age': 20}, {'age': 30}, {'age': 40}
]
resource = self._create_datastore_resource(records)
filters = {
'age_not_between': [50, 60],
'age': 30
}
result = helpers.call_action('datastore_search',
resource_id=resource['id'],
filters=filters)
assert result['total'] == 1, result
assert result['records'][0]['age'] == 30, result
assert_equals(result['filters'], filters)
def test_delete_data_can_create_custom_filters(self):
records = [
{'age': 20}, {'age': 30}, {'age': 40}
]
resource = self._create_datastore_resource(records)
filters = {'age_between': [25, 35]}
helpers.call_action('datastore_delete',
resource_id=resource['id'],
force=True,
filters=filters)
result = helpers.call_action('datastore_search',
resource_id=resource['id'],
filters=filters)
assert_equals(result['records'], [])
def test_delete_data_custom_filters_have_the_correct_operator_precedence(self):
'''
We're testing that the WHERE clause becomes:
(age < 50 OR age > 60) AND age = 30
And not:
age < 50 OR age > 60 AND age = 30
'''
records = [
{'age': 20}, {'age': 30}, {'age': 40}
]
resource = self._create_datastore_resource(records)
filters = {
'age_not_between': [50, 60],
'age': 30
}
helpers.call_action('datastore_delete',
resource_id=resource['id'],
force=True,
filters=filters)
result = helpers.call_action('datastore_search',
resource_id=resource['id'],
filters=filters)
assert_equals(result['records'], [])
def _create_datastore_resource(self, records):
dataset = factories.Dataset()
resource = factories.Resource(package=dataset)
data = {
'resource_id': resource['id'],
'force': True,
'records': records
}
helpers.call_action('datastore_create', **data)
return resource