feat: add basic Grid
class, and /settings master view
This commit is contained in:
parent
2ad1ae9c49
commit
754e0989e4
18 changed files with 640 additions and 12 deletions
0
tests/grids/__init__.py
Normal file
0
tests/grids/__init__.py
Normal file
77
tests/grids/test_base.py
Normal file
77
tests/grids/test_base.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
|
||||
from unittest import TestCase
|
||||
|
||||
from pyramid import testing
|
||||
|
||||
from wuttjamaican.conf import WuttaConfig
|
||||
from wuttaweb.grids import base
|
||||
from wuttaweb.forms import FieldList
|
||||
|
||||
|
||||
class TestGrid(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.config = WuttaConfig(defaults={
|
||||
'wutta.web.menus.handler_spec': 'tests.utils:NullMenuHandler',
|
||||
})
|
||||
|
||||
self.request = testing.DummyRequest(wutta_config=self.config, use_oruga=False)
|
||||
|
||||
self.pyramid_config = testing.setUp(request=self.request, settings={
|
||||
'mako.directories': ['wuttaweb:templates'],
|
||||
})
|
||||
|
||||
def tearDown(self):
|
||||
testing.tearDown()
|
||||
|
||||
def make_grid(self, request=None, **kwargs):
|
||||
return base.Grid(request or self.request, **kwargs)
|
||||
|
||||
def test_constructor(self):
|
||||
|
||||
# empty
|
||||
grid = self.make_grid()
|
||||
self.assertIsNone(grid.key)
|
||||
self.assertIsNone(grid.columns)
|
||||
self.assertIsNone(grid.data)
|
||||
|
||||
# now with columns
|
||||
grid = self.make_grid(columns=['foo', 'bar'])
|
||||
self.assertIsInstance(grid.columns, FieldList)
|
||||
self.assertEqual(grid.columns, ['foo', 'bar'])
|
||||
|
||||
def test_vue_tagname(self):
|
||||
grid = self.make_grid()
|
||||
self.assertEqual(grid.vue_tagname, 'wutta-grid')
|
||||
|
||||
def test_vue_component(self):
|
||||
grid = self.make_grid()
|
||||
self.assertEqual(grid.vue_component, 'WuttaGrid')
|
||||
|
||||
def test_render_vue_tag(self):
|
||||
grid = self.make_grid(columns=['foo', 'bar'])
|
||||
html = grid.render_vue_tag()
|
||||
self.assertEqual(html, '<wutta-grid></wutta-grid>')
|
||||
|
||||
def test_render_vue_template(self):
|
||||
self.pyramid_config.include('pyramid_mako')
|
||||
self.pyramid_config.add_subscriber('wuttaweb.subscribers.before_render',
|
||||
'pyramid.events.BeforeRender')
|
||||
|
||||
grid = self.make_grid(columns=['foo', 'bar'])
|
||||
html = grid.render_vue_template()
|
||||
self.assertIn('<script type="text/x-template" id="wutta-grid-template">', html)
|
||||
|
||||
def test_get_vue_columns(self):
|
||||
|
||||
# error if no columns are set
|
||||
grid = self.make_grid()
|
||||
self.assertRaises(ValueError, grid.get_vue_columns)
|
||||
|
||||
# otherwise get back field/label dicts
|
||||
grid = self.make_grid(columns=['foo', 'bar'])
|
||||
columns = grid.get_vue_columns()
|
||||
first = columns[0]
|
||||
self.assertEqual(first['field'], 'foo')
|
||||
self.assertEqual(first['label'], 'Foo')
|
|
@ -8,6 +8,7 @@ from pyramid.httpexceptions import HTTPFound, HTTPForbidden, HTTPNotFound
|
|||
from wuttjamaican.conf import WuttaConfig
|
||||
from wuttaweb.views import base
|
||||
from wuttaweb.forms import Form
|
||||
from wuttaweb.grids import Grid
|
||||
|
||||
|
||||
class TestView(TestCase):
|
||||
|
@ -31,6 +32,10 @@ class TestView(TestCase):
|
|||
form = self.view.make_form()
|
||||
self.assertIsInstance(form, Form)
|
||||
|
||||
def test_make_grid(self):
|
||||
grid = self.view.make_grid()
|
||||
self.assertIsInstance(grid, Grid)
|
||||
|
||||
def test_notfound(self):
|
||||
error = self.view.notfound()
|
||||
self.assertIsInstance(error, HTTPNotFound)
|
||||
|
|
|
@ -215,6 +215,37 @@ class TestMasterView(WebTestCase):
|
|||
self.assertEqual(master.MasterView.get_template_prefix(), '/machines')
|
||||
del master.MasterView.model_class
|
||||
|
||||
def test_get_grid_key(self):
|
||||
|
||||
# error by default (since no model class)
|
||||
self.assertRaises(AttributeError, master.MasterView.get_grid_key)
|
||||
|
||||
# subclass may specify grid key
|
||||
master.MasterView.grid_key = 'widgets'
|
||||
self.assertEqual(master.MasterView.get_grid_key(), 'widgets')
|
||||
del master.MasterView.grid_key
|
||||
|
||||
# or it may specify route prefix
|
||||
master.MasterView.route_prefix = 'trucks'
|
||||
self.assertEqual(master.MasterView.get_grid_key(), 'trucks')
|
||||
del master.MasterView.route_prefix
|
||||
|
||||
# or it may specify *normalized* model name
|
||||
master.MasterView.model_name_normalized = 'blaster'
|
||||
self.assertEqual(master.MasterView.get_grid_key(), 'blasters')
|
||||
del master.MasterView.model_name_normalized
|
||||
|
||||
# or it may specify *standard* model name
|
||||
master.MasterView.model_name = 'Dinosaur'
|
||||
self.assertEqual(master.MasterView.get_grid_key(), 'dinosaurs')
|
||||
del master.MasterView.model_name
|
||||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Machine')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_grid_key(), 'machines')
|
||||
del master.MasterView.model_class
|
||||
|
||||
def test_get_config_title(self):
|
||||
|
||||
# error by default (since no model class)
|
||||
|
@ -296,11 +327,13 @@ class TestMasterView(WebTestCase):
|
|||
master.MasterView.model_name = 'AppInfo'
|
||||
master.MasterView.route_prefix = 'appinfo'
|
||||
master.MasterView.template_prefix = '/appinfo'
|
||||
master.MasterView.grid_columns = ['foo', 'bar']
|
||||
view = master.MasterView(self.request)
|
||||
response = view.index()
|
||||
del master.MasterView.model_name
|
||||
del master.MasterView.route_prefix
|
||||
del master.MasterView.template_prefix
|
||||
del master.MasterView.grid_columns
|
||||
|
||||
def test_configure(self):
|
||||
model = self.app.model
|
||||
|
|
|
@ -7,17 +7,39 @@ from wuttaweb.views import settings
|
|||
|
||||
class TestAppInfoView(WebTestCase):
|
||||
|
||||
def make_view(self):
|
||||
return settings.AppInfoView(self.request)
|
||||
|
||||
def test_index(self):
|
||||
# sanity/coverage check
|
||||
view = settings.AppInfoView(self.request)
|
||||
view = self.make_view()
|
||||
response = view.index()
|
||||
|
||||
def test_configure_get_simple_settings(self):
|
||||
# sanity/coverage check
|
||||
view = settings.AppInfoView(self.request)
|
||||
view = self.make_view()
|
||||
simple = view.configure_get_simple_settings()
|
||||
|
||||
def test_configure_get_context(self):
|
||||
# sanity/coverage check
|
||||
view = settings.AppInfoView(self.request)
|
||||
view = self.make_view()
|
||||
context = view.configure_get_context()
|
||||
|
||||
|
||||
class TestSettingView(WebTestCase):
|
||||
|
||||
def make_view(self):
|
||||
return settings.SettingView(self.request)
|
||||
|
||||
def test_index_get_grid_data(self):
|
||||
|
||||
# empty data by default
|
||||
view = self.make_view()
|
||||
data = view.index_get_grid_data(session=self.session)
|
||||
self.assertEqual(len(data), 0)
|
||||
|
||||
# unless we save some settings
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
self.session.commit()
|
||||
data = view.index_get_grid_data(session=self.session)
|
||||
self.assertEqual(len(data), 1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue