class ContactManagerTest(unittest.TestCase):
    def setUp(self):
        gan_token = 'h027MapNNujPH0gV+sXAdmzZTDffHOpJEHaBtrD3NXtNqI4dT3NLXhyTwiZr7PUOGZJNSGv/b9xVyaguX0nDrONGhudPkxtl5EoXrM4SOZHswebpSy2ehh0edrGVF7dVJVZLIlRwgViY3n3/2hMQ5Njp9JFywnOy7gMeaoKw0hYLRbd+wVqvl2oOnspXwGTTcZ9Y+cdP8jIhUUoXOieXst0IXVclAHXa+K1d15gKLcpmXzK+jx14wGEmb4t8MSU'
        self.api = Api(token=gan_token)
        self.contact_manager = ContactManager(self.api)
        self.start_path = '/v3'

    @all_requests
    def get_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        status_code = 200
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"Test","last_name":"Tester","email":"*****@*****.**","created":"2016-02-05T16:21:41","updated":"2016-02-08T14:40:17","attributes":{},"lists":[],"active":true}'
        return {'status_code': status_code,
                'content': content}

    def test_get_existing_contact(self):
        with HTTMock(self.get_contact_mock):
            contact = self.contact_manager.get('*****@*****.**')
        contact_obj = {'first_name': u'Test',
                       'last_name': u'Tester',
                       'created': u'2016-02-05T16:21:41',
                       'url': u'https://api.getanewsletter.com/v3/contacts/[email protected]/',
                       'updated': u'2016-02-05T16:21:41',
                       'lists': [],
                       '_persisted': True,
                       'active': True,
                       'attributes': {},
                       'email': u'*****@*****.**'}

        self.assertEqual(contact.first_name, contact_obj['first_name'])
        self.assertEqual(contact.email, contact_obj['email'])
        self.assertTrue(contact.is_persisted())

    @all_requests
    def non_existing_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        status_code = 404
        content = '{"detail":"Not found."}'
        return {'status_code': status_code,
                'content': content}

    def test_non_existing_contact(self):
        with HTTMock(self.non_existing_contact_mock):
            self.assertRaises(HTTPError, self.contact_manager.get, '*****@*****.**')

    @all_requests
    def create_new_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/')
        self.assertEqual(request.body, '{"attributes": {}, "first_name": "John", "email": "*****@*****.**", "lists": []}')
        status_code = 201
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"John","last_name":"","email":"*****@*****.**","created":"2016-02-08T10:38:50","updated":"2016-02-09T09:44:06.399013","attributes":{},"lists":[],"active":true}'
        return {'status_code': status_code,
                'content': content}

    def test_create_new_contact(self):
        contact = self.contact_manager.create()
        contact.email = '*****@*****.**'
        contact.first_name = 'John'
        with HTTMock(self.create_new_contact_mock):
            saved_contact = contact.save()
        self.assertTrue(isinstance(saved_contact, Contact))

    @all_requests
    def save_existing_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        self.assertEqual(request.body, '{"attributes": {}, "first_name": "John", "email": "*****@*****.**", "lists": []}')
        self.assertEqual(request.method, 'PATCH')
        status_code = 200
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"John","last_name":"","email":"*****@*****.**","created":"2016-02-08T10:38:50","updated":"2016-02-09T09:48:51.340060","attributes":{},"lists":[],"active":true}'
        return {'status_code': status_code,
                'content': content}

    def test_save_existing_contact(self):
        contact = self.contact_manager.create()
        contact.email = '*****@*****.**'
        contact.first_name = 'John'
        contact.set_persisted()
        with HTTMock(self.save_existing_contact_mock):
            saved_contact = contact.save()
        self.assertTrue(isinstance(saved_contact, Contact))

    def test_update_without_email(self):
        contact = self.contact_manager.create()
        contact.first_name = 'John'
        contact.set_persisted()
        self.assertRaises(GanException, contact.save)

    @all_requests
    def overwrite_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        self.assertEqual(request.method, 'PUT')
        status_code = 200
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"John","last_name":"","email":"*****@*****.**","created":"2016-02-08T10:38:50","updated":"2016-02-09T10:00:31.428342","attributes":{},"lists":[],"active":true}'
        return {'status_code': status_code,
                'content': content}

    def test_overwrite_contact(self):
        contact = self.contact_manager.create()
        contact.email = '*****@*****.**'
        contact.first_name = 'John'
        with HTTMock(self.overwrite_contact_mock):
            overwritten_contact = contact.overwrite()
        self.assertTrue(isinstance(overwritten_contact, Contact))

    @all_requests
    def find_contact_by_query_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/')
        status_code = 200
        content = '{"count":1,"next":null,"previous":null,"results":[{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"John","last_name":"","email":"*****@*****.**","created":"2016-02-08T10:38:50","updated":"2016-02-09T10:00:31","attributes":{},"lists":[],"active":true}]}'
        return {'status_code': status_code,
                'content': content}

    def test_find_contact_by_query(self):
        query = {
            'search_email': 'test@',
            'page': 1
        }
        with HTTMock(self.find_contact_by_query_mock):
            result = self.contact_manager.query(filters=query)
            contacts = result.entities
        self.assertEqual(len(contacts), 1)
        self.assertEqual(contacts[0].email, '*****@*****.**')

    @all_requests
    def delete_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        self.assertEqual(request.method, 'DELETE')
        status_code = 204
        content = ''
        return {'status_code': status_code,
                'content': content}

    def test_delete_contact(self):
        contact = self.contact_manager.create()
        contact.email = '*****@*****.**'
        with HTTMock(self.delete_contact_mock):
            deleted_contact_response = contact.delete()
            self.assertEqual(deleted_contact_response.status_code, 204)
 def setUp(self):
     gan_token = 'h027MapNNujPH0gV+sXAdmzZTDffHOpJEHaBtrD3NXtNqI4dT3NLXhyTwiZr7PUOGZJNSGv/b9xVyaguX0nDrONGhudPkxtl5EoXrM4SOZHswebpSy2ehh0edrGVF7dVJVZLIlRwgViY3n3/2hMQ5Njp9JFywnOy7gMeaoKw0hYLRbd+wVqvl2oOnspXwGTTcZ9Y+cdP8jIhUUoXOieXst0IXVclAHXa+K1d15gKLcpmXzK+jx14wGEmb4t8MSU'
     self.api = Api(token=gan_token)
     self.contact_manager = ContactManager(self.api)
     self.start_path = '/v3'
Esempio n. 3
0
class ContactTest(unittest.TestCase):
    def setUp(self):
        gan_token = 'h027MapNNujPH0gV+sXAdmzZTDffHOpJEHaBtrD3NXtNqI4dT3NLXhyTwiZr7PUOGZJNSGv/b9xVyaguX0nDrONGhudPkxtl5EoXrM4SOZHswebpSy2ehh0edrGVF7dVJVZLIlRwgViY3n3/2hMQ5Njp9JFywnOy7gMeaoKw0hYLRbd+wVqvl2oOnspXwGTTcZ9Y+cdP8jIhUUoXOieXst0IXVclAHXa+K1d15gKLcpmXzK+jx14wGEmb4t8MSU'
        self.api = Api(token=gan_token)
        self.contact_manager = ContactManager(self.api)
        self.list_manager = ListManager(self.api)
        self.start_path = '/v3'

    @all_requests
    def contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/')
        payload = '{"attributes": {}, "email": "*****@*****.**", "lists": []}'
        self.assertEqual(request.body, payload)
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"","last_name":"","email":"*****@*****.**","created":"2016-02-08T14:48:24","updated":"2016-02-09T09:09:28.878356","attributes":{},"lists":[],"active":true}'
        return {'status_code': 201,
                'content': content}

    @all_requests
    def subscribed_contact_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"","last_name":"","email":"*****@*****.**","created":"2016-02-08T14:48:24","updated":"2016-02-09T09:17:10.869772","attributes":{},"lists":[{"subscription_cancelled":null,"subscription_id":136363367,"hash":"2anfLVM","name":"Test list","subscription_created":"2016-02-09T08:17:10Z"}],"active":true}'
        status_code = 200
        return {'status_code': status_code,
                'content': content}

    @all_requests
    def contact_unsubscribe_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        payload = '{"attributes": {}, "email": "*****@*****.**", "lists": [{"hash": "2anfLVM", "name": "Test list", "subscription_cancelled": null, "subscription_created": "2016-02-09T08:17:10Z", "cancelled": true, "subscription_id": 136363367}]}'
        self.assertEqual(request.body, payload)
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"","last_name":"","email":"*****@*****.**","created":"2016-02-08T14:48:24","updated":"2016-02-09T09:09:28.878356","attributes":{},"lists":[{"subscription_cancelled":"2016-02-15T06:50:44Z","subscription_id":136363367,"hash":"2anfLVM","name":"Test list","subscription_created":"2016-02-09T08:17:10Z"}],"active":true}'
        return {'status_code': 201,
                'content': content}

    def test_subscribe_to_list(self):
        new_contact = self.contact_manager.create()
        new_contact.email = '*****@*****.**'
        with HTTMock(self.contact_mock):
            new_contact = new_contact.save()
        self.assertEqual(new_contact.lists, [])

        list = self.list_manager.construct_entity({'hash': '2anfLVM'})
        new_contact.subscribe_to(list)
        self.assertEqual(len(new_contact.lists), 1)
        with HTTMock(self.subscribed_contact_mock):
            saved_contact = new_contact.save()
        self.assertEqual(saved_contact.lists[0]['hash'], '2anfLVM')

    def test_unsubcribe_from_list(self):
        new_contact = self.contact_manager.create()
        new_contact.email = '*****@*****.**'
        with HTTMock(self.contact_mock):
            new_contact = new_contact.save()
        self.assertEqual(new_contact.lists, [])

        list = self.list_manager.construct_entity({'hash': '2anfLVM'})
        new_contact.subscribe_to(list)
        self.assertEqual(len(new_contact.lists), 1)
        with HTTMock(self.subscribed_contact_mock):
            saved_contact = new_contact.save()
        self.assertEqual(saved_contact.lists[0]['hash'], '2anfLVM')

        with HTTMock(self.contact_unsubscribe_mock):
            saved_contact.unsubscribe_from(list)
            new_contact = saved_contact.save()
            self.assertEqual(len(new_contact.lists), 1)
            self.assertEqual(new_contact.lists[0]['hash'], '2anfLVM')
            self.assertEqual(new_contact.lists[0]['subscription_cancelled'], u'2016-02-15T06:50:44Z')

    @all_requests
    def contact_remove_sub_mock(self, url, request):
        self.assertEqual(url.path, self.start_path + '/contacts/[email protected]/')
        payload = '{"attributes": {}, "email": "*****@*****.**", "lists": []}'
        self.assertEqual(request.body, payload)
        content = '{"url":"https://api.getanewsletter.com/v3/contacts/[email protected]/","first_name":"","last_name":"","email":"*****@*****.**","created":"2016-02-08T14:48:24","updated":"2016-02-09T09:09:28.878356","attributes":{},"lists":[],"active":true}'
        return {'status_code': 201,
                'content': content}

    def tests_remove_subscription(self):
        new_contact = self.contact_manager.create()
        new_contact.email = '*****@*****.**'
        with HTTMock(self.contact_mock):
            new_contact = new_contact.save()
        self.assertEqual(new_contact.lists, [])

        list = self.list_manager.construct_entity({'hash': '2anfLVM'})
        new_contact.subscribe_to(list)
        self.assertEqual(len(new_contact.lists), 1)
        with HTTMock(self.subscribed_contact_mock):
            saved_contact = new_contact.save()
        self.assertEqual(saved_contact.lists[0]['hash'], '2anfLVM')

        with HTTMock(self.contact_remove_sub_mock):
            saved_contact.delete_subscription_from(list)
            saved_contact = saved_contact.save()
        self.assertEqual(len(saved_contact.lists), 0)