class MailingMessageCollectionTest(unittest.TestCase): def setUp(self): Account.default_adapter = MockAdapter self.messages = Mailing( Account(account_id="100", public_key="xxx", private_key="yyy"), { 'mailing_id': 200 }).messages def test_can_get_personalized_message_by_member_id(self): del (self.messages.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.messages.find_one_by_member_id(1024) self.assertEquals(self.messages.mailing.account.adapter.called, 0) def test_can_get_personalized_message_by_member_id2(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals(self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {})) self.assertIsInstance(result, Message) def test_can_get_personalized_message_by_member_id3(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024, pmt.Html) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals(self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', { 'type': "html" })) self.assertIsInstance(result, Message) def test_can_get_personalized_message_by_member_id4(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024, pmt.PlainText) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals(self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', { 'type': "plaintext" })) self.assertIsInstance(result, Message) def test_can_get_personalized_message_by_member_id5(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024, pmt.Subject) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals(self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', { 'type': "subject" })) self.assertIsInstance(result, Message) def test_find_one_by_member_id_populates_collection(self): # Setup MockAdapter.expected = {'subject': "Test Subject"} self.messages.find_one_by_member_id(1024) self.assertIn(1024, self.messages) self.assertIsInstance(self.messages[1024], Message) def test_find_one_by_member_id_caches_result(self): # Setup MockAdapter.expected = {'subject': "Test Subject"} self.messages.find_one_by_member_id(1024) self.messages.find_one_by_member_id(1024) self.assertEquals(self.messages.mailing.account.adapter.called, 1) def test_dictionary_access_lazy_loads_by_member_id(self): # Setup MockAdapter.expected = {'subject': "Test Subject"} message = self.messages[1024] self.assertIn(1024, self.messages) self.assertIsInstance(message, Message) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals(self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {})) def test_dictionary_access_lazy_loads_by_member_id2(self): # Setup MockAdapter.expected = None message = self.messages.get(1024) self.assertEquals(0, len(self.messages)) self.assertIsNone(message) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals(self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {}))
class MailingMessageCollectionTest(unittest.TestCase): def setUp(self): Account.default_adapter = MockAdapter self.messages = Mailing( Account(account_id="100", public_key="xxx", private_key="yyy"), {'mailing_id':200} ).messages def test_can_get_personalized_message_by_member_id(self): del(self.messages.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.messages.find_one_by_member_id(1024) self.assertEquals(self.messages.mailing.account.adapter.called, 0) def test_can_get_personalized_message_by_member_id2(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals( self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {})) self.assertIsInstance(result, Message) def test_can_get_personalized_message_by_member_id3(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024, pmt.Html) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals( self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {'type':"html"})) self.assertIsInstance(result, Message) def test_can_get_personalized_message_by_member_id4(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024, pmt.PlainText) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals( self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {'type':"plaintext"})) self.assertIsInstance(result, Message) def test_can_get_personalized_message_by_member_id5(self): MockAdapter.expected = {'subject': "Test Subject"} result = self.messages.find_one_by_member_id(1024, pmt.Subject) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals( self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {'type':"subject"})) self.assertIsInstance(result, Message) def test_find_one_by_member_id_populates_collection(self): # Setup MockAdapter.expected = {'subject': "Test Subject"} self.messages.find_one_by_member_id(1024) self.assertIn(1024, self.messages) self.assertIsInstance(self.messages[1024], Message) def test_find_one_by_member_id_caches_result(self): # Setup MockAdapter.expected = {'subject': "Test Subject"} self.messages.find_one_by_member_id(1024) self.messages.find_one_by_member_id(1024) self.assertEquals(self.messages.mailing.account.adapter.called, 1) def test_dictionary_access_lazy_loads_by_member_id(self): # Setup MockAdapter.expected = {'subject': "Test Subject"} message = self.messages[1024] self.assertIn(1024, self.messages) self.assertIsInstance(message, Message) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals( self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {})) def test_dictionary_access_lazy_loads_by_member_id2(self): # Setup MockAdapter.expected = None message = self.messages.get(1024) self.assertEquals(0, len(self.messages)) self.assertIsNone(message) self.assertEquals(self.messages.mailing.account.adapter.called, 1) self.assertEquals( self.messages.mailing.account.adapter.call, ('GET', '/mailings/200/messages/1024', {}))
class MailingTest(unittest.TestCase): def setUp(self): Account.default_adapter = MockAdapter self.mailing = Mailing( Account(account_id="100", public_key="xxx", private_key="yyy"), { 'mailing_id': 200, 'delivery_ts': datetime.now().strftime(SERIALIZED_DATETIME_FORMAT), 'clicked': None, 'opened': None, 'forwarded': None, 'shared': None, 'sent': datetime.now().strftime(SERIALIZED_DATETIME_FORMAT) }) def test_can_parse_special_fields_correctly(self): self.assertIsInstance(self.mailing['delivery_ts'], datetime) self.assertIsInstance(self.mailing['sent'], datetime) self.assertIsNone(self.mailing.get('clicked')) self.assertIsNone(self.mailing.get('opened')) self.assertIsNone(self.mailing.get('forwarded')) self.assertIsNone(self.mailing.get('shared')) def test_can_update_the_status_of_a_mailing(self): with self.assertRaises(KeyError): self.mailing.update_status(MailingStatus.Failed) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_update_the_status_of_a_mailing2(self): del (self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.update_status(MailingStatus.Failed) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_update_the_status_of_a_mailing3(self): MockAdapter.expected = MailingStatus.Paused result = self.mailing.update_status(MailingStatus.Paused) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('PUT', '/mailings/200', { 'status': "paused" })) self.assertIsNone(result) self.assertEquals(self.mailing['status'], MailingStatus.Paused) def test_can_archive_a_mailing(self): MockAdapter.expected = False with self.assertRaises(ex.MailingArchiveError): self.mailing.archive() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('DELETE', '/mailings/200', {})) def test_can_archive_a_mailing2(self): MockAdapter.expected = True result = self.mailing.archive() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('DELETE', '/mailings/200', {})) self.assertIsNone(result) def test_can_archive_a_mailing3(self): del (self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.archive() self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_archive_a_mailing4(self): self.mailing['archived_ts'] = datetime.now() result = self.mailing.archive() self.assertIsNone(result) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_cancel_a_mailing(self): MockAdapter.expected = False with self.assertRaises(ex.MailingCancelError): self.mailing.cancel() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('DELETE', '/mailings/cancel/200', {})) def test_can_cancel_a_mailing2(self): MockAdapter.expected = True result = self.mailing.cancel() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('DELETE', '/mailings/cancel/200', {})) self.assertIsNone(result) def test_can_cancel_a_mailing3(self): del (self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.cancel() self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_send_mailing_to_additional_targets(self): # Setup MockAdapter.expected = {'mailing_id': 201} mailing_id = self.mailing.send_additional(["*****@*****.**"]) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"] })) self.assertEquals(201, mailing_id) def test_can_send_mailing_to_additional_targets2(self): # Setup MockAdapter.expected = None mailing_id = self.mailing.send_additional(["*****@*****.**"]) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"] })) self.assertIsNone(mailing_id) def test_can_send_mailing_to_additional_targets3(self): # Setup MockAdapter.expected = None mailing_id = self.mailing.send_additional(["*****@*****.**"], "*****@*****.**", ["*****@*****.**"], [300, 301], [400, 401]) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"], "sender": "*****@*****.**", "heads_up_emails": ["*****@*****.**"], "recipient_groups": [300, 301], "recipient_searches": [400, 401] })) self.assertIsNone(mailing_id) def test_can_send_mailing_to_additional_targets4(self): # Setup MockAdapter.expected = None mailing_id = self.mailing.send_additional( recipient_emails=["*****@*****.**"], sender="*****@*****.**", heads_up_emails=["*****@*****.**"], recipient_groups=[300, 301], recipient_searches=[400, 401]) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"], "sender": "*****@*****.**", "heads_up_emails": ["*****@*****.**"], "recipient_groups": [300, 301], "recipient_searches": [400, 401] })) self.assertIsNone(mailing_id) def test_can_send_mailing_to_additional_targets5(self): del (self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.send_additional(["*****@*****.**"]) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_send_mailing_to_additional_targets6(self): mailing_id = self.mailing.send_additional() self.assertEquals(self.mailing.account.adapter.called, 0) self.assertIsNone(mailing_id) def test_can_get_heads_up_emails(self): del (self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_get_heads_up_emails2(self): MockAdapter.expected = None emails = self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('GET', '/mailings/200/headsup', {})) self.assertIsNone(emails) def test_can_get_heads_up_emails3(self): MockAdapter.expected = [] emails = self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('GET', '/mailings/200/headsup', {})) self.assertIsInstance(emails, list) def test_can_get_heads_up_emails4(self): MockAdapter.expected = ["*****@*****.**", "*****@*****.**"] emails = self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('GET', '/mailings/200/headsup', {})) self.assertIsInstance(emails, list) self.assertEquals(2, len(emails)) self.assertEquals("*****@*****.**", emails[0]) self.assertEquals("*****@*****.**", emails[1]) def test_can_force_split_test_winner(self): # Setup MockAdapter.expected = True result = self.mailing.force_split_test_winner(1024) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals(self.mailing.account.adapter.call, ('POST', '/mailings/200/winner/1024', {})) self.assertIsNone(result) def test_can_force_split_test_winner2(self): del (self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.force_split_test_winner(1024) self.assertEquals(self.mailing.account.adapter.called, 0)
class MailingTest(unittest.TestCase): def setUp(self): Account.default_adapter = MockAdapter self.mailing = Mailing( Account(account_id="100", public_key="xxx", private_key="yyy"), { 'mailing_id': 200, 'delivery_ts': datetime.now().strftime(SERIALIZED_DATETIME_FORMAT), 'clicked': None, 'opened': None, 'forwarded': None, 'shared': None, 'sent': datetime.now().strftime(SERIALIZED_DATETIME_FORMAT) } ) def test_can_parse_special_fields_correctly(self): self.assertIsInstance(self.mailing['delivery_ts'], datetime) self.assertIsInstance(self.mailing['sent'], datetime) self.assertIsNone(self.mailing.get('clicked')) self.assertIsNone(self.mailing.get('opened')) self.assertIsNone(self.mailing.get('forwarded')) self.assertIsNone(self.mailing.get('shared')) def test_can_update_the_status_of_a_mailing(self): with self.assertRaises(KeyError): self.mailing.update_status(MailingStatus.Failed) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_update_the_status_of_a_mailing2(self): del(self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.update_status(MailingStatus.Failed) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_update_the_status_of_a_mailing3(self): MockAdapter.expected = MailingStatus.Paused result = self.mailing.update_status(MailingStatus.Paused) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('PUT', '/mailings/200', {'status':"paused"})) self.assertIsNone(result) self.assertEquals(self.mailing['status'], MailingStatus.Paused) def test_can_archive_a_mailing(self): MockAdapter.expected = False with self.assertRaises(ex.MailingArchiveError): self.mailing.archive() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('DELETE', '/mailings/200', {})) def test_can_archive_a_mailing2(self): MockAdapter.expected = True result = self.mailing.archive() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('DELETE', '/mailings/200', {})) self.assertIsNone(result) def test_can_archive_a_mailing3(self): del(self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.archive() self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_archive_a_mailing4(self): self.mailing['archived_ts'] = datetime.now() result = self.mailing.archive() self.assertIsNone(result) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_cancel_a_mailing(self): MockAdapter.expected = False with self.assertRaises(ex.MailingCancelError): self.mailing.cancel() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('DELETE', '/mailings/cancel/200', {})) def test_can_cancel_a_mailing2(self): MockAdapter.expected = True result = self.mailing.cancel() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('DELETE', '/mailings/cancel/200', {})) self.assertIsNone(result) def test_can_cancel_a_mailing3(self): del(self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.cancel() self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_send_mailing_to_additional_targets(self): # Setup MockAdapter.expected = {'mailing_id': 201} mailing_id = self.mailing.send_additional(["*****@*****.**"]) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ( 'POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"] })) self.assertEquals(201, mailing_id) def test_can_send_mailing_to_additional_targets2(self): # Setup MockAdapter.expected = None mailing_id = self.mailing.send_additional(["*****@*****.**"]) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ( 'POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"] })) self.assertIsNone(mailing_id) def test_can_send_mailing_to_additional_targets3(self): # Setup MockAdapter.expected = None mailing_id = self.mailing.send_additional( ["*****@*****.**"], "*****@*****.**", ["*****@*****.**"], [300, 301], [400, 401] ) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ( 'POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"], "sender": "*****@*****.**", "heads_up_emails": ["*****@*****.**"], "recipient_groups": [300, 301], "recipient_searches": [400, 401] })) self.assertIsNone(mailing_id) def test_can_send_mailing_to_additional_targets4(self): # Setup MockAdapter.expected = None mailing_id = self.mailing.send_additional( recipient_emails=["*****@*****.**"], sender="*****@*****.**", heads_up_emails=["*****@*****.**"], recipient_groups=[300, 301], recipient_searches=[400, 401] ) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ( 'POST', '/mailings/200', { "recipient_emails": ["*****@*****.**"], "sender": "*****@*****.**", "heads_up_emails": ["*****@*****.**"], "recipient_groups": [300, 301], "recipient_searches": [400, 401] })) self.assertIsNone(mailing_id) def test_can_send_mailing_to_additional_targets5(self): del(self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.send_additional(["*****@*****.**"]) self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_send_mailing_to_additional_targets6(self): mailing_id = self.mailing.send_additional() self.assertEquals(self.mailing.account.adapter.called, 0) self.assertIsNone(mailing_id) def test_can_get_heads_up_emails(self): del(self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 0) def test_can_get_heads_up_emails2(self): MockAdapter.expected = None emails = self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('GET', '/mailings/200/headsup', {})) self.assertIsNone(emails) def test_can_get_heads_up_emails3(self): MockAdapter.expected = [] emails = self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('GET', '/mailings/200/headsup', {})) self.assertIsInstance(emails, list) def test_can_get_heads_up_emails4(self): MockAdapter.expected = ["*****@*****.**", "*****@*****.**"] emails = self.mailing.get_heads_up_emails() self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('GET', '/mailings/200/headsup', {})) self.assertIsInstance(emails, list) self.assertEquals(2, len(emails)) self.assertEquals("*****@*****.**", emails[0]) self.assertEquals("*****@*****.**", emails[1]) def test_can_force_split_test_winner(self): # Setup MockAdapter.expected = True result = self.mailing.force_split_test_winner(1024) self.assertEquals(self.mailing.account.adapter.called, 1) self.assertEquals( self.mailing.account.adapter.call, ('POST', '/mailings/200/winner/1024', {})) self.assertIsNone(result) def test_can_force_split_test_winner2(self): del(self.mailing['mailing_id']) with self.assertRaises(ex.NoMailingIdError): self.mailing.force_split_test_winner(1024) self.assertEquals(self.mailing.account.adapter.called, 0)