|
1 | | -import unittest |
2 | | - |
3 | | -from django.core import mail |
4 | | -from django.test import TestCase, TransactionTestCase |
| 1 | +from django.test import TransactionTestCase |
5 | 2 | from django.contrib.auth.models import User |
6 | 3 |
|
7 | | -from main.models import Package, Repo |
| 4 | +from main.models import Repo |
8 | 5 | from packages.models import PackageRelation |
9 | 6 | from devel.models import UserProfile |
10 | 7 |
|
11 | | -from .alpm import AlpmAPI |
12 | | - |
13 | | - |
14 | | -alpm = AlpmAPI() |
15 | | - |
16 | | - |
17 | | -class AlpmTestCase(unittest.TestCase): |
18 | | - |
19 | | - @unittest.skipUnless(alpm.available, "ALPM is unavailable") |
20 | | - def test_version(self): |
21 | | - version = alpm.version() |
22 | | - self.assertIsNotNone(version) |
23 | | - version = version.split(b'.') |
24 | | - # version is a 3-tuple, e.g., '7.0.2' |
25 | | - self.assertEqual(3, len(version)) |
26 | | - |
27 | | - @unittest.skipUnless(alpm.available, "ALPM is unavailable") |
28 | | - def test_vercmp(self): |
29 | | - self.assertEqual(0, alpm.vercmp("1.0", "1.0")) |
30 | | - self.assertEqual(1, alpm.vercmp("1.1", "1.0")) |
31 | | - |
32 | | - @unittest.skipUnless(alpm.available, "ALPM is unavailable") |
33 | | - def test_compare_versions(self): |
34 | | - self.assertTrue(alpm.compare_versions("1.0", "<=", "2.0")) |
35 | | - self.assertTrue(alpm.compare_versions("1.0", "<", "2.0")) |
36 | | - self.assertFalse(alpm.compare_versions("1.0", ">=", "2.0")) |
37 | | - self.assertFalse(alpm.compare_versions("1.0", ">", "2.0")) |
38 | | - self.assertTrue(alpm.compare_versions("1:1.0", ">", "2.0")) |
39 | | - self.assertFalse(alpm.compare_versions("1.0.2", ">=", "2.1.0")) |
40 | | - |
41 | | - self.assertTrue(alpm.compare_versions("1.0", "=", "1.0")) |
42 | | - self.assertTrue(alpm.compare_versions("1.0", "=", "1.0-1")) |
43 | | - self.assertFalse(alpm.compare_versions("1.0", "!=", "1.0")) |
44 | | - |
45 | | - def test_behavior_when_unavailable(self): |
46 | | - mock_alpm = AlpmAPI() |
47 | | - mock_alpm.available = False |
48 | | - |
49 | | - self.assertIsNone(mock_alpm.version()) |
50 | | - self.assertIsNone(mock_alpm.vercmp("1.0", "1.0")) |
51 | | - self.assertIsNone(mock_alpm.compare_versions("1.0", "=", "1.0")) |
52 | | - |
53 | | - |
54 | | -class PackagesTest(TestCase): |
55 | | - |
56 | | - def test_feed(self): |
57 | | - response = self.client.get('/feeds/packages/') |
58 | | - self.assertEqual(response.status_code, 200) |
59 | | - |
60 | | - def test_sitemap(self): |
61 | | - for sitemap in ['packages', 'package-groups', 'package-files', 'split-packages']: |
62 | | - response = self.client.get('/sitemap-{}.xml'.format(sitemap)) |
63 | | - self.assertEqual(response.status_code, 200) |
64 | | - |
65 | | - |
66 | | -class PackageSearchJson(TestCase): |
67 | | - fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', |
68 | | - 'main/fixtures/package.json'] |
69 | | - |
70 | | - def test_invalid(self): |
71 | | - response = self.client.get('/packages/search/json/') |
72 | | - self.assertEqual(response.status_code, 200) |
73 | | - data = response.json() |
74 | | - self.assertEqual(data['limit'], 250) |
75 | | - self.assertEqual(data['results'], []) |
76 | | - self.assertEqual(data['valid'], False) |
77 | | - |
78 | | - def test_reponame(self): |
79 | | - response = self.client.get('/packages/search/json/?repository=core') |
80 | | - self.assertEqual(response.status_code, 200) |
81 | | - data = response.json() |
82 | | - self.assertEqual(len(data['results']), 5) |
83 | | - self.assertEqual(set([r['pkgname'] for r in data['results']]), |
84 | | - {"coreutils", "glibc", "linux", "pacman", "systemd"}) |
85 | | - |
86 | | - def test_packagename(self): |
87 | | - response = self.client.get('/packages/search/json/?name=linux') |
88 | | - self.assertEqual(response.status_code, 200) |
89 | | - data = response.json() |
90 | | - self.assertEqual(len(data['results']), 1) |
91 | | - |
92 | | - def test_no_results(self): |
93 | | - response = self.client.get('/packages/search/json/?name=none') |
94 | | - self.assertEqual(response.status_code, 200) |
95 | | - data = response.json() |
96 | | - self.assertEqual(len(data['results']), 0) |
97 | | - |
98 | | - def test_limit_four(self): |
99 | | - response = self.client.get('/packages/search/json/?limit=4') |
100 | | - self.assertEqual(response.status_code, 200) |
101 | | - data = response.json() |
102 | | - self.assertEqual(data['page'], 1) |
103 | | - self.assertEqual(data['num_pages'], 2) |
104 | | - self.assertEqual(data['limit'], 4) |
105 | | - self.assertEqual(len(data['results']), 4) |
106 | | - |
107 | | - def test_second_page(self): |
108 | | - response = self.client.get('/packages/search/json/?limit=4&page=2') |
109 | | - self.assertEqual(response.status_code, 200) |
110 | | - data = response.json() |
111 | | - self.assertEqual(data['page'], 2) |
112 | | - self.assertEqual(data['num_pages'], 2) |
113 | | - self.assertEqual(len(data['results']), 1) |
114 | | - |
115 | | - |
116 | | -class PackageSearch(TestCase): |
117 | | - fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', |
118 | | - 'main/fixtures/package.json'] |
119 | | - |
120 | | - def test_invalid(self): |
121 | | - response = self.client.get('/packages/?q=test') |
122 | | - self.assertEqual(response.status_code, 200) |
123 | | - self.assertIn('0 matching packages found', response.content.decode()) |
124 | | - |
125 | | - def test_exact_match(self): |
126 | | - response = self.client.get('/packages/?q=linux') |
127 | | - self.assertEqual(response.status_code, 200) |
128 | | - self.assertIn('1 matching package found', response.content.decode()) |
129 | | - |
130 | | - def test_filter_name(self): |
131 | | - response = self.client.get('/packages/?name=name') |
132 | | - self.assertEqual(response.status_code, 200) |
133 | | - self.assertIn('0 matching packages found', response.content.decode()) |
134 | | - |
135 | | - def test_filter_repo(self): |
136 | | - response = self.client.get('/packages/?repo=Core') |
137 | | - self.assertEqual(response.status_code, 200) |
138 | | - self.assertIn('5 matching packages found', response.content.decode()) |
139 | | - |
140 | | - def test_filter_desc(self): |
141 | | - response = self.client.get('/packages/?desc=kernel') |
142 | | - self.assertEqual(response.status_code, 200) |
143 | | - self.assertIn('1 matching package found', response.content.decode()) |
144 | | - |
145 | | - def test_filter_flagged(self): |
146 | | - response = self.client.get('/packages/?flagged=Flagged') |
147 | | - self.assertEqual(response.status_code, 200) |
148 | | - self.assertIn('0 matching packages found', response.content.decode()) |
149 | | - |
150 | | - def test_filter_not_flagged(self): |
151 | | - response = self.client.get('/packages/?flagged=Not Flagged') |
152 | | - self.assertEqual(response.status_code, 200) |
153 | | - self.assertIn('5 matching packages found', response.content.decode()) |
154 | | - |
155 | | - def test_filter_arch(self): |
156 | | - response = self.client.get('/packages/?arch=any') |
157 | | - self.assertEqual(response.status_code, 200) |
158 | | - self.assertIn('0 matching packages found', response.content.decode()) |
159 | | - |
160 | | - def test_filter_maintainer_orphan(self): |
161 | | - response = self.client.get('/packages/?maintainer=orphan') |
162 | | - self.assertEqual(response.status_code, 200) |
163 | | - self.assertIn('5 matching packages found', response.content.decode()) |
164 | | - |
165 | | - def test_filter_packager_unknown(self): |
166 | | - response = self.client.get('/packages/?packager=unknown') |
167 | | - self.assertEqual(response.status_code, 200) |
168 | | - self.assertIn('5 matching packages found', response.content.decode()) |
169 | | - |
170 | | - def test_sort(self): |
171 | | - response = self.client.get('/packages/?sort=pkgname') |
172 | | - self.assertEqual(response.status_code, 200) |
173 | | - self.assertIn('5 matching packages found', response.content.decode()) |
174 | | - |
175 | | - def test_head(self): |
176 | | - response = self.client.head('/packages/?q=unknown') |
177 | | - self.assertEqual(response.status_code, 200) |
178 | | - |
179 | | - |
180 | | -class OpenSearch(TestCase): |
181 | | - fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', |
182 | | - 'main/fixtures/package.json'] |
183 | | - |
184 | | - def test_packages(self): |
185 | | - response = self.client.get('/opensearch/packages/') |
186 | | - self.assertEqual(response.status_code, 200) |
187 | | - |
188 | | - def test_packages_suggest(self): |
189 | | - response = self.client.get('/opensearch/packages/suggest') |
190 | | - self.assertEqual(response.status_code, 200) |
191 | | - |
192 | | - def test_packages_suggest_lowercase(self): |
193 | | - response = self.client.get('/opensearch/packages/suggest?q=linux') |
194 | | - self.assertEqual(response.status_code, 200) |
195 | | - self.assertIn('linux', response.content.decode()) |
196 | | - |
197 | | - def test_packages_suggest_uppercase(self): |
198 | | - response = self.client.get('/opensearch/packages/suggest?q=LINUX') |
199 | | - self.assertEqual(response.status_code, 200) |
200 | | - self.assertIn('linux', response.content.decode()) |
201 | | - |
202 | | - response = self.client.get('/opensearch/packages/suggest?q=LINux') |
203 | | - self.assertEqual(response.status_code, 200) |
204 | | - self.assertIn('linux', response.content.decode()) |
205 | | - |
206 | | - |
207 | | -class PackageViews(TestCase): |
208 | | - fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', |
209 | | - 'main/fixtures/package.json'] |
210 | | - |
211 | | - def test_arch_differences(self): |
212 | | - response = self.client.get('/packages/differences/') |
213 | | - self.assertEqual(response.status_code, 200) |
214 | | - |
215 | | - |
216 | | -class PackageDisplay(TestCase): |
217 | | - fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', |
218 | | - 'main/fixtures/package.json'] |
219 | | - |
220 | | - def test_packages_detail(self): |
221 | | - response = self.client.get('/packages/core/x86_64/linux/') |
222 | | - self.assertEqual(response.status_code, 200) |
223 | | - |
224 | | - response = self.client.get('/packages/core/x86_64/nope/') |
225 | | - self.assertEqual(response.status_code, 404) |
226 | | - |
227 | | - # Redirect to search |
228 | | - response = self.client.get('/packages/core/x86_64/') |
229 | | - self.assertEqual(response.status_code, 302) |
230 | | - |
231 | | - def test_packages_json(self): |
232 | | - response = self.client.get('/packages/core/x86_64/linux/json/') |
233 | | - self.assertEqual(response.status_code, 200) |
234 | | - data = response.json() |
235 | | - self.assertEqual(data['pkgbase'], 'linux') |
236 | | - # TODO verify more of the structure |
237 | | - |
238 | | - def test_packages_files(self): |
239 | | - response = self.client.get('/packages/core/x86_64/linux/files/') |
240 | | - self.assertEqual(response.status_code, 200) |
241 | | - |
242 | | - def test_packages_files_json(self): |
243 | | - response = self.client.get('/packages/core/x86_64/linux/files/json/') |
244 | | - self.assertEqual(response.status_code, 200) |
245 | | - data = response.json() |
246 | | - self.assertEqual(data['pkgname'], 'linux') |
247 | | - # TODO verify more of the structure |
248 | | - |
249 | | - def test_packages_download(self): |
250 | | - response = self.client.get('/packages/core/x86_64/linux/download/') |
251 | | - self.assertEqual(response.status_code, 404) |
252 | | - # TODO: Figure out how to fake a mirror |
253 | | - |
254 | | - def test_head(self): |
255 | | - response = self.client.head('/packages/core/x86_64/linux/') |
256 | | - self.assertEqual(response.status_code, 200) |
257 | | - |
258 | | - def test_groups(self): |
259 | | - response = self.client.get('/groups/') |
260 | | - self.assertEqual(response.status_code, 200) |
261 | | - |
262 | | - def test_groups_arch(self): |
263 | | - response = self.client.get('/groups/x86_64/') |
264 | | - self.assertEqual(response.status_code, 200) |
265 | | - |
266 | | - def test_groups_details(self): |
267 | | - response = self.client.get('/groups/x86_64/base/') |
268 | | - self.assertEqual(response.status_code, 404) |
269 | | - # FIXME: add group fixtures. |
270 | | - |
271 | | - |
272 | | -class FlagPackage(TestCase): |
273 | | - fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json', |
274 | | - 'main/fixtures/package.json'] |
275 | | - |
276 | | - def test_flag_package(self): |
277 | | - data = { |
278 | | - 'website': '', |
279 | | - 'email': 'nobody@archlinux.org', |
280 | | - 'message': 'new linux version', |
281 | | - } |
282 | | - response = self.client.post('/packages/core/x86_64/linux/flag/', |
283 | | - data, |
284 | | - follow=True) |
285 | | - self.assertEqual(response.status_code, 200) |
286 | | - self.assertIn('Package Flagged - linux', response.content.decode()) |
287 | | - self.assertEqual(len(mail.outbox), 1) |
288 | | - self.assertIn('package [linux] marked out-of-date', mail.outbox[0].subject) |
289 | | - |
290 | | - # Flag again, should fail |
291 | | - response = self.client.post('/packages/core/x86_64/linux/flag/', |
292 | | - data, |
293 | | - follow=True) |
294 | | - self.assertEqual(response.status_code, 200) |
295 | | - self.assertIn('has already been flagged out-of-date.', response.content.decode()) |
296 | | - |
297 | | - def test_flag_package_invalid(self): |
298 | | - data = { |
299 | | - 'website': '', |
300 | | - 'email': 'nobody@archlinux.org', |
301 | | - 'message': 'a', |
302 | | - } |
303 | | - response = self.client.post('/packages/core/x86_64/linux/flag/', |
304 | | - data, |
305 | | - follow=True) |
306 | | - self.assertEqual(response.status_code, 200) |
307 | | - self.assertIn('Enter a valid and useful out-of-date message', response.content.decode()) |
308 | | - self.assertEqual(len(mail.outbox), 0) |
309 | | - |
310 | | - def test_flag_help(self): |
311 | | - response = self.client.get('/packages/flaghelp/') |
312 | | - self.assertEqual(response.status_code, 200) |
313 | 8 |
|
314 | 9 |
|
315 | 10 | class UnFlagPackage(TransactionTestCase): |
|
0 commit comments