From 840ff3684d2161f4748aac89b524b9c8a78c49a7 Mon Sep 17 00:00:00 2001 From: Jelle van der Waa Date: Mon, 12 Jun 2017 21:35:25 +0200 Subject: devel: Add reporead test Add a test for reporead import database functionality. Move tests for devel to a separate directory and depend on mock for patching the logging functonality. (Included by default in Python 3) --- devel/fixtures/core.db.tar.gz | Bin 0 -> 4099 bytes devel/tests.py | 121 ------------------------------------------ devel/tests/__init__.py | 0 devel/tests/test_reporead.py | 43 +++++++++++++++ devel/tests/test_user.py | 121 ++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 6 files changed, 165 insertions(+), 121 deletions(-) create mode 100644 devel/fixtures/core.db.tar.gz delete mode 100644 devel/tests.py create mode 100644 devel/tests/__init__.py create mode 100644 devel/tests/test_reporead.py create mode 100644 devel/tests/test_user.py diff --git a/devel/fixtures/core.db.tar.gz b/devel/fixtures/core.db.tar.gz new file mode 100644 index 00000000..f532fa73 Binary files /dev/null and b/devel/fixtures/core.db.tar.gz differ diff --git a/devel/tests.py b/devel/tests.py deleted file mode 100644 index 03351f57..00000000 --- a/devel/tests.py +++ /dev/null @@ -1,121 +0,0 @@ -from django.contrib.auth.models import User -from django.test import TestCase - -from .utils import UserFinder -from .models import UserProfile - -class DevelTest(TestCase): - def test_index(self): - response = self.client.get('/devel/') - self.assertEqual(response.status_code, 302) - self.assertEqual(response.has_header('Location'), True) - self.assertEqual(response['location'], - 'http://testserver/login/?next=/devel/') - - def test_profile(self): - response = self.client.get('/devel/profile/') - self.assertEqual(response.status_code, 302) - self.assertEqual(response.has_header('Location'), True) - self.assertEqual(response['location'], - 'http://testserver/login/?next=/devel/profile/') - - def test_newuser(self): - response = self.client.get('/devel/newuser/') - self.assertEqual(response.status_code, 302) - self.assertEqual(response.has_header('Location'), True) - self.assertEqual(response['location'], - 'http://testserver/login/?next=/devel/newuser/') - - def test_mirrors(self): - response = self.client.get('/mirrors/') - self.assertEqual(response.status_code, 200) - - def test_admin_log(self): - user = User.objects.create_superuser('admin', 'admin@archlinux.org', 'admin') - response = self.client.post('/login/', {'username': 'admin', 'password': 'admin'}) - response = self.client.get('/devel/admin_log', follow=True) - self.assertEqual(response.status_code, 200) - -class FindUserTest(TestCase): - - def setUp(self): - self.finder = UserFinder() - - self.user1 = User.objects.create(username="joeuser", first_name="Joe", - last_name="User", email="user1@example.com") - self.user2 = User.objects.create(username="john", first_name="John", - last_name="", email="user2@example.com") - self.user3 = User.objects.create(username="bjones", first_name="Bob", - last_name="Jones", email="user3@example.com") - - for user in (self.user1, self.user2, self.user3): - email_addr = "%s@awesome.com" % user.username - UserProfile.objects.create(user=user, public_email=email_addr) - - self.user4 = User.objects.create(username="tim1", first_name="Tim", - last_name="One", email="tim@example.com") - self.user5 = User.objects.create(username="tim2", first_name="Tim", - last_name="Two", email="timtwo@example.com") - - def test_not_matching(self): - self.assertIsNone(self.finder.find(None)) - self.assertIsNone(self.finder.find("")) - self.assertIsNone(self.finder.find("Bogus")) - self.assertIsNone(self.finder.find("Bogus ")) - self.assertIsNone(self.finder.find("")) - self.assertIsNone(self.finder.find("bogus@example.com")) - self.assertIsNone(self.finder.find("Unknown Packager")) - - def test_by_email(self): - self.assertEqual(self.user1, - self.finder.find("XXX YYY ")) - self.assertEqual(self.user2, - self.finder.find("YYY ZZZ ")) - - def test_by_profile_email(self): - self.assertEqual(self.user1, - self.finder.find("XXX ")) - self.assertEqual(self.user2, - self.finder.find("YYY ")) - self.assertEqual(self.user3, - self.finder.find("ZZZ ")) - - def test_by_name(self): - self.assertEqual(self.user1, - self.finder.find("Joe User ")) - self.assertEqual(self.user1, - self.finder.find("Joe User")) - self.assertEqual(self.user2, - self.finder.find("John ")) - self.assertEqual(self.user2, - self.finder.find("John")) - self.assertEqual(self.user3, - self.finder.find("Bob Jones ")) - - def test_by_invalid(self): - self.assertEqual(self.user1, - self.finder.find("Joe User ")) - self.assertEqual(self.user3, - self.finder.find("Bob Jones ")) - - def test_ambiguous(self): - self.assertEqual(self.user4, - self.finder.find("Tim One ")) - self.assertEqual(self.user5, - self.finder.find("Tim Two ")) - self.assertIsNone(self.finder.find("Tim ")) - -# vim: set ts=4 sw=4 et: diff --git a/devel/tests/__init__.py b/devel/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/devel/tests/test_reporead.py b/devel/tests/test_reporead.py new file mode 100644 index 00000000..4e542f4c --- /dev/null +++ b/devel/tests/test_reporead.py @@ -0,0 +1,43 @@ +import tarfile +from mock import patch + + +from django.core.management import call_command +from django.core.management.base import CommandError +from django.test import TransactionTestCase +from django.utils.six import StringIO + + +from main.models import Package + + +# Django's TestCase is wrapped in transaction, therefore use TransactionTestCase +class RepoReadTest(TransactionTestCase): + fixtures = ['main/fixtures/arches.json', 'main/fixtures/repos.json'] + + def test_invalid_args(self): + with self.assertRaises(CommandError) as e: + call_command('reporead') + self.assertIn('Architecture is required', str(e.exception)) + + with self.assertRaises(CommandError) as e: + call_command('reporead', 'x86_64') + self.assertIn('Package database file is required.', str(e.exception)) + + with self.assertRaises(CommandError) as e: + call_command('reporead', 'x86_64', 'nothing.db.tar.gz') + self.assertIn('Specified package database file does not exist.', str(e.exception)) + + def test_read_packages(self): + out = StringIO() + with patch('devel.management.commands.reporead.logger') as logger: + call_command('reporead', 'x86_64', 'devel/fixtures/core.db.tar.gz') + logger.info.assert_called() + + # Verify contents + with tarfile.open('devel/fixtures/core.db.tar.gz') as tar: + files = [name.replace('core.db/', '') for name in tar.getnames() if name != 'core.db' and not 'desc' in name] + + packages = Package.objects.all() + import_packages = ["{}-{}-{}".format(pkg.pkgname, pkg.pkgver, pkg.pkgrel) for pkg in packages] + self.assertItemsEqual(files, import_packages) diff --git a/devel/tests/test_user.py b/devel/tests/test_user.py new file mode 100644 index 00000000..88713bfb --- /dev/null +++ b/devel/tests/test_user.py @@ -0,0 +1,121 @@ +from django.contrib.auth.models import User +from django.test import TestCase + +from devel.utils import UserFinder +from devel.models import UserProfile + +class DevelTest(TestCase): + def test_index(self): + response = self.client.get('/devel/') + self.assertEqual(response.status_code, 302) + self.assertEqual(response.has_header('Location'), True) + self.assertEqual(response['location'], + 'http://testserver/login/?next=/devel/') + + def test_profile(self): + response = self.client.get('/devel/profile/') + self.assertEqual(response.status_code, 302) + self.assertEqual(response.has_header('Location'), True) + self.assertEqual(response['location'], + 'http://testserver/login/?next=/devel/profile/') + + def test_newuser(self): + response = self.client.get('/devel/newuser/') + self.assertEqual(response.status_code, 302) + self.assertEqual(response.has_header('Location'), True) + self.assertEqual(response['location'], + 'http://testserver/login/?next=/devel/newuser/') + + def test_mirrors(self): + response = self.client.get('/mirrors/') + self.assertEqual(response.status_code, 200) + + def test_admin_log(self): + user = User.objects.create_superuser('admin', 'admin@archlinux.org', 'admin') + response = self.client.post('/login/', {'username': 'admin', 'password': 'admin'}) + response = self.client.get('/devel/admin_log', follow=True) + self.assertEqual(response.status_code, 200) + +class FindUserTest(TestCase): + + def setUp(self): + self.finder = UserFinder() + + self.user1 = User.objects.create(username="joeuser", first_name="Joe", + last_name="User", email="user1@example.com") + self.user2 = User.objects.create(username="john", first_name="John", + last_name="", email="user2@example.com") + self.user3 = User.objects.create(username="bjones", first_name="Bob", + last_name="Jones", email="user3@example.com") + + for user in (self.user1, self.user2, self.user3): + email_addr = "%s@awesome.com" % user.username + UserProfile.objects.create(user=user, public_email=email_addr) + + self.user4 = User.objects.create(username="tim1", first_name="Tim", + last_name="One", email="tim@example.com") + self.user5 = User.objects.create(username="tim2", first_name="Tim", + last_name="Two", email="timtwo@example.com") + + def test_not_matching(self): + self.assertIsNone(self.finder.find(None)) + self.assertIsNone(self.finder.find("")) + self.assertIsNone(self.finder.find("Bogus")) + self.assertIsNone(self.finder.find("Bogus ")) + self.assertIsNone(self.finder.find("")) + self.assertIsNone(self.finder.find("bogus@example.com")) + self.assertIsNone(self.finder.find("Unknown Packager")) + + def test_by_email(self): + self.assertEqual(self.user1, + self.finder.find("XXX YYY ")) + self.assertEqual(self.user2, + self.finder.find("YYY ZZZ ")) + + def test_by_profile_email(self): + self.assertEqual(self.user1, + self.finder.find("XXX ")) + self.assertEqual(self.user2, + self.finder.find("YYY ")) + self.assertEqual(self.user3, + self.finder.find("ZZZ ")) + + def test_by_name(self): + self.assertEqual(self.user1, + self.finder.find("Joe User ")) + self.assertEqual(self.user1, + self.finder.find("Joe User")) + self.assertEqual(self.user2, + self.finder.find("John ")) + self.assertEqual(self.user2, + self.finder.find("John")) + self.assertEqual(self.user3, + self.finder.find("Bob Jones ")) + + def test_by_invalid(self): + self.assertEqual(self.user1, + self.finder.find("Joe User ")) + self.assertEqual(self.user3, + self.finder.find("Bob Jones ")) + + def test_ambiguous(self): + self.assertEqual(self.user4, + self.finder.find("Tim One ")) + self.assertEqual(self.user5, + self.finder.find("Tim Two ")) + self.assertIsNone(self.finder.find("Tim ")) + +# vim: set ts=4 sw=4 et: diff --git a/requirements.txt b/requirements.txt index f47573fd..d5a4f3c0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ django-countries==3.3 jsmin==2.2.2 pgpdump==1.5 pytz>=2015.4 +mock==2.0.0 -- cgit v1.2.3-55-g3dc8