feat; add single-column sorting (frontend or backend) for grids
This commit is contained in:
parent
f21efbab9f
commit
58f7a862a2
10 changed files with 1215 additions and 100 deletions
|
@ -4,6 +4,7 @@ import functools
|
|||
from unittest import TestCase
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from sqlalchemy import orm
|
||||
from pyramid import testing
|
||||
from pyramid.response import Response
|
||||
from pyramid.httpexceptions import HTTPNotFound
|
||||
|
@ -518,11 +519,13 @@ class TestMasterView(WebTestCase):
|
|||
data = view.get_grid_data(session=self.session)
|
||||
self.assertEqual(data, [])
|
||||
|
||||
# basic logic with Setting model
|
||||
# grid with model class will produce data query
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=model.Setting):
|
||||
view = master.MasterView(self.request)
|
||||
data = view.get_grid_data(session=self.session)
|
||||
query = view.get_grid_data(session=self.session)
|
||||
self.assertIsInstance(query, orm.Query)
|
||||
data = query.all()
|
||||
self.assertEqual(len(data), 1)
|
||||
self.assertIs(data[0], setting)
|
||||
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
from unittest.mock import patch
|
||||
|
||||
import colander
|
||||
from pyramid.httpexceptions import HTTPNotFound
|
||||
|
||||
from wuttaweb.views import settings
|
||||
from wuttaweb.views import settings as mod
|
||||
from tests.util import WebTestCase
|
||||
|
||||
|
||||
|
@ -15,7 +16,7 @@ class TestAppInfoView(WebTestCase):
|
|||
self.pyramid_config.include('wuttaweb.views.essential')
|
||||
|
||||
def make_view(self):
|
||||
return settings.AppInfoView(self.request)
|
||||
return mod.AppInfoView(self.request)
|
||||
|
||||
def test_index(self):
|
||||
# sanity/coverage check
|
||||
|
@ -36,19 +37,21 @@ class TestAppInfoView(WebTestCase):
|
|||
class TestSettingView(WebTestCase):
|
||||
|
||||
def make_view(self):
|
||||
return settings.SettingView(self.request)
|
||||
return mod.SettingView(self.request)
|
||||
|
||||
def test_get_grid_data(self):
|
||||
|
||||
# empty data by default
|
||||
view = self.make_view()
|
||||
data = view.get_grid_data(session=self.session)
|
||||
query = view.get_grid_data(session=self.session)
|
||||
data = query.all()
|
||||
self.assertEqual(len(data), 0)
|
||||
|
||||
# unless we save some settings
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
self.session.commit()
|
||||
data = view.get_grid_data(session=self.session)
|
||||
query = view.get_grid_data(session=self.session)
|
||||
data = query.all()
|
||||
self.assertEqual(len(data), 1)
|
||||
|
||||
def test_configure_form(self):
|
||||
|
@ -58,3 +61,23 @@ class TestSettingView(WebTestCase):
|
|||
view.configure_form(form)
|
||||
self.assertIn('value', form.required_fields)
|
||||
self.assertFalse(form.required_fields['value'])
|
||||
|
||||
def test_unique_name(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
|
||||
setting = model.Setting(name='foo')
|
||||
self.session.add(setting)
|
||||
self.session.commit()
|
||||
|
||||
with patch.object(view, 'Session', return_value=self.session):
|
||||
|
||||
# invalid if same name in data
|
||||
node = colander.SchemaNode(colander.String(), name='name')
|
||||
self.assertRaises(colander.Invalid, view.unique_name, node, 'foo')
|
||||
|
||||
# but not if name belongs to current setting
|
||||
view.editing = True
|
||||
self.request.matchdict = {'name': 'foo'}
|
||||
node = colander.SchemaNode(colander.String(), name='name')
|
||||
self.assertIsNone(view.unique_name(node, 'foo'))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue