Skip to content

Commit b4cefff

Browse files
committed
packages: port to pytest
1 parent f45be80 commit b4cefff

File tree

9 files changed

+292
-307
lines changed

9 files changed

+292
-307
lines changed

conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django.core.management import call_command
44

5+
from devel.models import UserProfile
56

67

78
@pytest.fixture
@@ -28,3 +29,11 @@ def groups(db):
2829
@pytest.fixture
2930
def staff_groups(db):
3031
call_command('loaddata', 'devel/fixtures/staff_groups.json')
32+
33+
34+
@pytest.fixture
35+
def admin_user_profile(admin_user):
36+
profile = UserProfile.objects.create(user=admin_user,
37+
public_email="[email protected]")
38+
yield profile
39+
profile.delete()

packages/tests.py

Lines changed: 2 additions & 307 deletions
Original file line numberDiff line numberDiff line change
@@ -1,315 +1,10 @@
1-
import unittest
2-
3-
from django.core import mail
4-
from django.test import TestCase, TransactionTestCase
1+
from django.test import TransactionTestCase
52
from django.contrib.auth.models import User
63

7-
from main.models import Package, Repo
4+
from main.models import Repo
85
from packages.models import PackageRelation
96
from devel.models import UserProfile
107

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': '[email protected]',
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': '[email protected]',
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)
3138

3149

31510
class UnFlagPackage(TransactionTestCase):
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from main.models import Package, Repo
2+
from packages.models import PackageRelation
3+
4+
5+
def request(client, pkgid, adopt=True):
6+
data = {
7+
'pkgid': pkgid,
8+
}
9+
if adopt:
10+
data['adopt'] = 'adopt'
11+
else:
12+
data['disown'] = 'disown'
13+
return client.post('/packages/update/', data, follow=True)
14+
15+
16+
17+
def test_wrong_request(admin_client, arches, repos, package):
18+
# TODO(jelle): fix
19+
pkg = Package.objects.first()
20+
response = admin_client.post('/packages/update/', {'pkgid': pkg.id, }, follow=True)
21+
assert response.status_code == 200
22+
assert 'Are you trying to adopt or disown' in response.content.decode()
23+
24+
25+
def test_stale_relations(admin_user_profile, admin_client, arches, repos, package):
26+
response = admin_client.get('/packages/stale_relations/')
27+
assert response.status_code == 200
28+
29+
30+
def test_no_permissions(admin_client, admin_user_profile, arches, repos, package):
31+
pkg = Package.objects.first()
32+
33+
response = request(admin_client, pkg.id)
34+
assert response.status_code == 200
35+
assert len(PackageRelation.objects.all()) == 0
36+
37+
38+
def test_adopt_package(admin_client, admin_user_profile, arches, repos, package):
39+
admin_user_profile.allowed_repos.add(Repo.objects.get(name='Core'))
40+
pkg = Package.objects.first()
41+
response = request(admin_client, pkg.id)
42+
assert response.status_code == 200
43+
assert len(PackageRelation.objects.all()) == 1
44+
45+
response = request(admin_client, pkg.id, False)
46+
assert response.status_code == 200
47+
assert len(PackageRelation.objects.all()) == 0

0 commit comments

Comments
 (0)