def test_duplicate_comment(self): diff = read_patch('0001-add-line.patch') m1 = create_email(diff, listid=self.listid, msgid='*****@*****.**') _parse_mail(m1) m2 = create_email('test', listid=self.listid, msgid='*****@*****.**', in_reply_to='*****@*****.**') self._test_duplicate_mail(m2) self.assertEqual(Patch.objects.count(), 1) self.assertEqual(PatchComment.objects.count(), 1)
def _test_duplicate_mail(self, mail): errors = [] def log_query_errors(execute, sql, params, many, context): try: result = execute(sql, params, many, context) except Exception as e: errors.append(e) raise return result _parse_mail(mail) with self.assertRaises(DuplicateMailError): with connection.execute_wrapper(log_query_errors): # If we see any database errors from the duplicate insert # (typically an IntegrityError), the insert will abort the # current transaction. This atomic() ensures that we can # recover, and perform subsequent queries. with atomic(): _parse_mail(mail) self.assertEqual(errors, [])
def parse_mail(*args, **kwargs): create_state() return _parse_mail(*args, **kwargs)