Пример #1
0
    def test_mailman_dmarc_munging(self):
        project = create_project()
        real_sender = 'Existing Sender <*****@*****.**>'
        munged_sender = 'Existing Sender via List <{}>'.format(
            project.listemail)
        other_email = 'Other Person <*****@*****.**>'

        # Unmunged author
        mail = self._create_email(real_sender)
        person_a = get_or_create_author(mail, project)
        person_a.save()

        # Single Reply-To
        mail = self._create_email(munged_sender, [real_sender])
        person_b = get_or_create_author(mail, project)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)

        # Single Cc
        mail = self._create_email(munged_sender, [], [real_sender])
        person_b = get_or_create_author(mail, project)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)

        # Multiple Reply-Tos and Ccs
        mail = self._create_email(munged_sender, [other_email, real_sender],
                                  [other_email, other_email])
        person_b = get_or_create_author(mail, project)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #2
0
    def test_existing_different_case(self):
        sender = 'Existing Sender <*****@*****.**>'
        mail = self._create_email(sender)

        person_a = get_or_create_author(mail)
        person_a.save()

        mail = self._create_email(sender.upper())
        person_b = get_or_create_author(mail)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #3
0
    def test_existing_different_case(self):
        sender = 'Existing Sender <*****@*****.**>'
        mail = self._create_email(sender)

        person_a = get_or_create_author(mail)
        person_a.save()

        mail = self._create_email(sender.upper())
        person_b = get_or_create_author(mail)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #4
0
    def test_existing_sender(self):
        sender = 'Existing Sender <*****@*****.**>'
        mail = self._create_email(sender)

        # create the person first
        person_a = get_or_create_author(mail)
        person_a.save()

        # then attempt to parse email with the same 'From' line
        person_b = get_or_create_author(mail)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #5
0
    def test_existing_sender(self):
        sender = 'Existing Sender <*****@*****.**>'
        mail = self._create_email(sender)

        # create the person first
        person_a = get_or_create_author(mail)
        person_a.save()

        # then attempt to parse email with the same 'From' line
        person_b = get_or_create_author(mail)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #6
0
    def test_nested_series(self):
        """Handle a series sent in-reply-to an existing series."""
        # create an old series with a "cover letter"
        msgids = [make_msgid()]
        project = create_project()
        series_v1 = create_series(project=project)
        create_series_reference(msgid=msgids[0], series=series_v1)

        # ...and three patches
        for i in range(3):
            msgids.append(make_msgid())
            create_series_reference(msgid=msgids[-1], series=series_v1)

        # now create a new series with "cover letter"
        msgids.append(make_msgid())
        series_v2 = create_series(project=project)
        ref_v2 = create_series_reference(msgid=msgids[-1], series=series_v2)

        # ...and the "first patch" of this new series
        msgid = make_msgid()
        email = self._create_email(msgid, msgids)
        series = find_series(project, email, get_or_create_author(email))

        # this should link to the second series - not the first
        self.assertEqual(len(msgids), 4 + 1)  # old series + new cover
        self.assertEqual(series, ref_v2.series)
Пример #7
0
    def test_new_series(self):
        msgid = make_msgid()
        email = self._create_email(msgid)
        project = create_project()

        self.assertIsNone(find_series(project, email,
                                      get_or_create_author(email)))
Пример #8
0
    def test_google_dmarc_munging(self):
        project = create_project()
        real_sender = 'Existing Sender <*****@*****.**>'
        munged_sender = "'Existing Sender' via List <{}>".format(
            project.listemail)

        # Unmunged author
        mail = self._create_email(real_sender)
        person_a = get_or_create_author(mail, project)
        person_a.save()

        # X-Original-From header
        mail = self._create_email(munged_sender, None, None, real_sender)
        person_b = get_or_create_author(mail, project)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #9
0
    def test_nested_series(self):
        """Handle a series sent in-reply-to an existing series."""
        # create an old series with a "cover letter"
        msgids = [make_msgid()]
        project = create_project()
        series_v1 = create_series(project=project)
        create_series_reference(msgid=msgids[0], series=series_v1)

        # ...and three patches
        for i in range(3):
            msgids.append(make_msgid())
            create_series_reference(msgid=msgids[-1], series=series_v1)

        # now create a new series with "cover letter"
        msgids.append(make_msgid())
        series_v2 = create_series(project=project)
        ref_v2 = create_series_reference(msgid=msgids[-1], series=series_v2)

        # ...and the "first patch" of this new series
        msgid = make_msgid()
        email = self._create_email(msgid, msgids)
        series = find_series(project, email, get_or_create_author(email))

        # this should link to the second series - not the first
        self.assertEqual(len(msgids), 4 + 1)  # old series + new cover
        self.assertEqual(series, ref_v2.series)
Пример #10
0
    def test_new_series(self):
        msgid = make_msgid()
        email = self._create_email(msgid)
        project = create_project()

        self.assertIsNone(
            find_series(project, email, get_or_create_author(email)))
Пример #11
0
    def test_first_reply(self):
        msgid_a = make_msgid()
        msgid_b = make_msgid()
        email = self._create_email(msgid_b, [msgid_a])

        # assume msgid_a was already handled
        ref = create_series_reference(msgid=msgid_a)

        series = find_series(ref.series.project, email,
                             get_or_create_author(email))
        self.assertEqual(series, ref.series)
Пример #12
0
    def test_first_reply(self):
        msgid_a = make_msgid()
        msgid_b = make_msgid()
        email = self._create_email(msgid_b, [msgid_a])

        # assume msgid_a was already handled
        ref = create_series_reference(msgid=msgid_a)

        series = find_series(ref.series.project, email,
                             get_or_create_author(email))
        self.assertEqual(series, ref.series)
Пример #13
0
    def test_weird_dmarc_munging(self):
        project = create_project()
        real_sender = 'Existing Sender <*****@*****.**>'
        munged_sender1 = "'Existing Sender' via <{}>".format(project.listemail)
        munged_sender2 = "'Existing Sender' <{}>".format(project.listemail)

        # Unmunged author
        mail = self._create_email(real_sender)
        person_a = get_or_create_author(mail, project)
        person_a.save()

        # Munged with no list name
        mail = self._create_email(munged_sender1, None, None, real_sender)
        person_b = get_or_create_author(mail, project)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)

        # Munged with no 'via'
        mail = self._create_email(munged_sender2, None, None, real_sender)
        person_b = get_or_create_author(mail, project)
        self.assertEqual(person_b._state.adding, False)
        self.assertEqual(person_b.id, person_a.id)
Пример #14
0
    def _test_encoding(self, from_header, sender_name, sender_email):
        email = self._create_email(from_header)
        person = get_or_create_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)
Пример #15
0
    def _test_encoding(self, from_header, sender_name, sender_email):
        email = self._create_email(from_header)
        person = get_or_create_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)
Пример #16
0
 def test_empty(self):
     email = self._create_email('')
     with self.assertRaises(ValueError):
         get_or_create_author(email)
Пример #17
0
 def test_empty(self):
     email = self._create_email('')
     with self.assertRaises(ValueError):
         get_or_create_author(email)