def test_get_orgs_repos(self): """ get_orgs_repos returns an Effect which looks up the organizations for a user, and then looks up all of the repositories of those orgs in parallel, and returns a single flat list of all repos. """ effect = get_orgs_repos('radix') self.assertEqual(effect.intent.method, 'get') self.assertEqual(effect.intent.url, 'https://api.github.com/users/radix/orgs') next_effect = resolve_effect( effect, json.dumps([{ 'login': '******' }, { 'login': '******' }])) self.assertIsInstance(next_effect.intent, ParallelEffects) # Get each parallel effect effects = next_effect.intent.effects self.assertEqual(effects[0].intent.method, 'get') self.assertEqual(effects[0].intent.url, 'https://api.github.com/orgs/twisted/repos') self.assertEqual(effects[1].intent.method, 'get') self.assertEqual(effects[1].intent.url, 'https://api.github.com/orgs/rackerlabs/repos') self.assertEqual( resolve_effect(next_effect, [['twisted', 'txstuff'], ['otter', 'nova']]), ['twisted', 'txstuff', 'otter', 'nova'])
def test_get_orgs_repos(self): """ get_orgs_repos returns an Effect which looks up the organizations for a user, and then looks up all of the repositories of those orgs in parallel, and returns a single flat list of all repos. """ effect = get_orgs_repos("radix") self.assertEqual(effect.intent.method, "get") self.assertEqual(effect.intent.url, "https://api.github.com/users/radix/orgs") next_effect = resolve_effect( effect, json.dumps([{ "login": "******" }, { "login": "******" }])) self.assertIsInstance(next_effect.intent, ParallelEffects) # Get each parallel effect effects = next_effect.intent.effects self.assertEqual(effects[0].intent.method, "get") self.assertEqual(effects[0].intent.url, "https://api.github.com/orgs/twisted/repos") self.assertEqual(effects[1].intent.method, "get") self.assertEqual(effects[1].intent.url, "https://api.github.com/orgs/rackerlabs/repos") self.assertEqual( resolve_effect(next_effect, [["twisted", "txstuff"], ["otter", "nova"]]), ["twisted", "txstuff", "otter", "nova"], )
def test_get_orgs_repos(self): """ get_orgs_repos returns an Effect which looks up the organizations for a user, and then looks up all of the repositories of those orgs in parallel, and returns a single flat list of all repos. """ # Here I'll avoid mocking, just to show that it can be done either way. effect = github_example.get_orgs_repos('radix') self.assertEqual(effect.intent.method, 'get') self.assertEqual(effect.intent.url, 'https://api.github.com/users/radix/orgs') next_effect = resolve_effect( effect, json.dumps([{'login': '******'}, {'login': '******'}])) self.assertIsInstance(next_effect.intent, ParallelEffects) # Get each parallel effect effects = next_effect.intent.effects self.assertEqual(effects[0].intent.method, 'get') self.assertEqual(effects[0].intent.url, 'https://api.github.com/orgs/twisted/repos') self.assertEqual(effects[1].intent.method, 'get') self.assertEqual(effects[1].intent.url, 'https://api.github.com/orgs/rackerlabs/repos') self.assertEqual(resolve_effect(next_effect, [['twisted', 'txstuff'], ['otter', 'nova']]), ['twisted', 'txstuff', 'otter', 'nova'])
def test_get_org_repos_success(self): """get_org_repos extracts the result into a simple list of repos.""" eff = github_example.get_org_repos('radix') self.assertEqual( resolve_effect(eff, json.dumps([{'name': 'twisted'}, {'name': 'txstuff'}])), ['twisted', 'txstuff'])
def test_get_orgs_success(self): """get_orgs extracts the result into a simple list of orgs.""" eff = github_example.get_orgs('radix') self.assertEqual( resolve_effect(eff, json.dumps([{'login': '******'}, {'login': '******'}])), ['twisted', 'rackerlabs'])
def test_json_response(self): """The JSON response is decoded into Python objects.""" request_ = self._no_reauth_client() eff = request_("get", "/foo") self.assertEqual( resolve_effect(eff, stub_pure_response({"foo": "bar"})), {'foo': 'bar'})
def _test_reauth(self, code, reauth_codes=None): reauth_effect = Effect(Constant(None)) def get_auth_headers(): return Effect(Constant(headers("first-token"))) def refresh_auth_info(): return reauth_effect # First we try to make a simple request. kwargs = {} if reauth_codes is not None: kwargs['reauth_codes'] = reauth_codes eff = request("get", "/foo", get_auth_headers=get_auth_headers, refresh_auth_info=refresh_auth_info, **kwargs) # The initial (cached) auth headers are retrieved. eff = resolve_stubs(eff) # when an authentication error is returned from the HTTP server, # the auth info is automitacally refreshed: stub_result = stub_pure_response("badauth!", code=code) reauth_effect_result = resolve_effect(eff, stub_result) self.assertIs(reauth_effect_result.intent, reauth_effect.intent) # And the original auth error HTTP response is still returned. api_error = self.assertRaises(APIError, resolve_stubs, reauth_effect_result) self.assertEqual(api_error.code, code) self.assertEqual(api_error.body, "badauth!") self.assertEqual(api_error.headers, {})
def test_get_org_repos_success(self): """get_org_repos extracts the result into a simple list of repos.""" eff = get_org_repos("radix") self.assertEqual( resolve_effect( eff, json.dumps([{ "name": "twisted" }, { "name": "txstuff" }])), ["twisted", "txstuff"], )
def test_get_orgs_success(self): """get_orgs extracts the result into a simple list of orgs.""" eff = get_orgs("radix") self.assertEqual( resolve_effect( eff, json.dumps([{ "login": "******" }, { "login": "******" }])), ["twisted", "rackerlabs"], )
def test_api_error_specified(self): """Any HTTP response code can be specified as being successful.""" request_ = self._no_reauth_client() eff = request_("get", url="/foo", success_codes=[404]) stub_result = stub_pure_response({"foo": "bar"}, code=404) self.assertEqual(resolve_effect(eff, stub_result), {"foo": "bar"})