diff options
Diffstat (limited to 'tests/test_import_emails.py')
-rw-r--r-- | tests/test_import_emails.py | 116 |
1 files changed, 80 insertions, 36 deletions
diff --git a/tests/test_import_emails.py b/tests/test_import_emails.py index f576818..d1f57c2 100644 --- a/tests/test_import_emails.py +++ b/tests/test_import_emails.py @@ -6,9 +6,9 @@ import import_emails from django.conf import settings from django.test import TestCase +from django.contrib.auth.models import User from patchwork.models import Comment, Patch, Person, Project, State from linaro_metrics.models import Team, TeamCredit, TeamMembership -from linaro_metrics.sync_teams import get_or_create_person import mock @@ -42,12 +42,69 @@ class ImapFake(object): class TestImportEmail(TestCase): fixtures = ['default_states'] + def tearDown(self): + super(TestImportEmail, self).tearDown() + Person.objects.all().delete() + User.objects.all().delete() + def setUp(self): super(TestImportEmail, self).setUp() self.tmpdir = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.tmpdir) + self.user = User.objects.create( + email='user.name@linaro.org', + username='user.name', + first_name='User', + last_name='Name', + is_active=True + ) + + self.user2 = User.objects.create( + email='peter.maydell@linaro.org', + username='peter.maydell', + first_name='Peter', + last_name='Maydell', + is_active=True + ) + + self.person = Person.objects.create( + email='user.name@linaro.org', + name='User Name', + user=self.user + ) + + self.person2 = Person.objects.create( + email='user.name@kernel.org', + name='User Name', + user=self.user + ) + + self.person3 = Person.objects.create( + email='peter.maydell@linaro.org', + name='Peter Maydell', + user=self.user2 + ) + + self.person_other = Person.objects.create( + email='robh@kernel.org', + name='Rob Herring', + user=self.user + ) + + self.person_olof = Person.objects.create( + email='olof@lixom.net', + name='Olof Johansson', + user=self.user2 + ) + + self.notlinaro_person = Person.objects.create( + email='not@notlinaro.org', + name='Not Linaro', + user=None + ) + p = Project.objects.create(listid='lng-odp.lists.linaro.org') self.addCleanup(p.delete) @@ -89,21 +146,25 @@ class TestImportEmail(TestCase): settings.PARSEMAIL_MONKEY_PATCHER = 'tests.test_import_emails.ImapFake' self.assertEqual(ImapFake, import_emails.get_monkey_patcher()) - @mock.patch('linaro_metrics.parsemail.Crowd') - def test_monkey_patch_linaro_only(self, crowd): + def test_monkey_patch_linaro_only(self): '''Test that monkey patching rejects non-linaro patches''' - crowd().user_valid.return_value = False Project.objects.all().delete() with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch('non_linaro.mbox') self.assertEqual(0, Patch.objects.all().count()) - @mock.patch('linaro_metrics.parsemail.Crowd') - def test_monkey_patch_author_check_user_created(self, crowd): + def test_monkey_patch_author_check_user_created(self): '''Test that we can find the author from the patch comment. The author is linaro but doesn't exist locally''' Project.objects.all().delete() - crowd().get_user_no_cache.return_value = {'display-name': 'User Name'} + # junk + self.assertEqual(1, User.objects.filter(username='user.name').count()) + self.assertEqual( + Person.objects.filter(email='user.name@linaro.org').first().user, + User.objects.filter(username='user.name').first() + ) + # junk + with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch('author_submitter_differ.mbox') self.assertEqual(1, Patch.objects.all().count()) @@ -116,26 +177,22 @@ class TestImportEmail(TestCase): p = Project.objects.get(linkname=settings.DEFAULT_PROJECT) self.assertEqual(p, patches[0].project) - @mock.patch('linaro_metrics.parsemail.Crowd') - def test_monkey_patch_submitter_is_linaro(self, crowd): + def test_monkey_patch_submitter_is_linaro(self): '''A valid Linaro User may submit patches on behalf of a user. We have users that want to track these patches in our instance, but we SHOULD NOT contribute these to "team credits"''' Project.objects.all().delete() - crowd().get_user_no_cache.return_value = {'display-name': 'User Name'} with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch('applied-patch.mbox') self.assertEqual(0, Patch.objects.all().count()) tcs = TeamCredit.objects.all() self.assertEqual(0, tcs.count()) - @mock.patch('linaro_metrics.parsemail.Crowd') - def test_monkey_patch_maintainer_applied(self, crowd): + def test_monkey_patch_maintainer_applied(self): '''Don't give a patch credit to a maintainer applying a patch to a tree''' Project.objects.all().delete() - crowd().get_user_no_cache.return_value = {'display-name': 'User Name'} with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch('author_not_linaro.mbox') self.assertEqual(1, Patch.objects.all().count()) @@ -147,17 +204,14 @@ class TestImportEmail(TestCase): p = Project.objects.get(linkname=settings.DEFAULT_PROJECT) self.assertEqual(p, patches[0].project) - @mock.patch('linaro_metrics.parsemail.Crowd') - def _test_patch_auth(self, patch, author, crowd): + def _test_patch_auth(self, patch, author): Project.objects.all().delete() - Person.objects.all().delete() self.auth_found = None - def get_user_no_cache(email): - self.auth_found = email - return {'display-name': 'User Name'} + person = Person.objects.filter(email=author) + if person.count() > 0: + self.auth_found = person[0].email - crowd().get_user_no_cache = get_user_no_cache with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch(patch) self.assertEqual(1, Patch.objects.all().count()) @@ -180,31 +234,24 @@ class TestImportEmail(TestCase): self._test_patch_auth( 'cp8859.mbox', 'user.name@linaro.org') - with mock.patch('linaro_metrics.parsemail.Crowd') as crowd: - crowd().user_valid.return_value = False - with import_emails.get_monkey_patcher()(import_emails.parser): - self._import_patch('cp8859_comment.mbox') - self.assertEqual(1, Comment.objects.all().count()) + with import_emails.get_monkey_patcher()(import_emails.parser): + self._import_patch('cp8859_comment.mbox') + self.assertEqual(1, Comment.objects.all().count()) - @mock.patch('linaro_metrics.parsemail.Crowd') - def test_monkey_patch_user_is_linaro(self, crowd): + def test_monkey_patch_user_is_linaro(self): '''A valid Linaro User may submit patches from a non-linaro looking Person''' Project.objects.all().delete() def user_valid(email): return email.endswith('@linaro.org') - crowd().user_valid = user_valid - crowd().get_user_no_cache.return_value = {'display-name': 'User Name'} - person = get_or_create_person(crowd(), 'user.name@linaro.org') teams = [ Team.objects.create(name='foo'), Team.objects.create(name='bar'), ] for t in teams: - TeamMembership.objects.create(team=t, user=person.user) - Person.objects.create(email='robh@kernel.org', user=person.user) + TeamMembership.objects.create(team=t, user=self.user) with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch('user_linaro_not_person.mbox') @@ -212,15 +259,12 @@ class TestImportEmail(TestCase): tcs = [x.team for x in TeamCredit.objects.all()] self.assertEqual(teams, tcs) - @mock.patch('linaro_metrics.parsemail.Crowd') - def test_monkey_patch_no_listid(self, crowd): + def test_monkey_patch_no_listid(self): Project.objects.all().delete() qemu = Project.objects.create( name='qemu-devel', linkname='qemu-devel', listemail='qemu-devel@nongnu.org', listid='qemu-devel.nongnu.org') - crowd().get_user_no_cache.return_value = {'display-name': 'User Name'} - with import_emails.get_monkey_patcher()(import_emails.parser): self._import_patch('no-list-id.mbox') self.assertEqual(1, Patch.objects.all().count()) |