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)
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)
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)
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)
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)))
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)
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)))
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)
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)
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)
def test_empty(self): email = self._create_email('') with self.assertRaises(ValueError): get_or_create_author(email)