|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +"""Test module for Scroll Collection Proxy.""" |
| 3 | +import unittest |
| 4 | + |
| 5 | +from intercom import HttpError |
| 6 | +from intercom.client import Client |
| 7 | +from mock import call |
| 8 | +from mock import patch |
| 9 | +from nose.tools import assert_raises |
| 10 | +from nose.tools import eq_ |
| 11 | +from nose.tools import istest |
| 12 | +from tests.unit import users_scroll |
| 13 | + |
| 14 | + |
| 15 | +class CollectionProxyTest(unittest.TestCase): # noqa |
| 16 | + |
| 17 | + def setUp(self): # noqa |
| 18 | + self.client = Client() |
| 19 | + |
| 20 | + @istest |
| 21 | + def it_stops_iterating_if_no_users_returned(self): # noqa |
| 22 | + body = users_scroll(include_users=False) |
| 23 | + with patch.object(Client, 'get', return_value=body) as mock_method: |
| 24 | + emails = [user.email for user in self.client.users.scroll()] |
| 25 | + mock_method.assert_called('/users/scroll', {}) |
| 26 | + eq_(emails, []) # noqa |
| 27 | + |
| 28 | + @istest |
| 29 | + def it_keeps_iterating_if_users_returned(self): # noqa |
| 30 | + page1 = users_scroll(include_users=True) |
| 31 | + page2 = users_scroll(include_users=False) |
| 32 | + side_effect = [page1, page2] |
| 33 | + with patch.object(Client, 'get', side_effect=side_effect) as mock_method: # noqa |
| 34 | + emails = [user.email for user in self.client.users.scroll()] |
| 35 | + eq_([call('/users/scroll', {}), call('/users/scroll', {'scroll_param': 'da6bbbac-25f6-4f07-866b-b911082d7'})], # noqa |
| 36 | + mock_method.mock_calls) |
| 37 | + eq_(emails, ['user1@example.com', 'user2@example.com', 'user3@example.com']) # noqa |
| 38 | + |
| 39 | + @istest |
| 40 | + def it_supports_indexed_array_access(self): # noqa |
| 41 | + body = users_scroll(include_users=True) |
| 42 | + with patch.object(Client, 'get', return_value=body) as mock_method: |
| 43 | + eq_(self.client.users.scroll()[0].email, 'user1@example.com') |
| 44 | + mock_method.assert_called_once_with('/users/scroll', {}) |
| 45 | + eq_(self.client.users.scroll()[1].email, 'user2@example.com') |
| 46 | + |
| 47 | + @istest |
| 48 | + def it_returns_one_page_scroll(self): # noqa |
| 49 | + body = users_scroll(include_users=True) |
| 50 | + with patch.object(Client, 'get', return_value=body): |
| 51 | + scroll = self.client.users.scroll() |
| 52 | + scroll.get_next_page() |
| 53 | + emails = [user['email'] for user in scroll.resources] |
| 54 | + eq_(emails, ['user1@example.com', 'user2@example.com', 'user3@example.com']) # noqa |
| 55 | + |
| 56 | + @istest |
| 57 | + def it_keeps_iterating_if_called_with_scroll_param(self): # noqa |
| 58 | + page1 = users_scroll(include_users=True) |
| 59 | + page2 = users_scroll(include_users=False) |
| 60 | + side_effect = [page1, page2] |
| 61 | + with patch.object(Client, 'get', side_effect=side_effect) as mock_method: # noqa |
| 62 | + scroll = self.client.users.scroll() |
| 63 | + scroll.get_page() |
| 64 | + scroll.get_page('da6bbbac-25f6-4f07-866b-b911082d7') |
| 65 | + emails = [user['email'] for user in scroll.resources] |
| 66 | + eq_(emails, []) # noqa |
| 67 | + |
| 68 | + @istest |
| 69 | + def it_works_with_an_empty_list(self): # noqa |
| 70 | + body = users_scroll(include_users=False) |
| 71 | + with patch.object(Client, 'get', return_value=body) as mock_method: # noqa |
| 72 | + scroll = self.client.users.scroll() |
| 73 | + scroll.get_page() |
| 74 | + emails = [user['email'] for user in scroll.resources] |
| 75 | + eq_(emails, []) # noqa |
| 76 | + |
| 77 | + @istest |
| 78 | + def it_raises_an_http_error(self): # noqa |
| 79 | + with patch.object(Client, 'get', return_value=None) as mock_method: # noqa |
| 80 | + scroll = self.client.users.scroll() |
| 81 | + with assert_raises(HttpError): |
| 82 | + scroll.get_page() |
0 commit comments