3
0
Fork 0

feat; add single-column sorting (frontend or backend) for grids

This commit is contained in:
Lance Edgar 2024-08-18 14:05:10 -05:00
parent f21efbab9f
commit 58f7a862a2
10 changed files with 1215 additions and 100 deletions

View file

@ -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)

View file

@ -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'))