Skip to content

Commit f230b00

Browse files
committed
Add and organize tests for fetch
1 parent 40cddc4 commit f230b00

File tree

2 files changed

+250
-72
lines changed

2 files changed

+250
-72
lines changed

tests/test_fetch.py

Lines changed: 37 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -14,65 +14,35 @@ def __init__(self):
1414
self.subject = schema.Subject()
1515
self.lang = schema.Language()
1616

17-
def test_behavior_inheritance(self):
18-
"""Testing behavior property of Fetch objects"""
19-
mock = {}
20-
21-
f1 = Fetch(mock)
22-
assert_in('squeeze', f1.ext_behavior)
23-
24-
f2 = Fetch1(mock)
25-
assert_in('squeeze', f2.ext_behavior)
26-
27-
def test_copy_constructor(self):
28-
"""Test copy constructor for Fetch and Fetch1"""
29-
mock = {}
30-
31-
f1 = Fetch(mock).squeeze
32-
f1.limit(1)
33-
f2 = Fetch(f1)
34-
assert_true(isinstance(f2, Fetch), 'Copy constructor is not returning correct object type')
35-
assert_dict_equal(f1.sql_behavior, f2.sql_behavior, 'SQL behavior dictionary content is not copied correctly')
36-
assert_dict_equal(f1.ext_behavior, f2.ext_behavior, 'Extra behavior dictionary content is not copied correctly')
37-
assert_true(f1._relation is f2._relation, 'Relation reference is not copied correctly')
38-
39-
f3 = Fetch1(mock).squeeze
40-
f4 = Fetch1(f3)
41-
assert_true(isinstance(f4, Fetch1), 'Copy constructor is not returning correct object type')
42-
assert_dict_equal(f3.sql_behavior, f4.sql_behavior, 'Behavior dictionary content is not copied correctly')
43-
assert_dict_equal(f3.ext_behavior, f4.ext_behavior, 'Extra behavior dictionary content is not copied correctly')
44-
45-
assert_true(f3._relation is f4._relation, 'Relation reference is not copied correctly')
46-
47-
def test_getitem(self):
48-
"""Testing Fetch.__getitem__"""
49-
list1 = sorted(self.subject.proj().fetch.as_dict(), key=itemgetter('subject_id'))
50-
list2 = sorted(self.subject.fetch[dj.key], key=itemgetter('subject_id'))
17+
def test_getattribute(self):
18+
"""Testing Fetch.__call__ with attributes"""
19+
list1 = sorted(self.subject.proj().fetch(as_dict=True), key=itemgetter('subject_id'))
20+
list2 = sorted(self.subject.fetch(dj.key), key=itemgetter('subject_id'))
5121
for l1, l2 in zip(list1, list2):
52-
assert_dict_equal(l1, l2, 'Primary key is not returned correctly')
22+
assert_dict_equal(l1, l2, 'Primary key is not returned correctly')
5323

54-
tmp = self.subject.fetch(order_by=['subject_id'])
24+
tmp = self.subject.fetch(order_by='subject_id')
5525

56-
subject_notes, key, real_id = self.subject.fetch['subject_notes', dj.key, 'real_id']
26+
subject_notes, key, real_id = self.subject.fetch('subject_notes', dj.key, 'real_id')
5727

5828
np.testing.assert_array_equal(sorted(subject_notes), sorted(tmp['subject_notes']))
5929
np.testing.assert_array_equal(sorted(real_id), sorted(tmp['real_id']))
6030
list1 = sorted(key, key=itemgetter('subject_id'))
6131
for l1, l2 in zip(list1, list2):
62-
assert_dict_equal(l1, l2, 'Primary key is not returned correctly')
32+
assert_dict_equal(l1, l2, 'Primary key is not returned correctly')
6333

64-
def test_getitem_for_fetch1(self):
65-
"""Testing Fetch1.__getitem__"""
66-
assert_true((self.subject & "subject_id=10").fetch1['subject_id'] == 10)
67-
assert_equal((self.subject & "subject_id=10").fetch1['subject_id', 'species'],
34+
def test_getattribute_for_fetch1(self):
35+
"""Testing Fetch1.__call__ with attributes"""
36+
assert_true((self.subject & "subject_id=10").fetch1('subject_id') == 10)
37+
assert_equal((self.subject & "subject_id=10").fetch1('subject_id', 'species'),
6838
(10, 'monkey'))
6939

7040
def test_order_by(self):
7141
"""Tests order_by sorting order"""
7242
languages = schema.Language.contents
7343

7444
for ord_name, ord_lang in itertools.product(*2 * [['ASC', 'DESC']]):
75-
cur = self.lang.fetch.order_by('name ' + ord_name, 'language ' + ord_lang)()
45+
cur = self.lang.fetch(order_by=('name ' + ord_name, 'language ' + ord_lang))
7646
languages.sort(key=itemgetter(1), reverse=ord_lang == 'DESC')
7747
languages.sort(key=itemgetter(0), reverse=ord_name == 'DESC')
7848
for c, l in zip(cur, languages):
@@ -84,35 +54,34 @@ def test_squeeze(self):
8454
def test_order_by_default(self):
8555
"""Tests order_by sorting order with defaults"""
8656
languages = schema.Language.contents
87-
cur = self.lang.fetch.order_by('language', 'name DESC')()
57+
cur = self.lang.fetch(order_by=('language', 'name DESC'))
8858
languages.sort(key=itemgetter(0), reverse=True)
8959
languages.sort(key=itemgetter(1), reverse=False)
9060

9161
for c, l in zip(cur, languages):
9262
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
9363

94-
def test_order_by_direct(self):
95-
"""Tests order_by sorting order passing it to __call__"""
64+
def test_limit(self):
65+
"""Test the limit kwarg"""
9666
languages = schema.Language.contents
97-
cur = self.lang.fetch(order_by=['language', 'name DESC'])
98-
languages.sort(key=itemgetter(0), reverse=True)
99-
languages.sort(key=itemgetter(1), reverse=False)
100-
for c, l in zip(cur, languages):
101-
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
10267

103-
def test_limit(self):
104-
"""Test the limit function """
68+
cur = self.lang.fetch(limit=4)
69+
assert_equal(len(cur), 4, 'Length is not correct')
70+
71+
def test_order_by_limit(self):
72+
"""Test the combination of order by and limit kwargs"""
10573
languages = schema.Language.contents
10674

107-
cur = self.lang.fetch.limit(4)(order_by=['language', 'name DESC'])
75+
cur = self.lang.fetch(limit=4, order_by=['language', 'name DESC'])
10876
languages.sort(key=itemgetter(0), reverse=True)
10977
languages.sort(key=itemgetter(1), reverse=False)
11078
assert_equal(len(cur), 4, 'Length is not correct')
11179
for c, l in list(zip(cur, languages))[:4]:
11280
assert_true(np.all([cc == ll for cc, ll in zip(c, l)]), 'Sorting order is different')
11381

82+
11483
def test_limit_offset(self):
115-
"""Test the limit and offset functions together"""
84+
"""Test the limit and offset kwargs together"""
11685
languages = schema.Language.contents
11786

11887
cur = self.lang.fetch(offset=2, limit=4, order_by=['language', 'name DESC'])
@@ -125,7 +94,7 @@ def test_limit_offset(self):
12594
def test_iter(self):
12695
"""Test iterator"""
12796
languages = schema.Language.contents
128-
cur = self.lang.fetch.order_by('language', 'name DESC')
97+
cur = self.lang.fetch(order_by=['language', 'name DESC'])
12998
languages.sort(key=itemgetter(0), reverse=True)
13099
languages.sort(key=itemgetter(1), reverse=False)
131100
for (name, lang), (tname, tlang) in list(zip(cur, languages)):
@@ -141,8 +110,8 @@ def test_keys(self):
141110
languages.sort(key=itemgetter(0), reverse=True)
142111
languages.sort(key=itemgetter(1), reverse=False)
143112

144-
cur = self.lang.fetch.order_by('language', 'name DESC')['name', 'language']
145-
cur2 = list(self.lang.fetch.order_by('language', 'name DESC').keys())
113+
cur = self.lang.fetch('name', 'language', order_by=('language', 'name DESC'))
114+
cur2 = list(self.lang.fetch.keys(order_by=['language', 'name DESC']))
146115

147116
for c, c2 in zip(zip(*cur), cur2):
148117
assert_true(c == tuple(c2.values()), 'Values are not the same')
@@ -152,7 +121,7 @@ def test_fetch1_step1(self):
152121
true = schema.Language.contents[-1]
153122
dat = (self.lang & key).fetch1()
154123
for k, (ke, c) in zip(true, dat.items()):
155-
assert_true(k == c == (self.lang & key).fetch1[ke],
124+
assert_true(k == c == (self.lang & key).fetch1(ke),
156125
'Values are not the same')
157126

158127
def test_repr(self):
@@ -164,25 +133,21 @@ def test_repr(self):
164133
assert_true(n - 3 <= limit)
165134

166135
@raises(dj.DataJointError)
167-
def test_prepare_attributes(self):
136+
def test_fetch_none(self):
168137
"""Test preparing attributes for getitem"""
169-
self.lang.fetch[None]
138+
self.lang.fetch(None)
170139

171140
def test_asdict(self):
172141
"""Test returns as dictionaries"""
173-
d = self.lang.fetch.as_dict()
174-
for dd in d:
175-
assert_true(isinstance(dd, dict))
176-
177-
def test_asdict_with_call(self):
178-
"""Test returns as dictionaries with call."""
179-
d = self.lang.fetch.as_dict()
142+
d = self.lang.fetch(as_dict=True)
180143
for dd in d:
181144
assert_true(isinstance(dd, dict))
182145

183146
def test_offset(self):
184147
"""Tests offset"""
185-
cur = self.lang.fetch.limit(4).offset(1)(order_by=['language', 'name DESC'])
148+
with warnings.catch_warnings(record=True) as w:
149+
cur = self.lang.fetch(limit=4, offset=1, order_by=['language', 'name DESC'])
150+
186151
languages = self.lang.contents
187152
languages.sort(key=itemgetter(0), reverse=True)
188153
languages.sort(key=itemgetter(1), reverse=False)
@@ -193,8 +158,8 @@ def test_offset(self):
193158
def test_limit_warning(self):
194159
"""Tests whether warning is raised if offset is used without limit."""
195160
with warnings.catch_warnings(record=True) as w:
196-
self.lang.fetch.offset(1)()
197-
assert_true(len(w) > 0, "Warning war not raised")
161+
self.lang.fetch(offset=1)
162+
assert_true(len(w) > 0, "Warning was not raised")
198163

199164
def test_len(self):
200165
"""Tests __len__"""
@@ -208,4 +173,4 @@ def test_fetch1_step2(self):
208173
@raises(dj.DataJointError)
209174
def test_fetch1_step3(self):
210175
"""Tests whether fetch1 raises error"""
211-
self.lang.fetch1['name']
176+
self.lang.fetch1('name')

0 commit comments

Comments
 (0)