Example #1
0
class ProviderTestCase(unittest.TestCase):
    def setUp(self):
        self.client_store_mock = Mock(spec=ClientStore)
        self.token_generator_mock = Mock()

        self.response_mock = Mock(spec=Response)
        self.response_mock.body = ""
        response_class_mock = Mock(return_value=self.response_mock)

        self.token_generator_mock.expires_in = {}
        self.token_generator_mock.refresh_expires_in = 0

        self.auth_server = Provider(access_token_store=Mock(),
                                    auth_code_store=Mock(),
                                    client_store=self.client_store_mock,
                                    token_generator=self.token_generator_mock,
                                    response_class=response_class_mock)

    def test_add_grant_set_expire_time(self):
        """
        Provider.add_grant() should set the expiration time on the instance of TokenGenerator
        """
        self.auth_server.add_grant(
            AuthorizationCodeGrant(
                expires_in=400,
                site_adapter=Mock(spec=AuthorizationCodeGrantSiteAdapter)
            )
        )
        self.auth_server.add_grant(
            ResourceOwnerGrant(
                expires_in=500,
                site_adapter=Mock(spec=ResourceOwnerGrantSiteAdapter)
            )
        )
        self.auth_server.add_grant(RefreshToken(expires_in=1200))

        self.assertEqual(self.token_generator_mock.expires_in[AuthorizationCodeGrant.grant_type], 400)
        self.assertEqual(self.token_generator_mock.expires_in[ResourceOwnerGrant.grant_type], 500)
        self.assertEqual(self.token_generator_mock.refresh_expires_in, 1200)

    def test_dispatch(self):
        environ = {"session": "data"}
        process_result = "response"

        request_mock = Mock(spec=Request)

        grant_handler_mock = Mock(spec=["process", "read_validate_params"])
        grant_handler_mock.process.return_value = process_result

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.site_adapter = Mock(
            spec=AuthorizationCodeGrantSiteAdapter
        )
        self.auth_server.add_grant(grant_factory_mock)
        result = self.auth_server.dispatch(request_mock, environ)

        grant_factory_mock.assert_called_with(request_mock, self.auth_server)
        grant_handler_mock.read_validate_params.\
            assert_called_with(request_mock)
        grant_handler_mock.process.assert_called_with(request_mock,
                                                      self.response_mock,
                                                      environ)
        self.assertEqual(result, process_result)

    def test_dispatch_no_grant_type_found(self):
        error_body = {
            "error": "unsupported_response_type",
            "error_description": "Grant not supported"
        }

        request_mock = Mock(spec=Request)

        result = self.auth_server.dispatch(request_mock, {})

        self.response_mock.add_header.assert_called_with("Content-Type",
                                                         "application/json")
        self.assertEqual(self.response_mock.status_code, 400)
        self.assertEqual(self.response_mock.body, json.dumps(error_body))
        self.assertEqual(result, self.response_mock)

    def test_dispatch_no_client_found(self):
        request_mock = Mock(spec=Request)

        grant_handler_mock = Mock(spec=GrantHandler)
        grant_handler_mock.process.side_effect = OAuthInvalidNoRedirectError(
            error="")

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.add_grant(grant_factory_mock)
        self.auth_server.dispatch(request_mock, {})

        self.response_mock.add_header.assert_called_with("Content-Type",
                                                         "text/plain")
        self.assertEqual(self.response_mock.status_code, 400)
        self.assertEqual(self.response_mock.body, "")

    def test_dispatch_general_exception(self):
        request_mock = Mock(spec=Request)

        grant_handler_mock = Mock(spec=GrantHandler)
        grant_handler_mock.process.side_effect = KeyError

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.add_grant(grant_factory_mock)
        self.auth_server.dispatch(request_mock, {})

        self.assertTrue(grant_handler_mock.handle_error.called)
class AuthorizationControllerTestCase(unittest.TestCase):
    def setUp(self):
        self.client_store_mock = Mock(spec=ClientStore)
        self.token_generator_mock = Mock()
        
        self.auth_server = Provider(access_token_store=Mock(),
                                               auth_code_store=Mock(),
                                               client_store=self.client_store_mock,
                                               site_adapter=Mock(),
                                               token_generator=self.token_generator_mock,
                                               response_class=Mock())
    
    def test_add_grant_set_expire_time(self):
        """
        Provider.add_grant() should set the expiration time on the instance of TokenGenerator
        """
        self.auth_server.add_grant(RefreshToken(expires_in=600))
        
        self.assertEqual(self.token_generator_mock.expires_in, 600)
    
    def test_dispatch(self):
        environ        = {"session": "data"}
        process_result = "response"
        
        request_mock = Mock(spec=Request)
        
        response_mock = Mock(spec=Response)
        response_class_mock = Mock(return_value=response_mock)
        
        grant_handler_mock = Mock(spec=["process", "read_validate_params"])
        grant_handler_mock.process.return_value = process_result
        
        grant_factory_mock = Mock(return_value=grant_handler_mock)
        
        self.auth_server.response_class = response_class_mock
        self.auth_server.site_adapter = Mock(spec=SiteAdapter)
        self.auth_server.add_grant(grant_factory_mock)
        result = self.auth_server.dispatch(request_mock, environ)
        
        grant_factory_mock.assert_called_with(request_mock, self.auth_server)
        response_class_mock.assert_called_with()
        grant_handler_mock.read_validate_params.assert_called_with(request_mock)
        grant_handler_mock.process.assert_called_with(request_mock,
                                                      response_mock, environ)
        self.assertEqual(result, process_result)
    
    def test_dispatch_no_grant_type_found(self):
        error_body = {"error": "unsupported_response_type",
                      "error_description": "Server does not support given response_type"}
        
        request_mock = Mock(spec=Request)
        
        response_mock = Mock(spec=Response)
        response_class_mock = Mock(return_value=response_mock)
        
        self.auth_server.response_class = response_class_mock
        result = self.auth_server.dispatch(request_mock, {})
        
        response_mock.add_header.assert_called_with("Content-type",
                                                    "application/json")
        self.assertEqual(response_mock.status_code, 400)
        self.assertEqual(response_mock.body, json.dumps(error_body))
        self.assertEqual(result, response_mock)
Example #3
0
class ProviderTestCase(unittest.TestCase):
    def setUp(self):
        self.client_store_mock = Mock(spec=ClientStore)
        self.token_generator_mock = Mock()

        self.response_mock = Mock(spec=Response)
        self.response_mock.body = ""
        response_class_mock = Mock(return_value=self.response_mock)

        self.token_generator_mock.expires_in = {}
        self.token_generator_mock.refresh_expires_in = 0

        self.auth_server = Provider(access_token_store=Mock(),
                                    auth_code_store=Mock(),
                                    client_store=self.client_store_mock,
                                    token_generator=self.token_generator_mock,
                                    response_class=response_class_mock)

    def test_add_grant_set_expire_time(self):
        """
        Provider.add_grant() should set the expiration time on the instance of TokenGenerator
        """
        self.auth_server.add_grant(
            AuthorizationCodeGrant(
                expires_in=400,
                site_adapter=Mock(spec=AuthorizationCodeGrantSiteAdapter)))
        self.auth_server.add_grant(
            ResourceOwnerGrant(
                expires_in=500,
                site_adapter=Mock(spec=ResourceOwnerGrantSiteAdapter)))
        self.auth_server.add_grant(RefreshToken(expires_in=1200))

        self.assertEqual(
            self.token_generator_mock.expires_in[
                AuthorizationCodeGrant.grant_type], 400)
        self.assertEqual(
            self.token_generator_mock.expires_in[
                ResourceOwnerGrant.grant_type], 500)
        self.assertEqual(self.token_generator_mock.refresh_expires_in, 1200)

    def test_dispatch(self):
        environ = {"session": "data"}
        process_result = "response"

        request_mock = Mock(spec=Request)

        grant_handler_mock = Mock(spec=["process", "read_validate_params"])
        grant_handler_mock.process.return_value = process_result

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.site_adapter = Mock(
            spec=AuthorizationCodeGrantSiteAdapter)
        self.auth_server.add_grant(grant_factory_mock)
        result = self.auth_server.dispatch(request_mock, environ)

        grant_factory_mock.assert_called_with(request_mock, self.auth_server)
        grant_handler_mock.read_validate_params.\
            assert_called_with(request_mock)
        grant_handler_mock.process.assert_called_with(request_mock,
                                                      self.response_mock,
                                                      environ)
        self.assertEqual(result, process_result)

    def test_dispatch_no_grant_type_found(self):
        error_body = {
            "error": "unsupported_response_type",
            "error_description": "Grant not supported"
        }

        request_mock = Mock(spec=Request)

        result = self.auth_server.dispatch(request_mock, {})

        self.response_mock.add_header.assert_called_with(
            "Content-Type", "application/json")
        self.assertEqual(self.response_mock.status_code, 400)
        self.assertEqual(self.response_mock.body, json.dumps(error_body))
        self.assertEqual(result, self.response_mock)

    def test_dispatch_no_client_found(self):
        request_mock = Mock(spec=Request)

        grant_handler_mock = Mock(spec=GrantHandler)
        grant_handler_mock.process.side_effect = OAuthInvalidNoRedirectError(
            error="")

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.add_grant(grant_factory_mock)
        self.auth_server.dispatch(request_mock, {})

        self.response_mock.add_header.assert_called_with(
            "Content-Type", "application/json")
        self.assertEqual(self.response_mock.status_code, 400)
        self.assertEqual(
            json.loads(self.response_mock.body)["error"],
            "invalid_redirect_uri")

    def test_dispatch_general_exception(self):
        request_mock = Mock(spec=Request)

        grant_handler_mock = Mock(spec=GrantHandler)
        grant_handler_mock.process.side_effect = KeyError

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.add_grant(grant_factory_mock)
        self.auth_server.dispatch(request_mock, {})

        self.assertTrue(grant_handler_mock.handle_error.called)
Example #4
0
class AuthorizationControllerTestCase(unittest.TestCase):
    def setUp(self):
        self.client_store_mock = Mock(spec=ClientStore)
        self.token_generator_mock = Mock()
        self.token_generator_mock.expires_in = {}
        self.token_generator_mock.refresh_expires_in = 0

        self.auth_server = Provider(access_token_store=Mock(),
                                    auth_code_store=Mock(),
                                    client_store=self.client_store_mock,
                                    site_adapter=Mock(),
                                    token_generator=self.token_generator_mock,
                                    response_class=Mock())

    def test_add_grant_set_expire_time(self):
        """
        Provider.add_grant() should set the expiration time on the instance of TokenGenerator
        """
        self.auth_server.add_grant(AuthorizationCodeGrant(expires_in=400))
        self.auth_server.add_grant(ResourceOwnerGrant(expires_in=500))
        self.auth_server.add_grant(RefreshToken(expires_in=1200))

        self.assertEqual(
            self.token_generator_mock.expires_in[
                AuthorizationCodeGrant.grant_type], 400)
        self.assertEqual(
            self.token_generator_mock.expires_in[
                ResourceOwnerGrant.grant_type], 500)
        self.assertEqual(self.token_generator_mock.refresh_expires_in, 1200)

    def test_dispatch(self):
        environ = {"session": "data"}
        process_result = "response"

        request_mock = Mock(spec=Request)

        response_mock = Mock(spec=Response)
        response_class_mock = Mock(return_value=response_mock)

        grant_handler_mock = Mock(spec=["process", "read_validate_params"])
        grant_handler_mock.process.return_value = process_result

        grant_factory_mock = Mock(return_value=grant_handler_mock)

        self.auth_server.response_class = response_class_mock
        self.auth_server.site_adapter = Mock(spec=SiteAdapter)
        self.auth_server.add_grant(grant_factory_mock)
        result = self.auth_server.dispatch(request_mock, environ)

        grant_factory_mock.assert_called_with(request_mock, self.auth_server)
        response_class_mock.assert_called_with()
        grant_handler_mock.read_validate_params.assert_called_with(
            request_mock)
        grant_handler_mock.process.assert_called_with(request_mock,
                                                      response_mock, environ)
        self.assertEqual(result, process_result)

    def test_dispatch_no_grant_type_found(self):
        error_body = {
            "error": "unsupported_response_type",
            "error_description": "Server does not support given response_type"
        }

        request_mock = Mock(spec=Request)

        response_mock = Mock(spec=Response)
        response_class_mock = Mock(return_value=response_mock)

        self.auth_server.response_class = response_class_mock
        result = self.auth_server.dispatch(request_mock, {})

        response_mock.add_header.assert_called_with("Content-type",
                                                    "application/json")
        self.assertEqual(response_mock.status_code, 400)
        self.assertEqual(response_mock.body, json.dumps(error_body))
        self.assertEqual(result, response_mock)