Commit cdccdcc7 authored by Serge S. Koval's avatar Serge S. Koval

Unit tests.

parent b192ea76
......@@ -6,14 +6,9 @@
- List display callables
- Search
- Rename init_search
- Built-in filtering support
- Configurable operations (=, >, <, etc)
- Callable operations
- Paginator class
- Custom CSS/JS in admin interface
- SQLA Model Admin
- Do not rely on id as a primary key
- Built-in filtering support
- Many2Many support
- Verify if it is working properly
- WYSIWYG editor support?
......
......@@ -64,10 +64,6 @@ class AdminViewMeta(type):
# Wrap views
setattr(cls, p, _wrap_view(attr))
# Default view
if cls._default_view is None and cls._urls:
raise Exception('Missing default view for the admin view %s' % classname)
class BaseView(object):
"""
......@@ -111,6 +107,10 @@ class BaseView(object):
self.admin = None
self.blueprint = None
# Default view
if self._default_view is None:
raise Exception('Attempted to instantiate admin view %s without defailt view' % self.__class__.__name__)
def create_blueprint(self, admin):
"""
Create Flask blueprint.
......@@ -156,7 +156,7 @@ class BaseView(object):
`kwargs`
Template arguments
"""
# Store
# Store self as admin_view
kwargs['admin_view'] = self
return render_template(template, **kwargs)
......@@ -291,6 +291,7 @@ class Admin(object):
index_view = AdminIndexView()
self.app = app
self.index_view = index_view
# Add predefined index view
self.add_view(index_view)
......
......@@ -110,7 +110,6 @@ def convert(*args):
See :mod:`flask.ext.adminex.ext.sqlamodel.filters` for usage example.
"""
def _inner(func):
print args
func._converter_for = args
return func
return _inner
......
from flask.ext.adminex import base
class MockView(base.BaseView):
@base.expose('/')
def index(self):
return None
from nose.tools import ok_, eq_
from flask import Flask
from flask.ext.adminex import base
from .mock import MockView
def test_baseview_defaults():
view = MockView()
eq_(view.name, None)
eq_(view.category, None)
eq_(view.endpoint, None)
eq_(view.url, None)
eq_(view.static_folder, None)
eq_(view.admin, None)
eq_(view.blueprint, None)
def test_base_defaults():
admin = base.Admin()
eq_(admin.name, 'Admin')
eq_(admin.url, '/admin')
eq_(admin.app, None)
ok_(admin.index_view is not None)
# Check if default view was added
eq_(len(admin._views), 1)
eq_(admin._views[0], admin.index_view)
def test_base_registration():
app = Flask(__name__)
admin = base.Admin(app)
eq_(admin.app, app)
ok_(admin.index_view.blueprint is not None)
def test_baseview_registration():
admin = base.Admin()
view = MockView()
bp = view.create_blueprint(admin)
# Base properties
eq_(view.admin, admin)
ok_(view.blueprint is not None)
# Calculated properties
eq_(view.endpoint, 'mockview')
eq_(view.url, '/admin/mockview')
eq_(view.name, 'Mock View')
eq_(view._urls, [('/', 'index', ('GET',))])
# Verify generated blueprint properties
eq_(bp.name, view.endpoint)
eq_(bp.url_prefix, view.url)
eq_(bp.template_folder, 'templates')
eq_(bp.static_folder, view.static_folder)
# Verify customizations
view = MockView(name='Test', endpoint='foobar')
view.create_blueprint(base.Admin())
eq_(view.name, 'Test')
eq_(view.endpoint, 'foobar')
eq_(view.url, '/admin/foobar')
view = MockView(url='test')
view.create_blueprint(base.Admin())
eq_(view.url, '/admin/test')
view = MockView(url='/test/test')
view.create_blueprint(base.Admin())
eq_(view.url, '/test/test')
def verify_baseview_urls():
app = Flask(__name__)
admin = base.Admin(app)
view = Dummy()
admin.add_view(view)
eq_(len(view._urls, 1))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment