Skip to content

Commit 3d4827c

Browse files
committed
Port remainder to pytest
1 parent 8b21e12 commit 3d4827c

File tree

10 files changed

+391
-377
lines changed

10 files changed

+391
-377
lines changed

conftest.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,9 @@ def repos(db):
2323

2424

2525
@pytest.fixture
26-
def package(db):
27-
# TODO(jelle): create own parameter based version
28-
from main.models import Package
29-
print(list(Package.objects.all()))
26+
def package(db, arches, repos):
27+
# TODO: convert to create_package with standard parameters
3028
call_command('loaddata', 'main/fixtures/package.json')
31-
print(list(Package.objects.all()))
3229

3330

3431
@pytest.fixture
@@ -41,22 +38,23 @@ def staff_groups(db):
4138
call_command('loaddata', 'devel/fixtures/staff_groups.json')
4239

4340

44-
# TODO: test with non-admin user fixture
4541
@pytest.fixture
46-
def admin_user_profile(admin_user, arches, repos):
47-
profile = UserProfile.objects.create(user=admin_user,
48-
public_email="[email protected]")
42+
def user(django_user_model):
43+
user = django_user_model.objects.create_user(username=USERNAME, password=USERNAME)
44+
yield user
45+
user.delete()
46+
47+
48+
@pytest.fixture
49+
def userprofile(user):
50+
profile = UserProfile.objects.create(user=user,
51+
public_email=f'{user.username}@archlinux.org')
4952
yield profile
5053
profile.delete()
5154

5255

5356
@pytest.fixture
54-
def user_client(client, django_user_model, groups):
55-
user = django_user_model.objects.create_user(username=USERNAME, password=USERNAME)
56-
profile = UserProfile.objects.create(user=user,
57-
public_email="{}@archlinux.org".format(user.username))
57+
def user_client(client, user, userprofile, groups):
5858
user.groups.add(Group.objects.get(name='Developers'))
5959
client.login(username=USERNAME, password=USERNAME)
60-
yield client
61-
profile.delete()
62-
user.delete()
60+
return client

devel/tests/test_devel.py

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,14 @@
1-
from django.test import TransactionTestCase
2-
from django.contrib.auth.models import User, Group
3-
from devel.models import UserProfile
1+
def test_clock(user_client):
2+
response = user_client.get('/devel/clock/')
3+
assert response.status_code == 200
44

55

6-
class DevelView(TransactionTestCase):
7-
fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json',
8-
'main/fixtures/package.json']
6+
def test_profile(user_client):
7+
response = user_client.get('/devel/profile/')
8+
assert response.status_code == 200
9+
# Test changing
910

10-
def setUp(self):
11-
password = 'test'
12-
self.user = User.objects.create_superuser('admin',
13-
14-
password)
15-
for name in ['Developers', 'Retired Developers']:
16-
Group.objects.create(name=name)
17-
self.user.groups.add(Group.objects.get(name='Developers'))
18-
self.user.save()
19-
self.profile = UserProfile.objects.create(user=self.user,
20-
public_email="{}@awesome.com".format(self.user.username))
21-
self.client.post('/login/', {
22-
'username': self.user.username,
23-
'password': password
24-
})
2511

26-
def tearDown(self):
27-
self.profile.delete()
28-
self.user.delete()
29-
Group.objects.all().delete()
30-
31-
def test_clock(self):
32-
response = self.client.get('/devel/clock/')
33-
self.assertEqual(response.status_code, 200)
34-
35-
def test_profile(self):
36-
response = self.client.get('/devel/profile/')
37-
self.assertEqual(response.status_code, 200)
38-
# Test changing
39-
40-
def test_stats(self):
41-
response = self.client.get('/devel/stats/')
42-
self.assertEqual(response.status_code, 200)
12+
def test_stats(user_client):
13+
response = user_client.get('/devel/stats/')
14+
assert response.status_code == 200

devel/tests/test_reporead.py

Lines changed: 87 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -2,93 +2,106 @@
22
from unittest.mock import patch
33
from datetime import datetime
44

5+
import pytest
56

67
from django.core.management import call_command
78
from django.core.management.base import CommandError
8-
from django.test import TransactionTestCase
99
from django.utils import timezone
1010

1111

1212
from main.models import Arch, Package, Repo
1313
from packages.models import FlagRequest
1414

1515

16-
# Django's TestCase is wrapped in transaction, therefore use TransactionTestCase
17-
class RepoReadTest(TransactionTestCase):
18-
fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json']
16+
@pytest.fixture
17+
def create_pkg(arches, repos):
18+
packages = []
1919

20-
def create_pkg(self, repo=None, pkgver='4.10.1', pkgrel='1'):
20+
def _create_pkg(repo=None, pkgver='4.10.1', pkgrel='1'):
2121
if not repo:
2222
repo = Repo.objects.get(name__iexact='core')
2323

2424
arch = Arch.objects.get(name__iexact='any')
2525
now = datetime.now(tz=timezone.utc)
26-
return Package.objects.create(arch=arch, repo=repo, pkgname='systemd',
27-
pkgbase='systemd', pkgver=pkgver,
28-
pkgrel=pkgrel, pkgdesc='Linux kernel',
29-
compressed_size=10, installed_size=20,
30-
last_update=now, created=now)
31-
32-
def test_invalid_args(self):
33-
with self.assertRaises(CommandError) as e:
34-
call_command('reporead')
35-
self.assertIn('missing arch and file.', str(e.exception))
36-
37-
with self.assertRaises(CommandError) as e:
38-
call_command('reporead', 'x86_64')
39-
self.assertIn('Package database file is required.', str(e.exception))
40-
41-
with self.assertRaises(CommandError) as e:
42-
call_command('reporead', 'x86_64', 'nothing.db.tar.gz')
43-
self.assertIn('Specified package database file does not exist.', str(e.exception))
44-
45-
def test_invalid_arch(self):
46-
with self.assertRaises(CommandError) as e:
47-
call_command('reporead', 'armv64', 'devel/fixtures/core.db.tar.gz')
48-
self.assertEqual('Specified architecture armv64 is not currently known.', str(e.exception))
49-
50-
def test_read_packages(self):
51-
with patch('devel.management.commands.reporead.logger') as logger:
52-
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
53-
logger.info.assert_called()
54-
55-
# Verify contents
56-
with tarfile.open('devel/fixtures/core.db.tar.gz') as tar:
57-
files = [name.replace('core.db/', '') for name in tar.getnames() if name != 'core.db' and not 'desc' in name]
58-
59-
packages = Package.objects.all()
60-
import_packages = ["{}-{}-{}".format(pkg.pkgname, pkg.pkgver, pkg.pkgrel) for pkg in packages]
61-
self.assertCountEqual(files, import_packages)
62-
63-
def test_flagoutofdate(self):
64-
pkg = self.create_pkg()
65-
FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo,
66-
pkgver=pkg.pkgver, epoch=pkg.epoch,
67-
ip_address='1.1.1.1')
68-
69-
with patch('devel.management.commands.reporead.logger') as logger:
70-
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
71-
logger.info.assert_called()
72-
73-
self.assertEqual(len(FlagRequest.objects.all()), 0)
74-
75-
def test_flagoutofdate_staging(self):
76-
staging = Repo.objects.get(name__iexact='staging')
77-
78-
pkg = self.create_pkg()
79-
staging_pkg = self.create_pkg(repo=staging, pkgrel='2')
80-
81-
FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo,
82-
pkgver=pkg.pkgver, epoch=pkg.epoch,
83-
ip_address='1.1.1.1')
84-
FlagRequest.objects.create(pkgbase=staging_pkg.pkgbase, repo=staging_pkg.repo,
85-
pkgver=staging_pkg.pkgver, epoch=staging_pkg.epoch,
86-
ip_address='1.1.1.1')
87-
88-
with patch('devel.management.commands.reporead.logger') as logger:
89-
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
90-
logger.info.assert_called()
91-
92-
objects = FlagRequest.objects.all()
93-
self.assertEqual(len(objects), 1)
94-
self.assertEqual(objects[0].pkgver, staging_pkg.pkgver)
26+
package = Package.objects.create(arch=arch, repo=repo, pkgname='systemd',
27+
pkgbase='systemd', pkgver=pkgver,
28+
pkgrel=pkgrel, pkgdesc='Linux kernel',
29+
compressed_size=10, installed_size=20,
30+
last_update=now, created=now)
31+
packages.append(package)
32+
return package
33+
34+
yield _create_pkg
35+
36+
for package in packages:
37+
package.delete()
38+
39+
40+
def test_invalid_args():
41+
with pytest.raises(CommandError) as excinfo:
42+
call_command('reporead')
43+
assert 'missing arch and file.' in str(excinfo)
44+
45+
with pytest.raises(CommandError) as excinfo:
46+
call_command('reporead', 'x86_64')
47+
assert 'Package database file is required.' in str(excinfo)
48+
49+
with pytest.raises(CommandError) as excinfo:
50+
call_command('reporead', 'x86_64', 'nothing.db.tar.gz')
51+
assert 'Specified package database file does not exist.' in str(excinfo)
52+
53+
54+
def test_invalid_arch(transactional_db, arches, repos):
55+
with pytest.raises(CommandError) as excinfo:
56+
call_command('reporead', 'armv64', 'devel/fixtures/core.db.tar.gz')
57+
assert 'Specified architecture armv64 is not currently known.' in str(excinfo)
58+
59+
60+
# TODO: create pacman repo db with a pytest fixture
61+
def test_read_packages(transactional_db, arches, repos):
62+
with patch('devel.management.commands.reporead.logger') as logger:
63+
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
64+
logger.info.assert_called()
65+
66+
# Verify contents
67+
with tarfile.open('devel/fixtures/core.db.tar.gz') as tar:
68+
files = [name.replace('core.db/', '') for name in tar.getnames() if name != 'core.db' and not 'desc' in name]
69+
70+
packages = Package.objects.all()
71+
import_packages = ["{}-{}-{}".format(pkg.pkgname, pkg.pkgver, pkg.pkgrel) for pkg in packages]
72+
assert len(files) == len(import_packages)
73+
74+
75+
def test_flagoutofdate(transactional_db, create_pkg):
76+
pkg = create_pkg()
77+
FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo,
78+
pkgver=pkg.pkgver, epoch=pkg.epoch,
79+
ip_address='1.1.1.1')
80+
81+
with patch('devel.management.commands.reporead.logger') as logger:
82+
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
83+
logger.info.assert_called()
84+
85+
assert not len(FlagRequest.objects.all())
86+
87+
88+
def test_flagoutofdate_staging(transactional_db, create_pkg):
89+
staging = Repo.objects.get(name__iexact='staging')
90+
91+
pkg = create_pkg()
92+
staging_pkg = create_pkg(repo=staging, pkgrel='2')
93+
94+
FlagRequest.objects.create(pkgbase=pkg.pkgbase, repo=pkg.repo,
95+
pkgver=pkg.pkgver, epoch=pkg.epoch,
96+
ip_address='1.1.1.1')
97+
FlagRequest.objects.create(pkgbase=staging_pkg.pkgbase, repo=staging_pkg.repo,
98+
pkgver=staging_pkg.pkgver, epoch=staging_pkg.epoch,
99+
ip_address='1.1.1.1')
100+
101+
with patch('devel.management.commands.reporead.logger') as logger:
102+
call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz')
103+
logger.info.assert_called()
104+
105+
objects = FlagRequest.objects.all()
106+
assert len(objects) == 1
107+
assert objects[0].pkgver == staging_pkg.pkgver

0 commit comments

Comments
 (0)