def test_get_resource_api_keys_is_cached(self): ex = MagicMock() ds = DataStore(ex) ex.get.return_value = { 'href': 'https://www.example.com/applications/APPLICATION_ID/apiKeys', 'items': [{ 'href': 'http://example.com/apiKeys/KEY_ID', 'id': 'KEY_ID', 'secret': 'KEY_SECRET' }] } ds.get_resource( 'https://www.example.com/applications/APPLICATION_ID/apiKeys', {'id': 'KEY_ID'}) ex.get.assert_called_once_with( 'https://www.example.com/applications/APPLICATION_ID/apiKeys', params={'id': 'KEY_ID'}) self.assertEqual( ds._cache_get('http://example.com/apiKeys/KEY_ID'), { 'secret': 'KEY_SECRET', 'href': 'http://example.com/apiKeys/KEY_ID', 'id': 'KEY_ID' })
def test_get_resource_api_keys_is_cached(self): ex = MagicMock() ds = DataStore(ex) ex.get.return_value = { 'href': 'https://www.example.com/applications/APPLICATION_ID/apiKeys', 'items': [ { 'href': 'http://example.com/apiKeys/KEY_ID', 'id': 'KEY_ID', 'secret': 'KEY_SECRET' } ] } ds.get_resource( 'https://www.example.com/applications/APPLICATION_ID/apiKeys', {'id': 'KEY_ID'}) ex.get.assert_called_once_with( 'https://www.example.com/applications/APPLICATION_ID/apiKeys', params={'id': 'KEY_ID'}) self.assertEqual( ds._cache_get('http://example.com/apiKeys/KEY_ID'), { 'secret': 'KEY_SECRET', 'href': 'http://example.com/apiKeys/KEY_ID', 'id': 'KEY_ID' })
def test_recursive_cache_put(self, CacheManager): ds = DataStore(MagicMock()) data = { 'href': 'http://example.com/accounts/FOO', 'name': 'Foo', 'groups': { 'href': 'http://example.com/accounts/FOO/groups', 'items': [ { 'href': 'http://example.com/groups/G1', 'name': 'Foo Group 1', }, { 'href': 'http://example.com/groups/G2', 'name': 'Foo Group 2', } ] }, 'directory': { 'href': 'http://example.com/directories/BAR', 'name': 'Directory', } } ds._cache_put('http://example.com/accounts/FOO', data=data) put = CacheManager.return_value.get_cache.return_value.put expected = sorted([ call('http://example.com/groups/G1', { 'href': 'http://example.com/groups/G1', 'name': 'Foo Group 1' }, new=True), call('http://example.com/groups/G2', { 'href': 'http://example.com/groups/G2', 'name': 'Foo Group 2' }, new=True), call('http://example.com/directories/BAR', { 'href': 'http://example.com/directories/BAR', 'name': 'Directory' }, new=True), call('http://example.com/accounts/FOO', { 'href': 'http://example.com/accounts/FOO', 'name': 'Foo', 'groups': { 'href': 'http://example.com/accounts/FOO/groups', 'items': [ {'href': 'http://example.com/groups/G1'}, {'href': 'http://example.com/groups/G2'}, ] }, 'directory': { 'href': 'http://example.com/directories/BAR' } }, new=True) ], key=lambda c: c[1][0]) actual = sorted(put.call_args_list, key=lambda c: c[0][0]) self.assertEqual(actual, expected)
def test_uncache_custom_data_key_uncaches_custom_data(self, CacheManager): ds = DataStore(MagicMock()) get_cache = CacheManager.return_value.get_cache ds.uncache_resource( 'https://www.example.com/accounts/ACCOUNTID/customData/KEY') get_cache.assert_called_once_with('customData')
def test_get_cache_parse_instance_href(self, CacheManager): ds = DataStore(MagicMock()) get_cache = CacheManager.return_value.get_cache c = ds._get_cache('https://www.example.com/accounts/ACCOUNTID') self.assertTrue(c, get_cache.return_value) get_cache.assert_called_once_with('accounts')
def test_get_cache_no_cache(self, CacheManager): ds = DataStore(MagicMock()) c = ds._get_cache('invalid') # make sure the methods exist and do nothing self.assertEqual(c.get(), None) c.put() c.delete()
def test_get_resource_is_not_cached(self): ex = MagicMock() ds = DataStore( ex, {'regions': {'accounts': {'store': NullCacheStore}}}) ex.get.return_value = { 'href': 'http://example.com/accounts/FOO', 'name': 'Foo', } # make the request twice ds.get_resource('http://example.com/accounts/FOO') ds.get_resource('http://example.com/accounts/FOO') self.assertEqual(ex.get.call_count, 2)
def test_get_resource_is_cached(self): ex = MagicMock() ds = DataStore(ex) ex.get.return_value = { 'href': 'http://example.com/accounts/FOO', 'name': 'Foo', } # make the request twice ds.get_resource('http://example.com/accounts/FOO') ds.get_resource('http://example.com/accounts/FOO') ex.get.assert_called_once_with('http://example.com/accounts/FOO', params=None)
def test_cache_creation_with_global_and_region_opts(self, CacheManager): store_1 = MagicMock() store_2 = MagicMock() ds = DataStore( MagicMock(), { 'store': store_1, 'ttl': 300, 'regions': { 'accounts': { 'store': store_2 }, 'applications': { 'ttl': 301 } } }) self.assertTrue( call('accounts', store=store_2, ttl=300) in CacheManager.return_value.create_cache.call_args_list) self.assertTrue( call('applications', store=store_1, ttl=301) in CacheManager.return_value.create_cache.call_args_list) self.assertTrue( call('customData', store=store_1, ttl=300) in CacheManager.return_value.create_cache.call_args_list)
def setUp(self, Session): # Set mock. self.request_mock = Session.return_value.request self.request_mock.return_value = MagicMock(status_code=200) ex = HttpExecutor('https://api.stormpath.com/v1', ('user', 'pass')) self.client = MagicMock(BASE_URL='http://example.com') self.data_store = DataStore(ex) self.client.data_store = self.data_store self.account = Account(self.client, properties={ 'href': 'http://example.com/account', 'username': '******', 'given_name': 'given_name', 'surname': 'surname', 'email': '*****@*****.**', 'password': '******' }) self.factor = Factor(self.client, properties={ 'href': '/factors/factor_id', 'name': 'factor' }) self.challenge = Challenge(self.client, properties={ 'href': '/challenges/challenge_id', 'factor': self.factor, 'account': self.account })
def test_cache_creation_with_global_store(self, CacheManager): store = MagicMock() ds = DataStore(MagicMock(), {'store': store}) expected = [call(region, store=store) for region in ds.CACHE_REGIONS] self.assertEqual(CacheManager.return_value.create_cache.call_args_list, expected)
def test_get_resource(self): data_store = DataStore(executor=self.executor) self.assertIsInstance(data_store.get_resource(self.app.href), dict) acc = self.app.accounts.create({ 'given_name': 'Randall', 'surname': 'Degges', 'email': '{}@testmail.stormpath.com'.format(self.get_random_name()), 'password': '******', }) key = acc.api_keys.create() data_store = DataStore(executor=self.executor) data = data_store.get_resource(self.app.href + '/apiKeys', {'id': key.id}) self.assertIsInstance(data, dict) self.assertEqual(data['items'][0]['id'], key.id) data_store = DataStore(executor=self.executor) data = data_store.get_resource(self.app.tenant.href + '/applications') self.assertIsInstance(data, dict) hrefs = [data['items'][i]['href'] for i in range(len(data['items']))] self.assertTrue(self.app.href in hrefs)
def setUp(self): self.client = MagicMock(BASE_URL='http://example.com') self.client.data_store = DataStore(MagicMock()) self.factor = Factor(self.client, properties={ 'href': '/factors/factor_id', 'name': 'factor', 'type': 'SMS', 'challenges': ChallengeList( self.client, properties={'href': '/challenges'}), 'verification_status': 'UNVERIFIED', }) self.factors = FactorList(client=self.client, href='test/factors') self.challenge = Challenge(self.client, properties={ 'href': '/challenges/challenge_id', 'factor': self.factor })
def test_recursive_cache_put(self, CacheManager): ds = DataStore(MagicMock()) data = { 'href': 'http://example.com/accounts/FOO', 'name': 'Foo', 'groups': { 'href': 'http://example.com/accounts/FOO/groups', 'items': [{ 'href': 'http://example.com/groups/G1', 'name': 'Foo Group 1', }, { 'href': 'http://example.com/groups/G2', 'name': 'Foo Group 2', }] }, 'directory': { 'href': 'http://example.com/directories/BAR', 'name': 'Directory', } } ds._cache_put('http://example.com/accounts/FOO', data=data) put = CacheManager.return_value.get_cache.return_value.put expected = sorted([ call('http://example.com/groups/G1', { 'href': 'http://example.com/groups/G1', 'name': 'Foo Group 1' }, new=True), call('http://example.com/groups/G2', { 'href': 'http://example.com/groups/G2', 'name': 'Foo Group 2' }, new=True), call('http://example.com/directories/BAR', { 'href': 'http://example.com/directories/BAR', 'name': 'Directory' }, new=True), call('http://example.com/accounts/FOO', { 'href': 'http://example.com/accounts/FOO', 'name': 'Foo', 'groups': { 'href': 'http://example.com/accounts/FOO/groups', 'items': [ { 'href': 'http://example.com/groups/G1' }, { 'href': 'http://example.com/groups/G2' }, ] }, 'directory': { 'href': 'http://example.com/directories/BAR' } }, new=True) ], key=lambda c: c[1][0]) actual = sorted(put.call_args_list, key=lambda c: c[0][0]) self.assertEqual(actual, expected)