import unittest from messagebird import Client, ErrorException try: from unittest.mock import Mock except ImportError: # mock was added to unittest in Python 3.3, but was an external library # before. from mock import Mock class TestContact(unittest.TestCase): def test_contact(self): http_client = Mock() http_client.request.return_value = '{"id": "contact-id","href": "https://rest.messagebird.com/contacts/contact-id","msisdn": 31612345678,"firstName": "Foo","lastName": "Bar","customDetails": {"custom1": "First","custom2": "Second","custom3": "Third","custom4": "Fourth"},"groups": {"totalCount": 3,"href": "https://rest.messagebird.com/contacts/contact-id/groups"},"messages": {"totalCount": 5,"href": "https://rest.messagebird.com/contacts/contact-id/messages"},"createdDatetime": "2018-07-13T10:34:08+00:00","updatedDatetime": "2018-07-13T10:44:08+00:00"}' contact = Client('', http_client).contact('contact-id') http_client.request.assert_called_once_with('contacts/contact-id', 'GET', None) self.assertEqual(31612345678, contact.msisdn) self.assertEqual('First', contact.customDetails.custom1) self.assertEqual(3, contact.groups.totalCount) self.assertEqual('https://rest.messagebird.com/contacts/contact-id/messages', contact.messages.href) def test_contact_create(self): http_client = Mock() http_client.request.return_value = '{}' Client('', http_client).contact_create(31612345678, {'firstName': 'Foo', 'custom3': 'Third'}) http_client.request.assert_called_once_with( 'contacts', 'POST', {'msisdn': 31612345678, 'firstName': 'Foo', 'custom3': 'Third'}) def test_contact_delete(self): http_client = Mock() http_client.request.return_value = '' Client('', http_client).contact_delete('contact-id') http_client.request.assert_called_once_with('contacts/contact-id', 'DELETE', None) def test_contact_delete_invalid(self): http_client = Mock() http_client.request.return_value = '{"errors": [{"code": 20,"description": "contact not found","parameter": null}]}' with self.assertRaises(ErrorException): Client('', http_client).contact_delete('non-existent-contact-id') http_client.request.assert_called_once_with('contacts/non-existent-contact-id', 'DELETE', None) def test_contact_update(self): http_client = Mock() http_client.request.return_value = '' Client('', http_client).contact_update('contact-id', {'msisdn': 31687654321, 'custom4': 'fourth'}) http_client.request.assert_called_once_with( 'contacts/contact-id', 'PATCH', {'msisdn': 31687654321, 'custom4': 'fourth'} ) def test_contact_list(self): http_client = Mock() http_client.request.return_value = '{"offset": 0,"limit": 20,"count": 2,"totalCount": 2,"links": {"first": "https://rest.messagebird.com/contacts?offset=0","previous": null,"next": null,"last": "https://rest.messagebird.com/contacts?offset=0"},"items": [{"id": "first-id","href": "https://rest.messagebird.com/contacts/first-id","msisdn": 31612345678,"firstName": "Foo","lastName": "Bar","customDetails": {"custom1": null,"custom2": null,"custom3": null,"custom4": null},"groups": {"totalCount": 0,"href": "https://rest.messagebird.com/contacts/first-id/groups"},"messages": {"totalCount": 0,"href": "https://rest.messagebird.com/contacts/first-id/messages"},"createdDatetime": "2018-07-13T10:34:08+00:00","updatedDatetime": "2018-07-13T10:34:08+00:00"},{"id": "second-id","href": "https://rest.messagebird.com/contacts/second-id","msisdn": 49612345678,"firstName": "Hello","lastName": "World","customDetails": {"custom1": null,"custom2": null,"custom3": null,"custom4": null},"groups": {"totalCount": 0,"href": "https://rest.messagebird.com/contacts/second-id/groups"},"messages": {"totalCount": 0,"href": "https://rest.messagebird.com/contacts/second-id/messages"},"createdDatetime": "2018-07-13T10:33:52+00:00","updatedDatetime": null}]}' contact_list = Client('', http_client).contact_list(10, 20) http_client.request.assert_called_once_with('contacts?limit=10&offset=20', 'GET', None) self.assertEqual(2, contact_list.totalCount) self.assertEqual('https://rest.messagebird.com/contacts?offset=0', contact_list.links.first) self.assertEqual('https://rest.messagebird.com/contacts/first-id/groups', contact_list.items[0].groups.href)