[PATCH 07/11] tests: Additional rework of 'test_parser'
Stephen Finucane
stephen.finucane at intel.com
Wed Jul 13 19:40:56 AEST 2016
The 'test_parser' file was reworked in '?'. Extend this rework to
include refactoring of tests related to 'find_author'.
Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
---
patchwork/tests/test_parser.py | 173 ++++++++++++++++++++++------------------
1 files changed, 97 insertions(+), 76 deletions(-)
diff --git a/patchwork/tests/test_parser.py b/patchwork/tests/test_parser.py
index 5e94400..3ca049b 100644
--- a/patchwork/tests/test_parser.py
+++ b/patchwork/tests/test_parser.py
@@ -203,50 +203,119 @@ class UpdateCommentTest(InlinePatchTest):
class SenderEncodingTest(TestCase):
+ """Validate correct handling of encoded recipients."""
- sender_name = u'example user'
- sender_email = 'user at example.com'
- from_header = 'example user <user at example.com>'
-
- def setUp(self):
+ @staticmethod
+ def _create_email(from_header):
mail = 'Message-Id: %s\n' % make_msgid() + \
- 'From: %s\n' % self.from_header + \
+ 'From: %s\n' % from_header + \
'Subject: test\n\n' + \
'test'
- self.email = message_from_string(mail)
- self.person = find_author(self.email)
- self.person.save()
+ return message_from_string(mail)
- def test_name(self):
- self.assertEqual(self.person.name, self.sender_name)
+ def _test_encoding(self, from_header, sender_name, sender_email):
+ email = self._create_email(from_header)
+ person = find_author(email)
+ person.save()
+
+ # ensure it was parsed correctly
+ self.assertEqual(person.name, sender_name)
+ self.assertEqual(person.email, sender_email)
+
+ # ...and that it's queryable from DB
+ db_person = Person.objects.get(name=sender_name)
+ self.assertEqual(person, db_person)
+ db_person = Person.objects.get(email=sender_email)
+ self.assertEqual(person, db_person)
+
+ def test_ascii_encoding(self):
+ from_header = 'example user <user at example.com>'
+ sender_name = u'example user'
+ sender_email = 'user at example.com'
+ self._test_encoding(from_header, sender_name, sender_email)
+
+ def test_utf8qp_encoding(self):
+ from_header = '=?utf-8?q?=C3=A9xample=20user?= <user at example.com>'
+ sender_name = u'\xe9xample user'
+ sender_email = 'user at example.com'
+ self._test_encoding(from_header, sender_name, sender_email)
+
+ def test_utf8qp_split_encoding(self):
+ from_header = '=?utf-8?q?=C3=A9xample?= user <user at example.com>'
+ sender_name = u'\xe9xample user'
+ sender_email = 'user at example.com'
+ self._test_encoding(from_header, sender_name, sender_email)
+
+ def test_utf8b64_encoding(self):
+ from_header = '=?utf-8?B?w6l4YW1wbGUgdXNlcg==?= <user at example.com>'
+ sender_name = u'\xe9xample user'
+ sender_email = 'user at example.com'
+ self._test_encoding(from_header, sender_name, sender_email)
- def test_email(self):
- self.assertEqual(self.person.email, self.sender_email)
- def test_db_query_name(self):
- db_person = Person.objects.get(name=self.sender_name)
- self.assertEqual(self.person, db_person)
+class SenderCorrelationTest(TestCase):
+ """Validate correct behavior of the find_author case.
- def test_db_query_email(self):
- db_person = Person.objects.get(email=self.sender_email)
- self.assertEqual(self.person, db_person)
+ Relies of checking the internal state of a Django model object.
+ http://stackoverflow.com/a/19379636/613428
+ """
-class SenderUTF8QPEncodingTest(SenderEncodingTest):
+ @staticmethod
+ def _create_email(from_header):
+ mail = 'Message-Id: %s\n' % make_msgid() + \
+ 'From: %s\n' % from_header + \
+ 'Subject: Tests\n\n'\
+ 'test\n'
+ return message_from_string(mail)
- sender_name = u'\xe9xample user'
- from_header = '=?utf-8?q?=C3=A9xample=20user?= <user at example.com>'
+ def test_non_existing_sender(self):
+ sender = 'Non-existing Sender <nonexisting at example.com>'
+ mail = self._create_email(sender)
+ # don't create the person - attempt to find immediately
+ person = find_author(mail)
+ self.assertEqual(person._state.adding, True)
+ self.assertEqual(person.id, None)
+
+ def test_existing_sender(self):
+ sender = 'Existing Sender <existing at example.com>'
+ mail = self._create_email(sender)
+
+ # create the person first
+ person_a = find_author(mail)
+ person_a.save()
+
+ # then attempt to parse email with the same 'From' line
+ person_b = find_author(mail)
+ self.assertEqual(person_b._state.adding, False)
+ self.assertEqual(person_b.id, person_a.id)
-class SenderUTF8QPSplitEncodingTest(SenderEncodingTest):
+ def test_existing_different_format(self):
+ sender = 'Existing Sender <existing at example.com>'
+ mail = self._create_email(sender)
+
+ # create the person first
+ person_a = find_author(mail)
+ person_a.save()
- sender_name = u'\xe9xample user'
- from_header = '=?utf-8?q?=C3=A9xample?= user <user at example.com>'
+ # then attempt to parse email with a new 'From' line
+ mail = self._create_email('existing at example.com')
+ person_b = find_author(mail)
+ self.assertEqual(person_b._state.adding, False)
+ self.assertEqual(person_b.id, person_a.id)
+ def test_existing_different_case(self):
+ sender = 'Existing Sender <existing at example.com>'
+ mail = self._create_email(sender)
-class SenderUTF8B64EncodingTest(SenderUTF8QPEncodingTest):
+ person_a = find_author(mail)
+ person_a.save()
- from_header = '=?utf-8?B?w6l4YW1wbGUgdXNlcg==?= <user at example.com>'
+ mail = self._create_email(sender.upper())
+ person_b = find_author(mail)
+ self.assertEqual(person_b._state.adding, False)
+ self.assertEqual(person_b.id, person_a.id)
class SubjectEncodingTest(TestCase):
@@ -276,59 +345,11 @@ class SubjectEncodingTest(TestCase):
self._test_encoding(subject_header, subject)
def test_subject_utf8qp_multiple_encoding(self):
- subject = u'test s\xfcbject'
subject_header = 'test =?utf-8?q?s=c3=bcbject?='
+ subject = u'test s\xfcbject'
self._test_encoding(subject_header, subject)
-class SenderCorrelationTest(TestCase):
- """Validate correct behavior of the find_author case.
-
- Relies of checking the internal state of a Django model object.
-
- http://stackoverflow.com/a/19379636/613428
- """
-
- existing_sender = 'Existing Sender <existing at example.com>'
- non_existing_sender = 'Non-existing Sender <nonexisting at example.com>'
-
- @staticmethod
- def mail(sender):
- mail = 'Message-Id: %s\n' % make_msgid() + \
- 'From: %s\n' % sender + \
- 'Subject: Tests\n\n'\
- 'test\n'
- return message_from_string(mail)
-
- def setUp(self):
- self.existing_sender_mail = self.mail(self.existing_sender)
- self.non_existing_sender_mail = self.mail(self.non_existing_sender)
- self.person = find_author(self.existing_sender_mail)
- self.person.save()
-
- def test_existing_sender(self):
- person = find_author(self.existing_sender_mail)
- self.assertEqual(person._state.adding, False)
- self.assertEqual(person.id, self.person.id)
-
- def test_non_existing_sender(self):
- person = find_author(self.non_existing_sender_mail)
- self.assertEqual(person._state.adding, True)
- self.assertEqual(person.id, None)
-
- def test_existing_different_format(self):
- mail = self.mail('existing at example.com')
- person = find_author(mail)
- self.assertEqual(person._state.adding, False)
- self.assertEqual(person.id, self.person.id)
-
- def test_existing_different_case(self):
- mail = self.mail(self.existing_sender.upper())
- person = find_author(mail)
- self.assertEqual(person._state.adding, False)
- self.assertEqual(person.id, self.person.id)
-
-
class MultipleProjectPatchTest(TestCase):
"""Test that patches sent to multiple patchwork projects are
handled correctly."""
--
1.7.4.1
More information about the Patchwork
mailing list