Ejemplo n.º 1
0
def test_blueprint_url_processors():
    bp = keyes.Blueprint('frontend', __name__, url_prefix='/<lang_code>')

    @bp.url_defaults
    def add_language_code(endpoint, values):
        values.setdefault('lang_code', keyes.g.lang_code)

    @bp.url_value_preprocessor
    def pull_lang_code(endpoint, values):
        keyes.g.lang_code = values.pop('lang_code')

    @bp.route('/')
    def index():
        return keyes.url_for('.about')

    @bp.route('/about')
    def about():
        return keyes.url_for('.index')

    app = keyes.Keyes(__name__)
    app.register_blueprint(bp)

    c = app.test_client()

    assert c.get('/de/').data == b'/de/about'
    assert c.get('/de/about').data == b'/de/'
Ejemplo n.º 2
0
def test_route_decorator_custom_endpoint():

    bp = keyes.Blueprint('bp', __name__)

    @bp.route('/foo')
    def foo():
        return keyes.request.endpoint

    @bp.route('/bar', endpoint='bar')
    def foo_bar():
        return keyes.request.endpoint

    @bp.route('/bar/123', endpoint='123')
    def foo_bar_foo():
        return keyes.request.endpoint

    @bp.route('/bar/foo')
    def bar_foo():
        return keyes.request.endpoint

    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')

    @app.route('/')
    def index():
        return keyes.request.endpoint

    c = app.test_client()
    assert c.get('/').data == b'index'
    assert c.get('/py/foo').data == b'bp.foo'
    assert c.get('/py/bar').data == b'bp.bar'
    assert c.get('/py/bar/123').data == b'bp.123'
    assert c.get('/py/bar/foo').data == b'bp.bar_foo'
Ejemplo n.º 3
0
def test_error_handler_blueprint():
    bp = keyes.Blueprint('bp', __name__)

    @bp.errorhandler(500)
    def bp_exception_handler(e):
        return 'bp-error'

    @bp.route('/error')
    def bp_test():
        raise InternalServerError()

    app = keyes.Keyes(__name__)

    @app.errorhandler(500)
    def app_exception_handler(e):
        return 'app-error'

    @app.route('/error')
    def app_test():
        raise InternalServerError()

    app.register_blueprint(bp, url_prefix='/bp')

    c = app.test_client()

    assert c.get('/error').data == b'app-error'
    assert c.get('/bp/error').data == b'bp-error'
Ejemplo n.º 4
0
def test_add_template_test_with_name():
    bp = keyes.Blueprint('bp', __name__)

    def is_boolean(value):
        return isinstance(value, bool)

    bp.add_app_template_test(is_boolean, 'boolean')
    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')
    assert 'boolean' in app.jinja_env.tests.keys()
    assert app.jinja_env.tests['boolean'] == is_boolean
    assert app.jinja_env.tests['boolean'](False)
Ejemplo n.º 5
0
def test_add_template_filter_with_name():
    bp = keyes.Blueprint('bp', __name__)

    def my_reverse(s):
        return s[::-1]

    bp.add_app_template_filter(my_reverse, 'strrev')
    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')
    assert 'strrev' in app.jinja_env.filters.keys()
    assert app.jinja_env.filters['strrev'] == my_reverse
    assert app.jinja_env.filters['strrev']('abcd') == 'dcba'
Ejemplo n.º 6
0
def test_template_filter():
    bp = keyes.Blueprint('bp', __name__)

    @bp.app_template_filter()
    def my_reverse(s):
        return s[::-1]

    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')
    assert 'my_reverse' in app.jinja_env.filters.keys()
    assert app.jinja_env.filters['my_reverse'] == my_reverse
    assert app.jinja_env.filters['my_reverse']('abcd') == 'dcba'
Ejemplo n.º 7
0
def test_blueprint_specific_error_handling():
    frontend = keyes.Blueprint('frontend', __name__)
    backend = keyes.Blueprint('backend', __name__)
    sideend = keyes.Blueprint('sideend', __name__)

    @frontend.errorhandler(403)
    def frontend_forbidden(e):
        return 'frontend says no', 403

    @frontend.route('/frontend-no')
    def frontend_no():
        keyes.abort(403)

    @backend.errorhandler(403)
    def backend_forbidden(e):
        return 'backend says no', 403

    @backend.route('/backend-no')
    def backend_no():
        keyes.abort(403)

    @sideend.route('/what-is-a-sideend')
    def sideend_no():
        keyes.abort(403)

    app = keyes.Keyes(__name__)
    app.register_blueprint(frontend)
    app.register_blueprint(backend)
    app.register_blueprint(sideend)

    @app.errorhandler(403)
    def app_forbidden(e):
        return 'application itself says no', 403

    c = app.test_client()

    assert c.get('/frontend-no').data == b'frontend says no'
    assert c.get('/backend-no').data == b'backend says no'
    assert c.get('/what-is-a-sideend').data == b'application itself says no'
Ejemplo n.º 8
0
def test_empty_url_defaults():
    bp = keyes.Blueprint('bp', __name__)

    @bp.route('/', defaults={'page': 1})
    @bp.route('/page/<int:page>')
    def something(page):
        return str(page)

    app = keyes.Keyes(__name__)
    app.register_blueprint(bp)

    c = app.test_client()
    assert c.get('/').data == b'1'
    assert c.get('/page/2').data == b'2'
Ejemplo n.º 9
0
def test_dotted_names():
    frontend = keyes.Blueprint('myapp.frontend', __name__)
    backend = keyes.Blueprint('myapp.backend', __name__)

    @frontend.route('/fe')
    def frontend_index():
        return keyes.url_for('myapp.backend.backend_index')

    @frontend.route('/fe2')
    def frontend_page2():
        return keyes.url_for('.frontend_index')

    @backend.route('/be')
    def backend_index():
        return keyes.url_for('myapp.frontend.frontend_index')

    app = keyes.Keyes(__name__)
    app.register_blueprint(frontend)
    app.register_blueprint(backend)

    c = app.test_client()
    assert c.get('/fe').data.strip() == b'/be'
    assert c.get('/fe2').data.strip() == b'/fe'
    assert c.get('/be').data.strip() == b'/fe'
Ejemplo n.º 10
0
def test_add_template_test_with_name_and_template():
    bp = keyes.Blueprint('bp', __name__)

    def is_boolean(value):
        return isinstance(value, bool)

    bp.add_app_template_test(is_boolean, 'boolean')
    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')

    @app.route('/')
    def index():
        return keyes.render_template('template_test.html', value=False)

    rv = app.test_client().get('/')
    assert b'Success!' in rv.data
Ejemplo n.º 11
0
def test_add_template_filter_with_name_and_template():
    bp = keyes.Blueprint('bp', __name__)

    def my_reverse(s):
        return s[::-1]

    bp.add_app_template_filter(my_reverse, 'super_reverse')
    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')

    @app.route('/')
    def index():
        return keyes.render_template('template_filter.html', value='abcd')

    rv = app.test_client().get('/')
    assert rv.data == b'dcba'
Ejemplo n.º 12
0
def test_template_filter_after_route_with_template():
    app = keyes.Keyes(__name__)

    @app.route('/')
    def index():
        return keyes.render_template('template_filter.html', value='abcd')

    bp = keyes.Blueprint('bp', __name__)

    @bp.app_template_filter()
    def super_reverse(s):
        return s[::-1]

    app.register_blueprint(bp, url_prefix='/py')
    rv = app.test_client().get('/')
    assert rv.data == b'dcba'
Ejemplo n.º 13
0
def test_route_decorator_custom_endpoint_with_dots():
    bp = keyes.Blueprint('bp', __name__)

    @bp.route('/foo')
    def foo():
        return keyes.request.endpoint

    try:

        @bp.route('/bar', endpoint='bar.bar')
        def foo_bar():
            return keyes.request.endpoint
    except AssertionError:
        pass
    else:
        raise AssertionError('expected AssertionError not raised')

    try:

        @bp.route('/bar/123', endpoint='bar.123')
        def foo_bar_foo():
            return keyes.request.endpoint
    except AssertionError:
        pass
    else:
        raise AssertionError('expected AssertionError not raised')

    def foo_foo_foo():
        pass

    pytest.raises(
        AssertionError, lambda: bp.add_url_rule(
            '/bar/123', endpoint='bar.123', view_func=foo_foo_foo))

    pytest.raises(AssertionError, bp.route('/bar/123', endpoint='bar.123'),
                  lambda: None)

    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/py')

    c = app.test_client()
    assert c.get('/py/foo').data == b'bp.foo'
    # The rule's didn't actually made it through
    rv = c.get('/py/bar')
    assert rv.status_code == 404
    rv = c.get('/py/bar/123')
    assert rv.status_code == 404
Ejemplo n.º 14
0
def test_dotted_names_from_app():
    app = keyes.Keyes(__name__)
    app.testing = True
    test = keyes.Blueprint('test', __name__)

    @app.route('/')
    def app_index():
        return keyes.url_for('test.index')

    @test.route('/test/')
    def index():
        return keyes.url_for('app_index')

    app.register_blueprint(test)

    with app.test_client() as c:
        rv = c.get('/')
        assert rv.data == b'/test/'
Ejemplo n.º 15
0
def test_blueprint_url_definitions():
    bp = keyes.Blueprint('test', __name__)

    @bp.route('/foo', defaults={'baz': 42})
    def foo(bar, baz):
        return '%s/%d' % (bar, baz)

    @bp.route('/bar')
    def bar(bar):
        return text_type(bar)

    app = keyes.Keyes(__name__)
    app.register_blueprint(bp, url_prefix='/1', url_defaults={'bar': 23})
    app.register_blueprint(bp, url_prefix='/2', url_defaults={'bar': 19})

    c = app.test_client()
    assert c.get('/1/foo').data == b'23/42'
    assert c.get('/2/foo').data == b'19/42'
    assert c.get('/1/bar').data == b'23'
    assert c.get('/2/bar').data == b'19'
Ejemplo n.º 16
0
def test_blueprint_specific_user_error_handling():
    class MyDecoratorException(Exception):
        pass

    class MyFunctionException(Exception):
        pass

    blue = keyes.Blueprint('blue', __name__)

    @blue.errorhandler(MyDecoratorException)
    def my_decorator_exception_handler(e):
        assert isinstance(e, MyDecoratorException)
        return 'boom'

    def my_function_exception_handler(e):
        assert isinstance(e, MyFunctionException)
        return 'bam'

    blue.register_error_handler(MyFunctionException,
                                my_function_exception_handler)

    @blue.route('/decorator')
    def blue_deco_test():
        raise MyDecoratorException()

    @blue.route('/function')
    def blue_func_test():
        raise MyFunctionException()

    app = keyes.Keyes(__name__)
    app.register_blueprint(blue)

    c = app.test_client()

    assert c.get('/decorator').data == b'boom'
    assert c.get('/function').data == b'bam'