Пример #1
0
 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'])
Пример #2
0
 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"],
     )
Пример #3
0
 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'])
Пример #4
0
 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'])
Пример #5
0
 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'])
Пример #6
0
 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'})
Пример #7
0
    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, {})
Пример #8
0
 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"],
     )
Пример #9
0
 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"],
     )
Пример #10
0
 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"})