feat: add People view; improve CRUD master for SQLAlchemy models
This commit is contained in:
parent
fc01fa283a
commit
33589f1cd8
10 changed files with 275 additions and 43 deletions
|
@ -36,9 +36,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# subclass may specify
|
||||
MyModel = MagicMock()
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertIs(master.MasterView.get_model_class(), MyModel)
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertIs(master.MasterView.get_model_class(), MyModel)
|
||||
|
||||
def test_get_model_name(self):
|
||||
|
||||
|
@ -52,9 +52,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Blaster')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_model_name(), 'Blaster')
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_model_name(), 'Blaster')
|
||||
|
||||
def test_get_model_name_normalized(self):
|
||||
|
||||
|
@ -73,9 +73,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Dinosaur')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_model_name_normalized(), 'dinosaur')
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_model_name_normalized(), 'dinosaur')
|
||||
|
||||
def test_get_model_title(self):
|
||||
|
||||
|
@ -94,9 +94,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Dinosaur')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_model_title(), "Dinosaur")
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_model_title(), "Dinosaur")
|
||||
|
||||
def test_get_model_title_plural(self):
|
||||
|
||||
|
@ -120,9 +120,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Dinosaur')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_model_title_plural(), "Dinosaurs")
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_model_title_plural(), "Dinosaurs")
|
||||
|
||||
def test_get_model_key(self):
|
||||
|
||||
|
@ -156,9 +156,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Truck')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_route_prefix(), 'trucks')
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_route_prefix(), 'trucks')
|
||||
|
||||
def test_get_url_prefix(self):
|
||||
|
||||
|
@ -187,9 +187,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Machine')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_url_prefix(), '/machines')
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_url_prefix(), '/machines')
|
||||
|
||||
def test_get_instance_url_prefix(self):
|
||||
|
||||
|
@ -242,9 +242,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Machine')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_template_prefix(), '/machines')
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_template_prefix(), '/machines')
|
||||
|
||||
def test_get_grid_key(self):
|
||||
|
||||
|
@ -273,9 +273,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# 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
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_grid_key(), 'machines')
|
||||
|
||||
def test_get_config_title(self):
|
||||
|
||||
|
@ -304,9 +304,9 @@ class TestMasterView(WebTestCase):
|
|||
|
||||
# or it may specify model class
|
||||
MyModel = MagicMock(__name__='Dinosaur')
|
||||
master.MasterView.model_class = MyModel
|
||||
self.assertEqual(master.MasterView.get_config_title(), "Dinosaurs")
|
||||
del master.MasterView.model_class
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=MyModel):
|
||||
self.assertEqual(master.MasterView.get_config_title(), "Dinosaurs")
|
||||
|
||||
##############################
|
||||
# support methods
|
||||
|
@ -365,6 +365,28 @@ class TestMasterView(WebTestCase):
|
|||
grid = view.make_model_grid(session=self.session)
|
||||
self.assertIs(grid.model_class, model.Setting)
|
||||
|
||||
def test_get_grid_data(self):
|
||||
model = self.app.model
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
self.session.commit()
|
||||
|
||||
# basic logic with Setting model
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=model.Setting):
|
||||
view = master.MasterView(self.request)
|
||||
data = view.get_grid_data(session=self.session)
|
||||
self.assertEqual(len(data), 1)
|
||||
self.assertEqual(data[0], {'name': 'foo', 'value': 'bar'})
|
||||
|
||||
# error if model not known
|
||||
view = master.MasterView(self.request)
|
||||
self.assertFalse(hasattr(master.MasterView, 'model_class'))
|
||||
def get_query(session=None):
|
||||
session = session or self.session
|
||||
return session.query(model.Setting)
|
||||
with patch.object(view, 'get_query', new=get_query):
|
||||
self.assertRaises(ValueError, view.get_grid_data, session=self.session)
|
||||
|
||||
def test_get_instance(self):
|
||||
model = self.app.model
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
|
@ -408,6 +430,19 @@ class TestMasterView(WebTestCase):
|
|||
form = view.make_model_form()
|
||||
self.assertIs(form.model_class, model.Setting)
|
||||
|
||||
def test_configure_form(self):
|
||||
model = self.app.model
|
||||
|
||||
# uuid field is pruned
|
||||
with patch.multiple(master.MasterView, create=True,
|
||||
model_class=model.Setting):
|
||||
view = master.MasterView(self.request)
|
||||
form = view.make_form(model_class=model.Setting,
|
||||
fields=['uuid', 'name', 'value'])
|
||||
self.assertIn('uuid', form.fields)
|
||||
view.configure_form(form)
|
||||
self.assertNotIn('uuid', form.fields)
|
||||
|
||||
def test_objectify(self):
|
||||
model = self.app.model
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
|
|
39
tests/views/test_people.py
Normal file
39
tests/views/test_people.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from sqlalchemy import orm
|
||||
|
||||
from pyramid.httpexceptions import HTTPNotFound
|
||||
|
||||
from wuttaweb.views import people
|
||||
from tests.views.utils import WebTestCase
|
||||
|
||||
|
||||
class TestPersonView(WebTestCase):
|
||||
|
||||
def make_view(self):
|
||||
return people.PersonView(self.request)
|
||||
|
||||
def test_get_query(self):
|
||||
view = self.make_view()
|
||||
query = view.get_query(session=self.session)
|
||||
self.assertIsInstance(query, orm.Query)
|
||||
|
||||
def test_configure_grid(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
grid = view.make_grid(model_class=model.Setting)
|
||||
self.assertEqual(grid.linked_columns, [])
|
||||
view.configure_grid(grid)
|
||||
self.assertIn('full_name', grid.linked_columns)
|
||||
|
||||
def test_configure_form(self):
|
||||
model = self.app.model
|
||||
view = self.make_view()
|
||||
form = view.make_form(model_class=model.Person)
|
||||
form.set_fields(form.get_model_fields())
|
||||
self.assertEqual(form.required_fields, {})
|
||||
view.configure_form(form)
|
||||
self.assertTrue(form.required_fields)
|
||||
self.assertFalse(form.required_fields['middle_name'])
|
Loading…
Add table
Add a link
Reference in a new issue