Commit 5f8dddf7 authored by Paul Brown's avatar Paul Brown

add mongo_engine, peewee, and sqla tests for details view

parent 3f735f52
...@@ -157,7 +157,7 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -157,7 +157,7 @@ class BaseModelView(BaseView, ActionsMixin):
If set to `None`, will get them from the model. If set to `None`, will get them from the model.
""" """
details_exclude_list = None column_details_exclude_list = None
""" """
Collection of fields excluded from the details view. Collection of fields excluded from the details view.
""" """
...@@ -804,8 +804,9 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -804,8 +804,9 @@ class BaseModelView(BaseView, ActionsMixin):
columns = self.scaffold_list_columns() columns = self.scaffold_list_columns()
# Filter excluded columns # Filter excluded columns
if self.details_exclude_list: if self.column_details_exclude_list:
columns = [c for c in columns if c not in self.details_exclude_list] columns = [c for c in columns
if c not in self.column_details_exclude_list]
return [(c, self.get_column_name(c)) for c in columns] return [(c, self.get_column_name(c)) for c in columns]
......
...@@ -214,6 +214,63 @@ def test_column_editable_list(): ...@@ -214,6 +214,63 @@ def test_column_editable_list():
ok_('test1_val_1' in data) ok_('test1_val_1' in data)
def test_details_view():
app, db, admin = setup()
Model1, Model2 = create_models(db)
view_no_details = CustomModelView(Model1)
admin.add_view(view_no_details)
# fields are scaffolded
view_w_details = CustomModelView(Model2, can_view_details=True)
admin.add_view(view_w_details)
# show only specific fields in details w/ column_details_list
string_field_view = CustomModelView(Model2, can_view_details=True,
column_details_list=["string_field"],
endpoint="sf_view")
admin.add_view(string_field_view)
fill_db(Model1, Model2)
client = app.test_client()
m1_id = Model1.objects.first().id
m2_id = Model2.objects.first().id
# ensure link to details is hidden when can_view_details is disabled
rv = client.get('/admin/model1/')
data = rv.data.decode('utf-8')
ok_('/admin/model1/details/' not in data)
# ensure link to details view appears
rv = client.get('/admin/model2/')
data = rv.data.decode('utf-8')
ok_('/admin/model2/details/' in data)
# test redirection when details are disabled
url = '/admin/model1/details/?url=%2Fadmin%2Fmodel1%2F&id=' + str(m1_id)
rv = client.get(url)
eq_(rv.status_code, 302)
# test if correct data appears in details view when enabled
url = '/admin/model2/details/?url=%2Fadmin%2Fmodel2%2F&id=' + str(m2_id)
rv = client.get(url)
data = rv.data.decode('utf-8')
ok_('String Field' in data)
ok_('string_field_val_1' in data)
ok_('Int Field' in data)
# test column_details_list
url = '/admin/sf_view/details/?url=%2Fadmin%2Fsf_view%2F&id=' + str(m2_id)
rv = client.get(url)
data = rv.data.decode('utf-8')
ok_('String Field' in data)
ok_('string_field_val_1' in data)
ok_('Int Field' not in data)
def test_column_filters(): def test_column_filters():
app, db, admin = setup() app, db, admin = setup()
......
...@@ -249,6 +249,59 @@ def test_column_editable_list(): ...@@ -249,6 +249,59 @@ def test_column_editable_list():
ok_('test1_val_3' in data) ok_('test1_val_3' in data)
def test_details_view():
app, db, admin = setup()
Model1, Model2 = create_models(db)
view_no_details = CustomModelView(Model1)
admin.add_view(view_no_details)
# fields are scaffolded
view_w_details = CustomModelView(Model2, can_view_details=True)
admin.add_view(view_w_details)
# show only specific fields in details w/ column_details_list
char_field_view = CustomModelView(Model2, can_view_details=True,
column_details_list=["char_field"],
endpoint="cf_view")
admin.add_view(char_field_view)
fill_db(Model1, Model2)
client = app.test_client()
# ensure link to details is hidden when can_view_details is disabled
rv = client.get('/admin/model1/')
data = rv.data.decode('utf-8')
ok_('/admin/model1/details/' not in data)
# ensure link to details view appears
rv = client.get('/admin/model2/')
data = rv.data.decode('utf-8')
ok_('/admin/model2/details/' in data)
# test redirection when details are disabled
rv = client.get('/admin/model1/details/?url=%2Fadmin%2Fmodel1%2F&id=3')
eq_(rv.status_code, 302)
# test if correct data appears in details view when enabled
rv = client.get('/admin/model2/details/?url=%2Fadmin%2Fmodel2%2F&id=3')
data = rv.data.decode('utf-8')
ok_('Char Field' in data)
ok_('char_field_val_3' in data)
ok_('Int Field' in data)
ok_('5000' in data)
# test column_details_list
rv = client.get('/admin/cf_view/details/?url=%2Fadmin%2Fcf_view%2F&id=3')
data = rv.data.decode('utf-8')
ok_('Char Field' in data)
ok_('char_field_val_3' in data)
ok_('Int Field' not in data)
ok_('5000' not in data)
def test_column_filters(): def test_column_filters():
app, db, admin = setup() app, db, admin = setup()
......
...@@ -408,6 +408,58 @@ def test_column_editable_list(): ...@@ -408,6 +408,58 @@ def test_column_editable_list():
ok_('test1_val_3' in data) ok_('test1_val_3' in data)
def test_details_view():
app, db, admin = setup()
Model1, Model2 = create_models(db)
view_no_details = CustomModelView(Model1, db.session)
admin.add_view(view_no_details)
# fields are scaffolded
view_w_details = CustomModelView(Model2, db.session, can_view_details=True)
admin.add_view(view_w_details)
# show only specific fields in details w/ column_details_list
string_field_view = CustomModelView(Model2, db.session,
can_view_details=True,
column_details_list=["string_field"],
endpoint="sf_view")
admin.add_view(string_field_view)
fill_db(db, Model1, Model2)
client = app.test_client()
# ensure link to details is hidden when can_view_details is disabled
rv = client.get('/admin/model1/')
data = rv.data.decode('utf-8')
ok_('/admin/model1/details/' not in data)
# ensure link to details view appears
rv = client.get('/admin/model2/')
data = rv.data.decode('utf-8')
ok_('/admin/model2/details/' in data)
# test redirection when details are disabled
rv = client.get('/admin/model1/details/?url=%2Fadmin%2Fmodel1%2F&id=1')
eq_(rv.status_code, 302)
# test if correct data appears in details view when enabled
rv = client.get('/admin/model2/details/?url=%2Fadmin%2Fmodel2%2F&id=1')
data = rv.data.decode('utf-8')
ok_('String Field' in data)
ok_('test2_val_1' in data)
ok_('test1_val_1' in data)
# test column_details_list
rv = client.get('/admin/sf_view/details/?url=%2Fadmin%2Fsf_view%2F&id=1')
data = rv.data.decode('utf-8')
ok_('String Field' in data)
ok_('test2_val_1' in data)
ok_('test1_val_1' not in data)
def test_editable_list_special_pks(): def test_editable_list_special_pks():
''' Tests editable list view + a primary key with special characters ''' Tests editable list view + a primary key with special characters
''' '''
......
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