示例#1
0
def test_multi_instances_init():
    app = Flask(__name__)
    _ = base.Admin(app)

    class ManageIndex(base.AdminIndexView):
        pass

    _ = base.Admin(app, index_view=ManageIndex(url='/manage', endpoint='manage'))
示例#2
0
def test_multi_instances_init():
    app = Flask(__name__)
    _ = base.Admin(app)

    class ManageIndex(base.AdminIndexView):
        pass

    _ = base.Admin(app,
                   index_view=ManageIndex(url="/manage",
                                          endpoint="manage"))  # noqa: F841
示例#3
0
def test_submenu():
    app = Flask(__name__)
    admin = base.Admin(app)
    admin.add_view(MockView(name='Test 1', category='Test', endpoint='test1'))

    # Second view is not normally accessible
    view = MockView(name='Test 2', category='Test', endpoint='test2')
    view.allow_access = False
    admin.add_view(view)

    assert 'Test' in admin._menu_categories
    assert len(admin._menu) == 2
    assert admin._menu[1].name == 'Test'
    assert len(admin._menu[1]._children) == 2

    # Categories don't have URLs
    assert admin._menu[1].get_url() is None

    # Categories are only accessible if there is at least one accessible child
    assert admin._menu[1].is_accessible()

    children = admin._menu[1].get_children()
    assert len(children) == 1

    assert children[0].is_accessible()
示例#4
0
def test_add_category():
    app = Flask(__name__)
    admin = base.Admin(app)

    admin.add_category('Category1', 'class-name', 'icon-type', 'icon-value')
    admin.add_view(MockView(name='Test 1', endpoint='test1', category='Category1'))
    admin.add_view(MockView(name='Test 2', endpoint='test2', category='Category2'))

    assert len(admin.menu()) == 3

    # Test 1 should be underneath Category1
    assert admin.menu()[1].name == 'Category1'
    assert admin.menu()[1].get_class_name() == 'class-name'
    assert admin.menu()[1].get_icon_type() == 'icon-type'
    assert admin.menu()[1].get_icon_value() == 'icon-value'
    assert len(admin.menu()[1].get_children()) == 1
    assert admin.menu()[1].get_children()[0].name == 'Test 1'

    # Test 2 should be underneath Category2
    assert admin.menu()[2].name == 'Category2'
    assert admin.menu()[2].get_class_name() is None
    assert admin.menu()[2].get_icon_type() is None
    assert admin.menu()[2].get_icon_value() is None
    assert len(admin.menu()[2].get_children()) == 1
    assert admin.menu()[2].get_children()[0].name == 'Test 2'
示例#5
0
def test_nested_flask_views():
    app = Flask(__name__)
    admin = base.Admin(app)

    view = MockMethodView()
    admin.add_view(view)

    client = app.test_client()

    rv = client.get('/admin/mockmethodview/_api/1')
    print('"', rv.data, '"')
    assert rv.data == b'GET - API1'
    rv = client.put('/admin/mockmethodview/_api/1')
    assert rv.data == b'PUT - API1'
    rv = client.post('/admin/mockmethodview/_api/1')
    assert rv.data == b'POST - API1'
    rv = client.delete('/admin/mockmethodview/_api/1')
    assert rv.data == b'DELETE - API1'

    rv = client.get('/admin/mockmethodview/_api/2')
    assert rv.data == b'GET - API2'
    rv = client.post('/admin/mockmethodview/_api/2')
    assert rv.data == b'POST - API2'
    rv = client.delete('/admin/mockmethodview/_api/2')
    assert rv.status_code == 405
    rv = client.put('/admin/mockmethodview/_api/2')
    assert rv.status_code == 405

    rv = client.get('/admin/mockmethodview/_api/3')
    assert rv.data == b'GET - API3'
    rv = client.get('/admin/mockmethodview/_api/4')
    assert rv.data == b'GET - API3'
示例#6
0
def test_add_category():
    app = Flask(__name__)
    admin = base.Admin(app)

    admin.add_category('Category1', 'class-name', 'icon-type', 'icon-value')
    admin.add_view(
        MockView(name='Test 1', endpoint='test1', category='Category1'))
    admin.add_view(
        MockView(name='Test 2', endpoint='test2', category='Category2'))

    eq_(len(admin.menu()), 3)

    # Test 1 should be underneath Category1
    eq_(admin.menu()[1].name, 'Category1')
    eq_(admin.menu()[1].get_class_name(), 'class-name')
    eq_(admin.menu()[1].get_icon_type(), 'icon-type')
    eq_(admin.menu()[1].get_icon_value(), 'icon-value')
    eq_(len(admin.menu()[1].get_children()), 1)
    eq_(admin.menu()[1].get_children()[0].name, 'Test 1')

    # Test 2 should be underneath Category2
    eq_(admin.menu()[2].name, 'Category2')
    eq_(admin.menu()[2].get_class_name(), None)
    eq_(admin.menu()[2].get_icon_type(), None)
    eq_(admin.menu()[2].get_icon_value(), None)
    eq_(len(admin.menu()[2].get_children()), 1)
    eq_(admin.menu()[2].get_children()[0].name, 'Test 2')
示例#7
0
def test_nested_flask_views():
    app = Flask(__name__)
    admin = base.Admin(app)

    view = MockMethodView()
    admin.add_view(view)

    client = app.test_client()

    rv = client.get("/admin/mockmethodview/_api/1")
    print('"', rv.data, '"')
    eq_(rv.data, b"GET - API1")
    rv = client.put("/admin/mockmethodview/_api/1")
    eq_(rv.data, b"PUT - API1")
    rv = client.post("/admin/mockmethodview/_api/1")
    eq_(rv.data, b"POST - API1")
    rv = client.delete("/admin/mockmethodview/_api/1")
    eq_(rv.data, b"DELETE - API1")

    rv = client.get("/admin/mockmethodview/_api/2")
    eq_(rv.data, b"GET - API2")
    rv = client.post("/admin/mockmethodview/_api/2")
    eq_(rv.data, b"POST - API2")
    rv = client.delete("/admin/mockmethodview/_api/2")
    eq_(rv.status_code, 405)
    rv = client.put("/admin/mockmethodview/_api/2")
    eq_(rv.status_code, 405)

    rv = client.get("/admin/mockmethodview/_api/3")
    eq_(rv.data, b"GET - API3")
    rv = client.get("/admin/mockmethodview/_api/4")
    eq_(rv.data, b"GET - API3")
示例#8
0
def test_submenu():
    app = Flask(__name__)
    admin = base.Admin(app)
    admin.add_view(MockView(name="Test 1", category="Test", endpoint="test1"))

    # Second view is not normally accessible
    view = MockView(name="Test 2", category="Test", endpoint="test2")
    view.allow_access = False
    admin.add_view(view)

    ok_("Test" in admin._menu_categories)
    eq_(len(admin._menu), 2)
    eq_(admin._menu[1].name, "Test")
    eq_(len(admin._menu[1]._children), 2)

    # Categories don't have URLs
    eq_(admin._menu[1].get_url(), None)

    # Categories are only accessible if there is at least one accessible child
    eq_(admin._menu[1].is_accessible(), True)

    children = admin._menu[1].get_children()
    eq_(len(children), 1)

    ok_(children[0].is_accessible())
示例#9
0
def test_add_views():
    app = Flask(__name__)
    admin = base.Admin(app)

    admin.add_views(MockView(endpoint="test1"), MockView(endpoint="test2"))

    eq_(len(admin.menu()), 3)
示例#10
0
def test_add_views():
    app = Flask(__name__)
    admin = base.Admin(app)

    admin.add_views(MockView(endpoint='test1'), MockView(endpoint='test2'))

    assert len(admin.menu()) == 3
示例#11
0
def test_baseview_urls():
    app = Flask(__name__)
    admin = base.Admin(app)

    view = MockView()
    admin.add_view(view)

    eq_(len(view._urls), 2)
示例#12
0
def test_delayed_init():
    app = Flask(__name__)
    admin = base.Admin()
    admin.add_view(MockView())
    admin.init_app(app)

    client = app.test_client()

    rv = client.get("/admin/mockview/")
    eq_(rv.data, b"Success!")
示例#13
0
def test_delayed_init():
    app = Flask(__name__)
    admin = base.Admin()
    admin.add_view(MockView())
    admin.init_app(app)

    client = app.test_client()

    rv = client.get('/admin/mockview/')
    assert rv.data == b'Success!'
示例#14
0
def test_permissions():
    app = Flask(__name__)
    admin = base.Admin(app)
    view = MockView()
    admin.add_view(view)
    client = app.test_client()

    view.allow_access = False

    rv = client.get("/admin/mockview/")
    eq_(rv.status_code, 403)
示例#15
0
def test_menu_links():
    app = Flask(__name__)
    admin = base.Admin(app)
    admin.add_link(base.MenuLink('TestMenuLink1', endpoint='.index'))
    admin.add_link(base.MenuLink('TestMenuLink2', url='http://python.org/'))

    client = app.test_client()
    rv = client.get('/admin/')

    data = rv.data.decode('utf-8')
    ok_('TestMenuLink1' in data)
    ok_('TestMenuLink2' in data)
示例#16
0
def test_menu_links():
    app = Flask(__name__)
    admin = base.Admin(app)
    admin.add_link(base.MenuLink("TestMenuLink1", endpoint=".index"))
    admin.add_link(base.MenuLink("TestMenuLink2", url="http://python.org/"))

    client = app.test_client()
    rv = client.get("/admin/")

    data = rv.data.decode("utf-8")
    ok_("TestMenuLink1" in data)
    ok_("TestMenuLink2" in data)
示例#17
0
def test_base_defaults():
    admin = base.Admin()
    assert admin.name == 'Admin'
    assert admin.url == '/admin'
    assert admin.endpoint == 'admin'
    assert admin.app is None
    assert admin.index_view is not None
    assert admin.index_view._template == 'admin/index.html'

    # Check if default view was added
    assert len(admin._views) == 1
    assert admin._views[0] == admin.index_view
示例#18
0
def test_base_defaults():
    admin = base.Admin()
    eq_(admin.name, "Admin")
    eq_(admin.url, "/admin")
    eq_(admin.endpoint, "admin")
    eq_(admin.app, None)
    ok_(admin.index_view is not None)
    eq_(admin.index_view._template, "admin/index.html")

    # Check if default view was added
    eq_(len(admin._views), 1)
    eq_(admin._views[0], admin.index_view)
示例#19
0
def test_inaccessible_callback():
    app = Flask(__name__)
    admin = base.Admin(app)
    view = MockView()
    admin.add_view(view)
    client = app.test_client()

    view.allow_access = False
    view.inaccessible_callback = lambda *args, **kwargs: abort(418)

    rv = client.get("/admin/mockview/")
    eq_(rv.status_code, 418)
示例#20
0
def test_root_mount():
    app = Flask(__name__)
    admin = base.Admin(app, url='/')
    admin.add_view(MockView())

    client = app.test_client()
    rv = client.get('/mockview/')
    eq_(rv.data, b'Success!')

    # test static files when url='/'
    with app.test_request_context('/'):
        rv = client.get(url_for('admin.static', filename='bootstrap/bootstrap2/css/bootstrap.css'))
    eq_(rv.status_code, 200)
示例#21
0
def get_visibility():
    app = Flask(__name__)
    admin = base.Admin(app)

    view = MockView(name="TestMenuItem")
    view.visible = False

    admin.add_view(view)

    client = app.test_client()

    rv = client.get("/admin/mockview/")
    ok_("TestMenuItem" not in rv.data.decode("utf-8"))
示例#22
0
def get_visibility():
    app = Flask(__name__)
    admin = base.Admin(app)

    view = MockView(name='TestMenuItem')
    view.visible = False

    admin.add_view(view)

    client = app.test_client()

    rv = client.get('/admin/mockview/')
    ok_('TestMenuItem' not in rv.data.decode('utf-8'))
示例#23
0
def test_admin_customizations():
    app = Flask(__name__)
    admin = base.Admin(app, name='Test', url='/foobar', static_url_path='/static/my/admin')
    eq_(admin.name, 'Test')
    eq_(admin.url, '/foobar')
    eq_(admin.index_view.blueprint.static_url_path, '/static/my/admin')

    client = app.test_client()
    rv = client.get('/foobar/')
    eq_(rv.status_code, 200)

    # test custom static_url_path
    with app.test_request_context('/'):
        rv = client.get(url_for('admin.static', filename='bootstrap/bootstrap2/css/bootstrap.css'))
    eq_(rv.status_code, 200)
示例#24
0
def test_custom_index_view():
    view = base.AdminIndexView(name='a', category='b', endpoint='c',
                               url='/d', template='e')
    admin = base.Admin(index_view=view)

    eq_(admin.endpoint, 'c')
    eq_(admin.url, '/d')
    ok_(admin.index_view is view)
    eq_(view.name, 'a')
    eq_(view.category, 'b')
    eq_(view._template, 'e')

    # Check if view was added
    eq_(len(admin._views), 1)
    eq_(admin._views[0], view)
示例#25
0
def test_custom_index_view():
    view = base.AdminIndexView(name='a', category='b', endpoint='c',
                               url='/d', template='e')
    admin = base.Admin(index_view=view)

    assert admin.endpoint == 'c'
    assert admin.url == '/d'
    assert admin.index_view is view
    assert view.name == 'a'
    assert view.category == 'b'
    assert view._template == 'e'

    # Check if view was added
    assert len(admin._views) == 1
    assert admin._views[0] == view
示例#26
0
def test_root_mount():
    app = Flask(__name__)
    admin = base.Admin(app, url="/")
    admin.add_view(MockView())

    client = app.test_client()
    rv = client.get("/mockview/")
    eq_(rv.data, b"Success!")

    # test static files when url='/'
    with app.test_request_context("/"):
        rv = client.get(
            url_for("admin.static",
                    filename="bootstrap/bootstrap2/css/bootstrap.css"))
    eq_(rv.status_code, 200)
示例#27
0
def test_custom_index_view():
    view = base.AdminIndexView(name="a",
                               category="b",
                               endpoint="c",
                               url="/d",
                               template="e")
    admin = base.Admin(index_view=view)

    eq_(admin.endpoint, "c")
    eq_(admin.url, "/d")
    ok_(admin.index_view is view)
    eq_(view.name, "a")
    eq_(view.category, "b")
    eq_(view._template, "e")

    # Check if view was added
    eq_(len(admin._views), 1)
    eq_(admin._views[0], view)
示例#28
0
def test_call():
    app = Flask(__name__)
    admin = base.Admin(app)
    view = MockView()
    admin.add_view(view)
    client = app.test_client()

    rv = client.get('/admin/')
    assert rv.status_code == 200

    rv = client.get('/admin/mockview/')
    assert rv.data == b'Success!'

    rv = client.get('/admin/mockview/test/')
    assert rv.data == b'Success!'

    # Check authentication failure
    view.allow_call = False
    rv = client.get('/admin/mockview/')
    assert rv.data == b'Failure!'
示例#29
0
def test_admin_customizations():
    app = Flask(__name__)
    admin = base.Admin(app,
                       name="Test",
                       url="/foobar",
                       static_url_path="/static/my/admin")
    eq_(admin.name, "Test")
    eq_(admin.url, "/foobar")
    eq_(admin.index_view.blueprint.static_url_path, "/static/my/admin")

    client = app.test_client()
    rv = client.get("/foobar/")
    eq_(rv.status_code, 200)

    # test custom static_url_path
    with app.test_request_context("/"):
        rv = client.get(
            url_for("admin.static",
                    filename="bootstrap/bootstrap2/css/bootstrap.css"))
    eq_(rv.status_code, 200)
示例#30
0
def test_call():
    app = Flask(__name__)
    admin = base.Admin(app)
    view = MockView()
    admin.add_view(view)
    client = app.test_client()

    rv = client.get("/admin/")
    eq_(rv.status_code, 200)

    rv = client.get("/admin/mockview/")
    eq_(rv.data, b"Success!")

    rv = client.get("/admin/mockview/test/")
    eq_(rv.data, b"Success!")

    # Check authentication failure
    view.allow_call = False
    rv = client.get("/admin/mockview/")
    eq_(rv.data, b"Failure!")