feat: improve widget, rendering for Role notes
This commit is contained in:
parent
b4b72d92aa
commit
bdfa0197b2
11 changed files with 201 additions and 19 deletions
|
@ -8,8 +8,15 @@ from wuttaweb.forms import widgets
|
|||
from wuttaweb.forms.schema import PersonRef
|
||||
from tests.util import WebTestCase
|
||||
|
||||
|
||||
class TestObjectRefWidget(WebTestCase):
|
||||
|
||||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
model = self.app.model
|
||||
person = model.Person(full_name="Betty Boop")
|
||||
|
@ -19,14 +26,14 @@ class TestObjectRefWidget(WebTestCase):
|
|||
# standard (editable)
|
||||
node = colander.SchemaNode(PersonRef(self.request, session=self.session))
|
||||
widget = widgets.ObjectRefWidget(self.request)
|
||||
field = deform.Field(node)
|
||||
field = self.make_field(node)
|
||||
html = widget.serialize(field, person.uuid)
|
||||
self.assertIn('<select ', html)
|
||||
self.assertIn('<b-select ', html)
|
||||
|
||||
# readonly
|
||||
node = colander.SchemaNode(PersonRef(self.request, session=self.session))
|
||||
node.model_instance = person
|
||||
widget = widgets.ObjectRefWidget(self.request)
|
||||
field = deform.Field(node)
|
||||
field = self.make_field(node)
|
||||
html = widget.serialize(field, person.uuid, readonly=True)
|
||||
self.assertEqual(html, '<span>Betty Boop</span>')
|
||||
self.assertEqual(html.strip(), '<span>Betty Boop</span>')
|
||||
|
|
|
@ -75,6 +75,25 @@ class TestGrid(TestCase):
|
|||
grid.remove('two', 'three')
|
||||
self.assertEqual(grid.columns, ['one', 'four'])
|
||||
|
||||
def test_set_renderer(self):
|
||||
grid = self.make_grid(columns=['foo', 'bar'])
|
||||
self.assertEqual(grid.renderers, {})
|
||||
|
||||
def render1(record, key, value):
|
||||
pass
|
||||
|
||||
# basic
|
||||
grid.set_renderer('foo', render1)
|
||||
self.assertIs(grid.renderers['foo'], render1)
|
||||
|
||||
def render2(record, key, value, extra=None):
|
||||
return extra
|
||||
|
||||
# can pass kwargs to get a partial
|
||||
grid.set_renderer('foo', render2, extra=42)
|
||||
self.assertIsNot(grid.renderers['foo'], render2)
|
||||
self.assertEqual(grid.renderers['foo'](None, None, None), 42)
|
||||
|
||||
def test_linked_columns(self):
|
||||
grid = self.make_grid(columns=['foo', 'bar'])
|
||||
self.assertEqual(grid.linked_columns, [])
|
||||
|
@ -143,6 +162,11 @@ class TestGrid(TestCase):
|
|||
self.assertIsNot(data, mydata)
|
||||
self.assertEqual(data, [{'foo': 'bar', '_action_url_view': '/blarg'}])
|
||||
|
||||
# also can override value rendering
|
||||
grid.set_renderer('foo', lambda record, key, value: "blah blah")
|
||||
data = grid.get_vue_data()
|
||||
self.assertEqual(data, [{'foo': 'blah blah', '_action_url_view': '/blarg'}])
|
||||
|
||||
|
||||
class TestGridAction(TestCase):
|
||||
|
||||
|
|
|
@ -50,11 +50,11 @@ class WebTestCase(DataTestCase):
|
|||
self.pyramid_config = testing.setUp(request=self.request, settings={
|
||||
'wutta_config': self.config,
|
||||
'mako.directories': ['wuttaweb:templates'],
|
||||
# TODO: have not need this yet, but will?
|
||||
# 'pyramid_deform.template_search_path': 'wuttaweb:templates/deform',
|
||||
'pyramid_deform.template_search_path': 'wuttaweb:templates/deform',
|
||||
})
|
||||
|
||||
# init web
|
||||
self.pyramid_config.include('pyramid_deform')
|
||||
self.pyramid_config.include('pyramid_mako')
|
||||
self.pyramid_config.include('wuttaweb.static')
|
||||
self.pyramid_config.include('wuttaweb.views.essential')
|
||||
|
|
|
@ -16,6 +16,9 @@ from tests.util import WebTestCase
|
|||
|
||||
class TestMasterView(WebTestCase):
|
||||
|
||||
def make_view(self):
|
||||
return master.MasterView(self.request)
|
||||
|
||||
def test_defaults(self):
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_name='Widget',
|
||||
|
@ -399,6 +402,28 @@ class TestMasterView(WebTestCase):
|
|||
view.configure_grid(grid)
|
||||
self.assertNotIn('uuid', grid.columns)
|
||||
|
||||
def test_grid_render_notes(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
|
||||
# null
|
||||
text = None
|
||||
role = model.Role(name="Foo", notes=text)
|
||||
value = view.grid_render_notes(role, 'notes', text)
|
||||
self.assertIsNone(value)
|
||||
|
||||
# short string
|
||||
text = "hello world"
|
||||
role = model.Role(name="Foo", notes=text)
|
||||
value = view.grid_render_notes(role, 'notes', text)
|
||||
self.assertEqual(value, text)
|
||||
|
||||
# long string
|
||||
text = "hello world " * 20
|
||||
role = model.Role(name="Foo", notes=text)
|
||||
value = view.grid_render_notes(role, 'notes', text)
|
||||
self.assertIn('<span ', value)
|
||||
|
||||
def test_get_instance(self):
|
||||
model = self.app.model
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue