Пример #1
0
    def test_api_method_simple(self):
        @util.decorators.api_method
        def simple():
            return 'simple', 200

        request_headers = {
            'Cookie':
            '{name}={value}'.format(name=util.decorators.COOKIE_SPA_TOKEN,
                                    value='abc'),
        }

        with app.test_request_context(headers=request_headers):
            with mock.patch.object(cache, 'set') as mock_set, \
                 mock.patch.object(cache, 'delete') as mock_delete, \
                 mock.patch.object(time, 'sleep') as mock_sleep, \
                 mock.patch.object(threading, 'Thread') as mock_thread:
                simple()

                _, kwargs = mock_thread.call_args
                task = kwargs['target']
                task()  # Manually execute async task

                self.assertEqual(mock_set.call_count, 1)
                self.assertEqual(mock_sleep.call_count, 1)
                self.assertEqual(mock_delete.call_count, 1)
Пример #2
0
    def test_require_form_args_blank_values(self):
        @util.decorators.require_form_args(['arg1'], allow_blank_values=True)
        def blank_values(data):
            return data

        with app.test_request_context(data=json.dumps({'arg1': ''})):
            data = blank_values()
            self.assertEqual(data['arg1'], '')
Пример #3
0
    def test_require_form_args_missing(self):
        @util.decorators.require_form_args(['arg1', 'arg2'])
        def missing_args(data):
            return data

        with app.test_request_context(data=json.dumps({'arg1': 'value'})):
            resp, status = missing_args()
            self.assertEqual(status, 400)
            self.assertEqual(resp.json['failure'], 'failure_incomplete_params')
Пример #4
0
    def test_optional_login_api_api_key_invalid(self):
        @util.decorators.require_form_args()
        @util.decorators.optional_login_api
        def api_key_invalid(data):
            if flask_login.current_user.is_authenticated:
                return 'resp'

        with app.test_request_context(headers={'X-Linkr-Key': 'invalid'}):
            self.assertIsNone(api_key_invalid())
Пример #5
0
    def test_require_login_api_api_key_admin_only_admin_user(self):
        @util.decorators.require_form_args()
        @util.decorators.require_login_api(admin_only=True)
        def api_key_admin_only_admin_user(data):
            return 'resp'

        user = UserFactory.generate(is_admin=True)
        with app.test_request_context(headers={'X-Linkr-Key': user.api_key}):
            self.assertEqual(api_key_admin_only_admin_user(), 'resp')
Пример #6
0
    def test_require_login_api_api_key_header_auth(self):
        @util.decorators.require_form_args()
        @util.decorators.require_login_api()
        def api_key_auth(data):
            return 'resp'

        user = UserFactory.generate()
        with app.test_request_context(headers={'X-Linkr-Key': user.api_key}):
            self.assertEqual(api_key_auth(), 'resp')
Пример #7
0
    def test_optional_login_api_api_key_header_auth(self):
        @util.decorators.require_form_args()
        @util.decorators.optional_login_api
        def api_key_auth(data):
            if flask_login.current_user.is_authenticated:
                return 'resp'

        user = UserFactory.generate()
        with app.test_request_context(headers={'X-Linkr-Key': user.api_key}):
            self.assertEqual(api_key_auth(), 'resp')
Пример #8
0
    def test_require_login_api_api_key_data_auth(self):
        @util.decorators.require_form_args()
        @util.decorators.require_login_api()
        def api_key_auth(data):
            return 'resp'

        user = UserFactory.generate()
        with app.test_request_context(
                data=json.dumps({'api_key': user.api_key})):
            self.assertEqual(api_key_auth(), 'resp')
Пример #9
0
    def test_require_login_api_api_key_admin_only_regular_user(self):
        @util.decorators.require_form_args()
        @util.decorators.require_login_api(admin_only=True)
        def api_key_admin_only_regular_user(data):
            return 'resp'

        user = UserFactory.generate(is_admin=False)
        with app.test_request_context(headers={'X-Linkr-Key': user.api_key}):
            resp, status = api_key_admin_only_regular_user()
            self.assertEqual(status, 403)
            self.assertEqual(resp.json['failure'], 'failure_unauth')
Пример #10
0
    def test_require_form_args_strict_params(self):
        @util.decorators.require_form_args(['arg1'], strict_params=True)
        def strict_params(data):
            return data

        with app.test_request_context(data=json.dumps({
                'arg1': 'a',
                'arg2': 'b'
        })):
            resp, status = strict_params()
            self.assertEqual(status, 400)
            self.assertEqual(resp.json['failure'], 'failure_incomplete_params')
Пример #11
0
    def test_require_form_args_simple(self):
        @util.decorators.require_form_args(['arg1', 'arg2'])
        def simple(data):
            return data

        with app.test_request_context(data=json.dumps({
                'arg1': 'value',
                'arg2': 'other'
        })):
            data = simple()
            self.assertEqual(data['arg1'], 'value')
            self.assertEqual(data['arg2'], 'other')
Пример #12
0
    def test_require_login_api_api_key_invalid(self):
        @util.decorators.require_form_args()
        @util.decorators.require_login_api()
        def api_key_invalid(data):
            return 'resp'

        user = UserFactory.generate()
        with app.test_request_context(
                headers={'X-Linkr-Key': user.api_key + 'a'}):
            resp, status = api_key_invalid()
            self.assertEqual(status, 401)
            self.assertEqual(resp.json['failure'], 'failure_unauth')
Пример #13
0
    def test_require_frontend_api_valid(self):
        @util.decorators.require_form_args()
        @util.decorators.require_frontend_api
        def require_frontend_api_valid(data):
            return 'valid', 200

        with app.test_request_context():
            with mock.patch.object(cache, 'get') as mock_get:
                mock_get.return_value = True

                text, status = require_frontend_api_valid()

                self.assertEqual(text, 'valid')
                self.assertEqual(status, 200)
Пример #14
0
    def test_require_frontend_api_invalid(self):
        @util.decorators.require_form_args()
        @util.decorators.require_frontend_api
        def require_frontend_api_invalid(data):
            return 'invalid', 400

        with app.test_request_context():
            with mock.patch.object(cache, 'get') as mock_get:
                mock_get.return_value = False

                resp, status = require_frontend_api_invalid()

                self.assertEqual(mock_get.call_count, 1)
                self.assertEqual(resp.json['failure'], 'failure_bad_client')
                self.assertEqual(status, 403)