82 lines
2.0 KiB
Python
82 lines
2.0 KiB
Python
from wtforms import form, fields
|
|
|
|
from flask_admin.contrib.pymongo import ModelView
|
|
|
|
from . import setup
|
|
|
|
|
|
class TestForm(form.Form):
|
|
__test__ = False
|
|
test1 = fields.StringField('Test1')
|
|
test2 = fields.StringField('Test2')
|
|
|
|
|
|
class TestView(ModelView):
|
|
__test__ = False
|
|
column_list = ('test1', 'test2', 'test3', 'test4')
|
|
column_sortable_list = ('test1', 'test2')
|
|
|
|
form = TestForm
|
|
|
|
|
|
def test_model():
|
|
app, db, admin = setup()
|
|
|
|
view = TestView(db.test, 'Test')
|
|
admin.add_view(view)
|
|
|
|
# Drop existing data (if any)
|
|
db.test.delete_many({})
|
|
|
|
assert view.name == 'Test'
|
|
assert view.endpoint == 'testview'
|
|
|
|
assert 'test1' in view._sortable_columns
|
|
assert 'test2' in view._sortable_columns
|
|
|
|
assert view._create_form_class is not None
|
|
assert view._edit_form_class is not None
|
|
assert not view._search_supported
|
|
assert view._filters is None
|
|
|
|
# Make some test clients
|
|
client = app.test_client()
|
|
|
|
rv = client.get('/admin/testview/')
|
|
assert rv.status_code == 200
|
|
|
|
rv = client.get('/admin/testview/new/')
|
|
assert rv.status_code == 200
|
|
|
|
rv = client.post('/admin/testview/new/',
|
|
data=dict(test1='test1large', test2='test2'))
|
|
assert rv.status_code == 302
|
|
|
|
model = db.test.find()[0]
|
|
print(model)
|
|
assert model['test1'] == 'test1large'
|
|
assert model['test2'] == 'test2'
|
|
|
|
rv = client.get('/admin/testview/')
|
|
assert rv.status_code == 200
|
|
assert 'test1large' in rv.data.decode('utf-8')
|
|
|
|
url = '/admin/testview/edit/?id=%s' % model['_id']
|
|
rv = client.get(url)
|
|
assert rv.status_code == 200
|
|
|
|
rv = client.post(url,
|
|
data=dict(test1='test1small', test2='test2large'))
|
|
assert rv.status_code == 302
|
|
|
|
print(db.test.find()[0])
|
|
|
|
model = db.test.find()[0]
|
|
assert model['test1'] == 'test1small'
|
|
assert model['test2'] == 'test2large'
|
|
|
|
url = '/admin/testview/delete/?id=%s' % model['_id']
|
|
rv = client.post(url)
|
|
assert rv.status_code == 302
|
|
assert db.test.estimated_document_count() == 0
|