summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2015-10-14 14:35:16 +0200
committerFolker Bernitt <fbernitt@thoughtworks.com>2015-10-14 14:35:16 +0200
commit3863e28bf593591b1b323f8b848233b9e6a1947b (patch)
tree57e3d82b3ae72216120974869cda974ab8976667
parent79053219e55be1ddce6297d0c5eb296776b161b6 (diff)
Support reply to mail sent by me
- Issue #491
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py15
-rw-r--r--service/test/unit/adapter/mailstore/test_leap_mail.py38
2 files changed, 47 insertions, 6 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py
index f3351dbd..ec8407a7 100644
--- a/service/pixelated/adapter/mailstore/leap_mailstore.py
+++ b/service/pixelated/adapter/mailstore/leap_mailstore.py
@@ -147,15 +147,26 @@ class LeapMail(Mail):
sender_mail = InputMail.FROM_EMAIL_ADDRESS
recipients = self._decoded_header_utf_8(self._reply_recipient('To'))
- recipients.append(sender_mail)
+ if not self._parsed_mail_matches(sender_mail, InputMail.FROM_EMAIL_ADDRESS) or len(recipients) == 0:
+ recipients.append(sender_mail)
recipients = self.remove_duplicates(recipients)
ccs = self._decoded_header_utf_8(self._reply_recipient('Cc'))
- result['single'] = sender_mail
+ result['single'] = self._single_reply_recipient(recipients, sender_mail)
result['all']['to-field'] = recipients
result['all']['cc-field'] = ccs
return result
+ def _single_reply_recipient(self, recipients, sender_mail):
+ """
+ Currently the domain model expects only one single recipient for reply action. But it should support an array,
+ or even better: there should not be any conceptual difference between reply and reply all for this logic
+ """
+ if self._parsed_mail_matches(sender_mail, InputMail.FROM_EMAIL_ADDRESS):
+ return recipients[0]
+ else:
+ return sender_mail
+
def remove_duplicates(self, recipients):
return list(set(recipients))
diff --git a/service/test/unit/adapter/mailstore/test_leap_mail.py b/service/test/unit/adapter/mailstore/test_leap_mail.py
index 224d1e1e..ef585654 100644
--- a/service/test/unit/adapter/mailstore/test_leap_mail.py
+++ b/service/test/unit/adapter/mailstore/test_leap_mail.py
@@ -116,7 +116,7 @@ class TestLeapMail(TestCase):
self.assertEqual([expected_address], mail.as_dict()['replying']['all']['cc-field'])
self.assertEqual(expected_address, mail.as_dict()['replying']['single'])
- def test_reply_result_does_not_contain_own_address_in_to_with_spaces(self):
+ def test_reply_all_result_does_not_contain_own_address_in_to_with_spaces(self):
my_address = 'myaddress@example.test'
with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
@@ -126,7 +126,7 @@ class TestLeapMail(TestCase):
self.assertEqual(['receiver@example.test', 'test@example.test'], mail.as_dict()['replying']['all']['to-field'])
- def test_reply_result_does_not_contain_own_address_in_to_with_name(self):
+ def test_reply_all_result_does_not_contain_own_address_in_to_with_name(self):
my_address = 'myaddress@example.test'
with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
@@ -136,7 +136,7 @@ class TestLeapMail(TestCase):
self.assertEqual(['receiver@example.test', 'test@example.test'], mail.as_dict()['replying']['all']['to-field'])
- def test_reply_result_does_not_contain_own_address_in_to_with_encoded(self):
+ def test_reply_all_result_does_not_contain_own_address_in_to_with_encoded(self):
my_address = 'myaddress@example.test'
with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
@@ -146,7 +146,7 @@ class TestLeapMail(TestCase):
self.assertEqual(['receiver@example.test', 'test@example.test'], mail.as_dict()['replying']['all']['to-field'])
- def test_reply_result_does_not_contain_own_address_in_cc(self):
+ def test_reply_all_result_does_not_contain_own_address_in_cc(self):
my_address = 'myaddress@example.test'
with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
@@ -157,6 +157,36 @@ class TestLeapMail(TestCase):
self.assertEqual([], mail.as_dict()['replying']['all']['cc-field'])
+ def test_reply_all_result_does_not_contain_own_address_if_sender(self):
+ my_address = 'myaddress@example.test'
+
+ with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
+ mail = LeapMail('', 'INBOX',
+ {'From': 'myaddress@example.test',
+ 'To': 'receiver@example.test'})
+
+ self.assertEqual(['receiver@example.test'], mail.as_dict()['replying']['all']['to-field'])
+
+ def test_reply_all_result_does_contain_own_address_if_only_recipient(self):
+ my_address = 'myaddress@example.test'
+
+ with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
+ mail = LeapMail('', 'INBOX',
+ {'From': 'myaddress@example.test',
+ 'To': 'myaddress@example.test'})
+
+ self.assertEqual(['myaddress@example.test'], mail.as_dict()['replying']['all']['to-field'])
+
+ def test_reply_result_swaps_sender_and_recipient_if_i_am_the_sender(self):
+ my_address = 'myaddress@example.test'
+
+ with patch('pixelated.adapter.mailstore.leap_mailstore.InputMail.FROM_EMAIL_ADDRESS', my_address):
+ mail = LeapMail('', 'INBOX',
+ {'From': 'myaddress@example.test',
+ 'To': 'recipient@example.test'})
+
+ self.assertEqual('recipient@example.test', mail.as_dict()['replying']['single'])
+
def test_as_dict_with_mixed_encodings(self):
subject = 'Another test with =?iso-8859-1?B?3G1s5Px0?= =?iso-8859-1?Q?s?='
mail = LeapMail('', 'INBOX',