yading@7
|
1 import unittest
|
yading@7
|
2 from musixmatch import *
|
yading@7
|
3
|
yading@7
|
4 class TestBase(unittest.TestCase):
|
yading@7
|
5
|
yading@7
|
6 Class = base.Base
|
yading@7
|
7 def test_label(self):
|
yading@7
|
8 self.assertEqual(self.Class.label(), self.Class.__name__.lower())
|
yading@7
|
9
|
yading@7
|
10 class TestItem(TestBase):
|
yading@7
|
11 Class = base.Item
|
yading@7
|
12 item = { "item_id": "9673" }
|
yading@7
|
13 item_str = "{ 'item_id': '9673'}"
|
yading@7
|
14 item_repr = "Item({'item_id': '9673'})"
|
yading@7
|
15 item_hash = 9673
|
yading@7
|
16 item_id = 'item_id'
|
yading@7
|
17
|
yading@7
|
18 # def test_fromResponseMessage(self):
|
yading@7
|
19 # self.assertRaises(api.Error,
|
yading@7
|
20 # self.Class.fromResponseMessage, self.fail)
|
yading@7
|
21 # success = self.Class.fromResponseMessage(self.success)
|
yading@7
|
22 # self.assertEqual(success[item_id],
|
yading@7
|
23 # self.success['body'][self.label()][self.item_id])
|
yading@7
|
24 def test_fromDictionary(self):
|
yading@7
|
25 item = self.Class.fromDictionary(self.item)
|
yading@7
|
26 # Data integrity
|
yading@7
|
27 for k in self.item.keys():
|
yading@7
|
28 self.assertEqual(item[k], self.item[k])
|
yading@7
|
29
|
yading@7
|
30 def test__str__(self):
|
yading@7
|
31 item = self.Class.fromDictionary(self.item)
|
yading@7
|
32 self.assertEqual(str(item),self.item_str)
|
yading@7
|
33
|
yading@7
|
34 def test__repr__(self):
|
yading@7
|
35 item = self.Class.fromDictionary(self.item)
|
yading@7
|
36 self.assertEqual(repr(item),self.item_repr)
|
yading@7
|
37
|
yading@7
|
38 def test__hash__(self):
|
yading@7
|
39 item = self.Class.fromDictionary(self.item)
|
yading@7
|
40 self.assertEqual(hash(item), self.item_hash)
|
yading@7
|
41
|
yading@7
|
42 class TestCollection(unittest.TestCase):
|
yading@7
|
43
|
yading@7
|
44 Class = base.ItemsCollection
|
yading@7
|
45 AllowedContent = base.ItemsCollection.allowedin()
|
yading@7
|
46 item_list = 'item_list'
|
yading@7
|
47 item_id = 'item_id'
|
yading@7
|
48 item = 'item'
|
yading@7
|
49 message = {
|
yading@7
|
50 "body": {
|
yading@7
|
51 "item_list": [
|
yading@7
|
52 {
|
yading@7
|
53 "item": {
|
yading@7
|
54 "item_id": "292",
|
yading@7
|
55 "item_name": "item_292"
|
yading@7
|
56 }
|
yading@7
|
57 },
|
yading@7
|
58 {
|
yading@7
|
59 "item": {
|
yading@7
|
60 "item_id": "8976",
|
yading@7
|
61 "item_name": "item_8976"
|
yading@7
|
62 }
|
yading@7
|
63 },
|
yading@7
|
64 {
|
yading@7
|
65 "item": {
|
yading@7
|
66 "item_id": "9673",
|
yading@7
|
67 "item_name": "item_9673"
|
yading@7
|
68 }
|
yading@7
|
69 }
|
yading@7
|
70 ]
|
yading@7
|
71 },
|
yading@7
|
72 "header": {
|
yading@7
|
73 "execute_time": 0.14144802093506001,
|
yading@7
|
74 "status_code": 200
|
yading@7
|
75 }
|
yading@7
|
76 }
|
yading@7
|
77
|
yading@7
|
78 def test_insert(self):
|
yading@7
|
79 collection = self.Class()
|
yading@7
|
80 saved = self.message['body'][self.item_list][0][self.item]
|
yading@7
|
81 item = self.AllowedContent(saved)
|
yading@7
|
82 collection.insert(0, item)
|
yading@7
|
83 # Item correctly inserted
|
yading@7
|
84 self.assertEqual(collection[0], item)
|
yading@7
|
85
|
yading@7
|
86 saved = self.message['body'][self.item_list][1][self.item]
|
yading@7
|
87 collection.insert(0, saved)
|
yading@7
|
88 # Item corectly casted to self.AllowedContent
|
yading@7
|
89 self.assertEqual(type(collection[0]), self.AllowedContent)
|
yading@7
|
90 # Item content integrity
|
yading@7
|
91 self.assertEqual(collection[0][self.item_id], saved[self.item_id])
|
yading@7
|
92 # Previously inserted item has shifted position
|
yading@7
|
93 self.assertEqual(collection[1], item)
|
yading@7
|
94
|
yading@7
|
95 def test_append(self):
|
yading@7
|
96 collection = self.Class()
|
yading@7
|
97 saved = self.message['body'][self.item_list][1][self.item]
|
yading@7
|
98 item = self.AllowedContent.fromDictionary(saved)
|
yading@7
|
99 collection.append(item)
|
yading@7
|
100 # Item correctly appended
|
yading@7
|
101 self.assertEqual(collection[0], item)
|
yading@7
|
102
|
yading@7
|
103 saved = self.message['body'][self.item_list][2][self.item]
|
yading@7
|
104 collection.append(saved)
|
yading@7
|
105 # Item correctly appended
|
yading@7
|
106 self.assertEqual(collection[1][self.item_id], saved[self.item_id])
|
yading@7
|
107
|
yading@7
|
108 saved = self.message['body'][self.item_list][0][self.item]
|
yading@7
|
109 collection.append(saved)
|
yading@7
|
110 # Item corectly casted to self.AllowedContent
|
yading@7
|
111 self.assertEqual(type(collection[2]), self.AllowedContent)
|
yading@7
|
112 # Item content integrity
|
yading@7
|
113 self.assertEqual(collection[2][self.item_id], saved[self.item_id])
|
yading@7
|
114
|
yading@7
|
115 def test_extend(self):
|
yading@7
|
116 items = [ i[self.item] for i in self.message['body'][self.item_list] ]
|
yading@7
|
117 collection = self.Class(self.AllowedContent(items[0]))
|
yading@7
|
118 self.assertEqual(type(collection[0]), self.AllowedContent)
|
yading@7
|
119 typed = [ self.AllowedContent(i) for i in items[1:] ]
|
yading@7
|
120 for i in typed:
|
yading@7
|
121 self.assertEqual(type(i), self.AllowedContent)
|
yading@7
|
122 collection.extend(typed)
|
yading@7
|
123 # Collection correctly extended
|
yading@7
|
124 self.assertEqual(collection[1], typed[0])
|
yading@7
|
125 self.assertEqual(collection[2], typed[1])
|
yading@7
|
126
|
yading@7
|
127 row = items[:2] + items[1:3]
|
yading@7
|
128 collection.extend(row)
|
yading@7
|
129 # Items content integrity: no duplicate
|
yading@7
|
130 self.assertEqual(len(collection), 3)
|
yading@7
|
131
|
yading@7
|
132 collection = self.Class()
|
yading@7
|
133 collection.extend(row)
|
yading@7
|
134 self.assertEqual(len(row), 4)
|
yading@7
|
135 self.assertEqual(len(collection), 3)
|
yading@7
|
136 # Items corectly casted to self.AllowedContent
|
yading@7
|
137 for i in range(3):
|
yading@7
|
138 self.assertEqual(type(collection[i]), self.AllowedContent)
|
yading@7
|
139
|
yading@7
|
140 # def test__setitem__(self):
|
yading@7
|
141 # collection = self.Class(self.AllowedContent(
|
yading@7
|
142 # self.message['body'][self.item_list][1][self.item]))
|
yading@7
|
143 # saved = self.message['body'][self.item_list][2][self.item]
|
yading@7
|
144 # item = self.AllowedContent(saved)
|
yading@7
|
145 # collection[0] = item
|
yading@7
|
146 # # Index of ItemsCollection correctly set
|
yading@7
|
147 # self.assertEqual(collection[0], item)
|
yading@7
|
148
|
yading@7
|
149 # saved = self.message['body'][self.item_list][0][self.item]
|
yading@7
|
150 # collection[0] = saved
|
yading@7
|
151 # # Item corectly casted to self.AllowedContent
|
yading@7
|
152 # self.assertEqual(type(collection[0]),self.AllowedContent)
|
yading@7
|
153 # # Item content integrity
|
yading@7
|
154 # self.assertEqual(collection[0][self.item_id], saved[self.item_id])
|
yading@7
|
155 # # Wrong setting
|
yading@7
|
156 # self.assertRaises(IndexError, collection.__setitem__, 9, saved)
|
yading@7
|
157 # self.assertRaises(TypeError, collection.__setitem__, 'test', saved)
|
yading@7
|
158
|
yading@7
|
159 def test_page(self):
|
yading@7
|
160 items = [ i[self.item] for i in self.message['body'][self.item_list] ]
|
yading@7
|
161 collection = self.Class(*items)
|
yading@7
|
162 self.assertEqual(len(collection), 3)
|
yading@7
|
163 for i in range(3):
|
yading@7
|
164 self.assertEqual(type(collection[i]), self.AllowedContent)
|
yading@7
|
165 page = collection.page(1,2)
|
yading@7
|
166 self.assertEqual(len(page), 1)
|
yading@7
|
167 self.assertEqual(type(page), self.Class)
|
yading@7
|
168 self.assertEqual(type(page[0]), self.AllowedContent)
|
yading@7
|
169
|
yading@7
|
170 def test_pages(self):
|
yading@7
|
171 items = [ i[self.item] for i in self.message['body'][self.item_list] ]
|
yading@7
|
172 collection = self.Class(*items)
|
yading@7
|
173 self.assertEqual(len(collection), 3)
|
yading@7
|
174 pages = collection.pages(2)
|
yading@7
|
175 self.assertEqual(pages, 2)
|
yading@7
|
176
|
yading@7
|
177 def test_paged(self):
|
yading@7
|
178 items = [ i[self.item] for i in self.message['body'][self.item_list] ]
|
yading@7
|
179 collection = self.Class(*items)
|
yading@7
|
180 self.assertEqual(len(collection), 3)
|
yading@7
|
181 for i in range(3):
|
yading@7
|
182 self.assertEqual(type(collection[i]), self.AllowedContent)
|
yading@7
|
183 paged = collection.paged(2)
|
yading@7
|
184 self.assertEqual(len(paged), 2)
|
yading@7
|
185 for i,l in zip(range(2), (2,1)):
|
yading@7
|
186 self.assertEqual(len(paged[i]), l)
|
yading@7
|
187 self.assertEqual(type(paged[i]), self.Class)
|
yading@7
|
188 for p,i in [(0,0),(0,1),(1,0)]:
|
yading@7
|
189 self.assertEqual(id(paged[p][i]), id(collection[(2*p)+i]))
|
yading@7
|
190
|
yading@7
|
191 def test_pager(self):
|
yading@7
|
192 items = [ i[self.item] for i in self.message['body'][self.item_list] ]
|
yading@7
|
193 collection = self.Class(*items)
|
yading@7
|
194 self.assertEqual(len(collection), 3)
|
yading@7
|
195 for i in range(3):
|
yading@7
|
196 self.assertEqual(type(collection[i]), self.AllowedContent)
|
yading@7
|
197 pager = []
|
yading@7
|
198 for page in collection.pager(2):
|
yading@7
|
199 self.assertEqual(type(page), self.Class)
|
yading@7
|
200 self.assertEqual(type(page[0]), self.AllowedContent)
|
yading@7
|
201 pager.append(page)
|
yading@7
|
202 self.assertEqual(len(pager), 2)
|
yading@7
|
203 self.assertEqual(len(pager[0]), 2)
|
yading@7
|
204 self.assertEqual(len(pager[1]), 1)
|
yading@7
|
205
|
yading@7
|
206 def test__add__(self):
|
yading@7
|
207 items = [ i[self.item] for i in self.message['body'][self.item_list] ]
|
yading@7
|
208 collection1 = self.Class(*items[:2])
|
yading@7
|
209 collection2 = self.Class(*items[1:3])
|
yading@7
|
210 collection3 = collection1 + collection2
|
yading@7
|
211 # Collection correctly created
|
yading@7
|
212 self.assertEqual(type(collection3), self.Class)
|
yading@7
|
213 self.assertEqual(len(collection3), 3)
|
yading@7
|
214
|