feat: add basic support for batch execution
no execution options yet, and no progress indicator also basic delete support, invoking handler
This commit is contained in:
parent
e3beb9953d
commit
dd1fd8c0ce
9 changed files with 404 additions and 11 deletions
|
@ -8,7 +8,7 @@ from pyramid.httpexceptions import HTTPFound
|
|||
|
||||
from wuttjamaican.db import model
|
||||
from wuttjamaican.batch import BatchHandler
|
||||
from wuttaweb.views import batch as mod
|
||||
from wuttaweb.views import MasterView, batch as mod
|
||||
from wuttaweb.progress import SessionProgress
|
||||
from tests.util import WebTestCase
|
||||
|
||||
|
@ -34,6 +34,9 @@ class TestBatchMasterView(WebTestCase):
|
|||
# nb. create MockBatch, MockBatchRow
|
||||
model.Base.metadata.create_all(bind=self.session.bind)
|
||||
|
||||
def make_handler(self):
|
||||
return MockBatchHandler(self.config)
|
||||
|
||||
def make_view(self):
|
||||
return mod.BatchMasterView(self.request)
|
||||
|
||||
|
@ -44,6 +47,35 @@ class TestBatchMasterView(WebTestCase):
|
|||
view = mod.BatchMasterView(self.request)
|
||||
self.assertEqual(view.batch_handler, 42)
|
||||
|
||||
def test_get_fallback_templates(self):
|
||||
handler = MockBatchHandler(self.config)
|
||||
with patch.object(mod.BatchMasterView, 'get_batch_handler', return_value=handler):
|
||||
view = self.make_view()
|
||||
templates = view.get_fallback_templates('view')
|
||||
self.assertEqual(templates, [
|
||||
'/batch/view.mako',
|
||||
'/master/view.mako',
|
||||
])
|
||||
|
||||
def test_render_to_response(self):
|
||||
model = self.app.model
|
||||
handler = MockBatchHandler(self.config)
|
||||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
batch = handler.make_batch(self.session, created_by=user)
|
||||
self.session.add(batch)
|
||||
self.session.flush()
|
||||
|
||||
with patch.object(mod.BatchMasterView, 'get_batch_handler', return_value=handler):
|
||||
with patch.object(MasterView, 'render_to_response') as render_to_response:
|
||||
view = self.make_view()
|
||||
response = view.render_to_response('view', {'instance': batch})
|
||||
self.assertTrue(render_to_response.called)
|
||||
context = render_to_response.call_args[0][1]
|
||||
self.assertIs(context['batch'], batch)
|
||||
self.assertIs(context['batch_handler'], handler)
|
||||
|
||||
def test_configure_grid(self):
|
||||
handler = MockBatchHandler(self.config)
|
||||
with patch.multiple(mod.BatchMasterView, create=True, model_class=MockBatch):
|
||||
|
@ -162,6 +194,24 @@ class TestBatchMasterView(WebTestCase):
|
|||
thread.start.assert_called_once_with()
|
||||
self.assertTrue(render_progress.called)
|
||||
|
||||
def test_delete_instance(self):
|
||||
model = self.app.model
|
||||
handler = self.make_handler()
|
||||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
|
||||
batch = handler.make_batch(self.session, created_by=user)
|
||||
self.session.add(batch)
|
||||
self.session.flush()
|
||||
|
||||
with patch.object(mod.BatchMasterView, 'get_batch_handler', return_value=handler):
|
||||
view = self.make_view()
|
||||
|
||||
self.assertEqual(self.session.query(MockBatch).count(), 1)
|
||||
view.delete_instance(batch)
|
||||
self.assertEqual(self.session.query(MockBatch).count(), 0)
|
||||
|
||||
def test_populate_thread(self):
|
||||
model = self.app.model
|
||||
handler = MockBatchHandler(self.config)
|
||||
|
@ -213,6 +263,35 @@ class TestBatchMasterView(WebTestCase):
|
|||
# nb. should give up waiting after 1 second
|
||||
self.assertRaises(RuntimeError, view.populate_thread, batch.uuid)
|
||||
|
||||
def test_execute(self):
|
||||
self.pyramid_config.add_route('mock_batches.view', '/batch/mock/{uuid}')
|
||||
model = self.app.model
|
||||
handler = MockBatchHandler(self.config)
|
||||
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
batch = handler.make_batch(self.session, created_by=user)
|
||||
self.session.add(batch)
|
||||
self.session.commit()
|
||||
|
||||
with patch.multiple(mod.BatchMasterView, create=True,
|
||||
model_class=MockBatch,
|
||||
route_prefix='mock_batches',
|
||||
get_batch_handler=MagicMock(return_value=handler),
|
||||
get_instance=MagicMock(return_value=batch)):
|
||||
view = self.make_view()
|
||||
|
||||
# batch executes okay
|
||||
response = view.execute()
|
||||
self.assertEqual(response.status_code, 302) # redirect to "view batch"
|
||||
self.assertFalse(self.request.session.peek_flash('error'))
|
||||
|
||||
# but cannot be executed again
|
||||
response = view.execute()
|
||||
self.assertEqual(response.status_code, 302) # redirect to "view batch"
|
||||
# nb. flash has error this time
|
||||
self.assertTrue(self.request.session.peek_flash('error'))
|
||||
|
||||
def test_get_row_model_class(self):
|
||||
handler = MockBatchHandler(self.config)
|
||||
with patch.object(mod.BatchMasterView, 'get_batch_handler', return_value=handler):
|
||||
|
@ -287,3 +366,8 @@ class TestBatchMasterView(WebTestCase):
|
|||
grid = view.make_row_model_grid(batch)
|
||||
self.assertIn('sequence', grid.labels)
|
||||
self.assertEqual(grid.labels['sequence'], "Seq.")
|
||||
|
||||
def test_defaults(self):
|
||||
# nb. coverage only
|
||||
with patch.object(mod.BatchMasterView, 'model_class', new=MockBatch, create=True):
|
||||
mod.BatchMasterView.defaults(self.pyramid_config)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue