2024-12-13 22:20:04 -06:00
|
|
|
# -*- coding: utf-8; -*-
|
|
|
|
|
|
|
|
import datetime
|
|
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
|
2024-12-14 10:38:49 -06:00
|
|
|
from sqlalchemy import orm
|
2024-12-13 22:20:04 -06:00
|
|
|
from pyramid.httpexceptions import HTTPFound
|
|
|
|
|
|
|
|
from wuttjamaican.db import model
|
|
|
|
from wuttjamaican.batch import BatchHandler
|
2024-12-14 20:42:57 -06:00
|
|
|
from wuttaweb.views import MasterView, batch as mod
|
2024-12-13 22:20:04 -06:00
|
|
|
from wuttaweb.progress import SessionProgress
|
2025-01-06 16:47:48 -06:00
|
|
|
from wuttaweb.testing import WebTestCase
|
2024-12-13 22:20:04 -06:00
|
|
|
|
|
|
|
|
|
|
|
class MockBatch(model.BatchMixin, model.Base):
|
2025-08-31 12:26:43 -05:00
|
|
|
__tablename__ = "testing_batch_mock"
|
|
|
|
|
2024-12-13 22:20:04 -06:00
|
|
|
|
|
|
|
class MockBatchRow(model.BatchRowMixin, model.Base):
|
2025-08-31 12:26:43 -05:00
|
|
|
__tablename__ = "testing_batch_mock_row"
|
2024-12-13 22:20:04 -06:00
|
|
|
__batch_class__ = MockBatch
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
|
2024-12-14 10:38:49 -06:00
|
|
|
MockBatch.__row_class__ = MockBatchRow
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
|
2024-12-13 22:20:04 -06:00
|
|
|
class MockBatchHandler(BatchHandler):
|
|
|
|
model_class = MockBatch
|
|
|
|
|
|
|
|
|
|
|
|
class TestBatchMasterView(WebTestCase):
|
|
|
|
|
2024-12-14 10:38:49 -06:00
|
|
|
def setUp(self):
|
|
|
|
self.setup_web()
|
|
|
|
|
|
|
|
# nb. create MockBatch, MockBatchRow
|
|
|
|
model.Base.metadata.create_all(bind=self.session.bind)
|
|
|
|
|
2024-12-14 20:42:57 -06:00
|
|
|
def make_handler(self):
|
|
|
|
return MockBatchHandler(self.config)
|
|
|
|
|
2024-12-14 10:38:49 -06:00
|
|
|
def make_view(self):
|
|
|
|
return mod.BatchMasterView(self.request)
|
|
|
|
|
2024-12-13 22:20:04 -06:00
|
|
|
def test_get_batch_handler(self):
|
|
|
|
self.assertRaises(NotImplementedError, mod.BatchMasterView, self.request)
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(mod.BatchMasterView, "get_batch_handler", return_value=42):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
self.assertEqual(view.batch_handler, 42)
|
|
|
|
|
2024-12-14 20:42:57 -06:00
|
|
|
def test_get_fallback_templates(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-14 20:42:57 -06:00
|
|
|
view = self.make_view()
|
2025-08-31 12:26:43 -05:00
|
|
|
templates = view.get_fallback_templates("view")
|
|
|
|
self.assertEqual(
|
|
|
|
templates,
|
|
|
|
[
|
|
|
|
"/batch/view.mako",
|
|
|
|
"/master/view.mako",
|
|
|
|
],
|
|
|
|
)
|
2024-12-14 20:42:57 -06:00
|
|
|
|
|
|
|
def test_render_to_response(self):
|
|
|
|
model = self.app.model
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
user = model.User(username="barney")
|
2024-12-14 20:42:57 -06:00
|
|
|
self.session.add(user)
|
|
|
|
batch = handler.make_batch(self.session, created_by=user)
|
|
|
|
self.session.add(batch)
|
|
|
|
self.session.flush()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
|
|
|
with patch.object(MasterView, "render_to_response") as render_to_response:
|
2024-12-14 20:42:57 -06:00
|
|
|
view = self.make_view()
|
2025-08-31 12:26:43 -05:00
|
|
|
response = view.render_to_response("view", {"instance": batch})
|
2024-12-14 20:42:57 -06:00
|
|
|
self.assertTrue(render_to_response.called)
|
|
|
|
context = render_to_response.call_args[0][1]
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIs(context["batch"], batch)
|
|
|
|
self.assertIs(context["batch_handler"], handler)
|
2024-12-14 20:42:57 -06:00
|
|
|
|
2024-12-13 22:20:04 -06:00
|
|
|
def test_configure_grid(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
with patch.multiple(mod.BatchMasterView, create=True, model_class=MockBatch):
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
grid = view.make_model_grid()
|
|
|
|
# nb. coverage only; tests nothing
|
|
|
|
view.configure_grid(grid)
|
|
|
|
|
|
|
|
def test_render_batch_id(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
batch = MockBatch(id=42)
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
result = view.render_batch_id(batch, "id", 42)
|
|
|
|
self.assertEqual(result, "00000042")
|
2024-12-13 22:20:04 -06:00
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
result = view.render_batch_id(batch, "id", None)
|
2024-12-13 22:20:04 -06:00
|
|
|
self.assertIsNone(result)
|
|
|
|
|
|
|
|
def test_get_instance_title(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
|
|
|
|
batch = MockBatch(id=42)
|
|
|
|
result = view.get_instance_title(batch)
|
|
|
|
self.assertEqual(result, "00000042")
|
|
|
|
|
|
|
|
batch = MockBatch(id=43, description="runnin some numbers")
|
|
|
|
result = view.get_instance_title(batch)
|
|
|
|
self.assertEqual(result, "00000043 runnin some numbers")
|
|
|
|
|
|
|
|
def test_configure_form(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
with patch.multiple(mod.BatchMasterView, create=True, model_class=MockBatch):
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
|
|
|
|
# creating
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "creating", new=True):
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=None)
|
|
|
|
view.configure_form(form)
|
|
|
|
|
|
|
|
batch = MockBatch(id=42)
|
|
|
|
|
|
|
|
# viewing
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "viewing", new=True):
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=batch)
|
|
|
|
view.configure_form(form)
|
|
|
|
|
|
|
|
# editing
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "editing", new=True):
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=batch)
|
|
|
|
view.configure_form(form)
|
|
|
|
|
|
|
|
# deleting
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "deleting", new=True):
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=batch)
|
|
|
|
view.configure_form(form)
|
|
|
|
|
|
|
|
# viewing (executed)
|
|
|
|
batch.executed = datetime.datetime.now()
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "viewing", new=True):
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=batch)
|
|
|
|
view.configure_form(form)
|
|
|
|
|
|
|
|
def test_objectify(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
with patch.multiple(mod.BatchMasterView, create=True, model_class=MockBatch):
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "Session", return_value=self.session
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
|
|
|
|
# create batch
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "creating", new=True):
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=None)
|
|
|
|
form.validated = {}
|
|
|
|
batch = view.objectify(form)
|
|
|
|
self.assertIsInstance(batch.id, int)
|
|
|
|
self.assertTrue(batch.id > 0)
|
|
|
|
|
|
|
|
# edit batch
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(view, "editing", new=True):
|
|
|
|
with patch.object(
|
|
|
|
view.batch_handler, "make_batch"
|
|
|
|
) as make_batch:
|
2024-12-13 22:20:04 -06:00
|
|
|
form = view.make_model_form(model_instance=batch)
|
2025-08-31 12:26:43 -05:00
|
|
|
form.validated = {"description": "foo"}
|
2024-12-13 22:20:04 -06:00
|
|
|
self.assertIsNone(batch.description)
|
|
|
|
batch = view.objectify(form)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(batch.description, "foo")
|
2024-12-13 22:20:04 -06:00
|
|
|
|
|
|
|
def test_redirect_after_create(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.pyramid_config.add_route("mock_batches.view", "/batch/mock/{uuid}")
|
2024-12-13 22:20:04 -06:00
|
|
|
handler = MockBatchHandler(self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
|
|
|
with patch.multiple(
|
|
|
|
mod.BatchMasterView,
|
|
|
|
create=True,
|
|
|
|
model_class=MockBatch,
|
|
|
|
route_prefix="mock_batches",
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
|
|
|
batch = MockBatch(id=42)
|
|
|
|
|
|
|
|
# typically redirect to view batch
|
|
|
|
result = view.redirect_after_create(batch)
|
|
|
|
self.assertIsInstance(result, HTTPFound)
|
|
|
|
|
|
|
|
# unless populating in which case thread is launched
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.session.id = "abcdefghijk"
|
|
|
|
with patch.object(mod, "threading") as threading:
|
2024-12-13 22:20:04 -06:00
|
|
|
thread = MagicMock()
|
|
|
|
threading.Thread.return_value = thread
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
view.batch_handler, "should_populate", return_value=True
|
|
|
|
):
|
|
|
|
with patch.object(view, "render_progress") as render_progress:
|
2024-12-13 22:20:04 -06:00
|
|
|
view.redirect_after_create(batch)
|
|
|
|
self.assertTrue(threading.Thread.called)
|
|
|
|
thread.start.assert_called_once_with()
|
|
|
|
self.assertTrue(render_progress.called)
|
|
|
|
|
2024-12-14 20:42:57 -06:00
|
|
|
def test_delete_instance(self):
|
|
|
|
model = self.app.model
|
|
|
|
handler = self.make_handler()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
user = model.User(username="barney")
|
2024-12-14 20:42:57 -06:00
|
|
|
self.session.add(user)
|
|
|
|
|
|
|
|
batch = handler.make_batch(self.session, created_by=user)
|
|
|
|
self.session.add(batch)
|
|
|
|
self.session.flush()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-14 20:42:57 -06:00
|
|
|
view = self.make_view()
|
|
|
|
|
|
|
|
self.assertEqual(self.session.query(MockBatch).count(), 1)
|
|
|
|
view.delete_instance(batch)
|
|
|
|
self.assertEqual(self.session.query(MockBatch).count(), 0)
|
|
|
|
|
2024-12-13 22:20:04 -06:00
|
|
|
def test_populate_thread(self):
|
|
|
|
model = self.app.model
|
|
|
|
handler = MockBatchHandler(self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
|
|
|
with patch.multiple(
|
|
|
|
mod.BatchMasterView, create=True, model_class=MockBatch
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view = mod.BatchMasterView(self.request)
|
2025-08-31 12:26:43 -05:00
|
|
|
user = model.User(username="barney")
|
2024-12-13 22:20:04 -06:00
|
|
|
self.session.add(user)
|
|
|
|
batch = MockBatch(id=42, created_by=user)
|
|
|
|
self.session.add(batch)
|
|
|
|
self.session.commit()
|
|
|
|
|
|
|
|
# nb. use our session within thread method
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(self.app, "make_session", return_value=self.session):
|
2024-12-13 22:20:04 -06:00
|
|
|
|
|
|
|
# nb. prevent closing our session
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(self.session, "close") as close:
|
2024-12-13 22:20:04 -06:00
|
|
|
|
|
|
|
# without progress
|
|
|
|
view.populate_thread(batch.uuid)
|
|
|
|
close.assert_called_once_with()
|
|
|
|
close.reset_mock()
|
|
|
|
|
|
|
|
# with progress
|
2025-08-31 12:26:43 -05:00
|
|
|
self.request.session.id = "abcdefghijk"
|
|
|
|
view.populate_thread(
|
|
|
|
batch.uuid,
|
|
|
|
progress=SessionProgress(
|
|
|
|
self.request, "populate_mock_batch"
|
|
|
|
),
|
|
|
|
)
|
2024-12-13 22:20:04 -06:00
|
|
|
close.assert_called_once_with()
|
|
|
|
close.reset_mock()
|
|
|
|
|
|
|
|
# failure to populate, without progress
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
view.batch_handler, "do_populate", side_effect=RuntimeError
|
|
|
|
):
|
2024-12-13 22:20:04 -06:00
|
|
|
view.populate_thread(batch.uuid)
|
|
|
|
close.assert_called_once_with()
|
|
|
|
close.reset_mock()
|
|
|
|
|
|
|
|
# failure to populate, with progress
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
view.batch_handler, "do_populate", side_effect=RuntimeError
|
|
|
|
):
|
|
|
|
view.populate_thread(
|
|
|
|
batch.uuid,
|
|
|
|
progress=SessionProgress(
|
|
|
|
self.request, "populate_mock_batch"
|
|
|
|
),
|
|
|
|
)
|
2024-12-13 22:20:04 -06:00
|
|
|
close.assert_called_once_with()
|
|
|
|
close.reset_mock()
|
|
|
|
|
|
|
|
# failure for batch to appear
|
|
|
|
self.session.delete(batch)
|
|
|
|
self.session.commit()
|
|
|
|
# nb. should give up waiting after 1 second
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertRaises(
|
|
|
|
RuntimeError, view.populate_thread, batch.uuid
|
|
|
|
)
|
2024-12-14 10:38:49 -06:00
|
|
|
|
2024-12-14 20:42:57 -06:00
|
|
|
def test_execute(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
self.pyramid_config.add_route("mock_batches.view", "/batch/mock/{uuid}")
|
2024-12-14 20:42:57 -06:00
|
|
|
model = self.app.model
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
user = model.User(username="barney")
|
2024-12-14 20:42:57 -06:00
|
|
|
self.session.add(user)
|
|
|
|
batch = handler.make_batch(self.session, created_by=user)
|
|
|
|
self.session.add(batch)
|
|
|
|
self.session.commit()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
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),
|
|
|
|
):
|
2024-12-14 20:42:57 -06:00
|
|
|
view = self.make_view()
|
|
|
|
|
|
|
|
# batch executes okay
|
|
|
|
response = view.execute()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(response.status_code, 302) # redirect to "view batch"
|
|
|
|
self.assertFalse(self.request.session.peek_flash("error"))
|
2024-12-14 20:42:57 -06:00
|
|
|
|
|
|
|
# but cannot be executed again
|
|
|
|
response = view.execute()
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertEqual(response.status_code, 302) # redirect to "view batch"
|
2024-12-14 20:42:57 -06:00
|
|
|
# nb. flash has error this time
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertTrue(self.request.session.peek_flash("error"))
|
2024-12-14 20:42:57 -06:00
|
|
|
|
2024-12-14 10:38:49 -06:00
|
|
|
def test_get_row_model_class(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
view = self.make_view()
|
|
|
|
|
|
|
|
self.assertRaises(AttributeError, view.get_row_model_class)
|
|
|
|
|
|
|
|
# row class determined from batch class
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "model_class", new=MockBatch, create=True
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
cls = view.get_row_model_class()
|
|
|
|
self.assertIs(cls, MockBatchRow)
|
|
|
|
|
|
|
|
self.assertRaises(AttributeError, view.get_row_model_class)
|
|
|
|
|
|
|
|
# view may specify row class
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "row_model_class", new=MockBatchRow, create=True
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
cls = view.get_row_model_class()
|
|
|
|
self.assertIs(cls, MockBatchRow)
|
|
|
|
|
|
|
|
def test_get_row_grid_data(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
model = self.app.model
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
user = model.User(username="barney")
|
2024-12-14 10:38:49 -06:00
|
|
|
self.session.add(user)
|
|
|
|
|
|
|
|
batch = handler.make_batch(self.session, created_by=user)
|
|
|
|
self.session.add(batch)
|
|
|
|
row = handler.make_row()
|
|
|
|
handler.add_row(batch, row)
|
|
|
|
self.session.flush()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
|
|
|
|
view = self.make_view()
|
|
|
|
self.assertRaises(AttributeError, view.get_row_grid_data, batch)
|
|
|
|
|
|
|
|
Session = MagicMock(return_value=self.session)
|
|
|
|
Session.query.side_effect = lambda m: self.session.query(m)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.multiple(
|
|
|
|
mod.BatchMasterView, create=True, Session=Session, model_class=MockBatch
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
|
|
|
|
view = self.make_view()
|
|
|
|
data = view.get_row_grid_data(batch)
|
|
|
|
self.assertIsInstance(data, orm.Query)
|
|
|
|
self.assertEqual(data.count(), 1)
|
|
|
|
|
|
|
|
def test_configure_row_grid(self):
|
|
|
|
handler = MockBatchHandler(self.config)
|
|
|
|
model = self.app.model
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
user = model.User(username="barney")
|
2024-12-14 10:38:49 -06:00
|
|
|
self.session.add(user)
|
|
|
|
|
|
|
|
batch = handler.make_batch(self.session, created_by=user)
|
|
|
|
self.session.add(batch)
|
|
|
|
row = handler.make_row()
|
|
|
|
handler.add_row(batch, row)
|
|
|
|
self.session.flush()
|
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "get_batch_handler", return_value=handler
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
|
|
|
|
Session = MagicMock(return_value=self.session)
|
|
|
|
Session.query.side_effect = lambda m: self.session.query(m)
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.multiple(
|
|
|
|
mod.BatchMasterView, create=True, Session=Session, model_class=MockBatch
|
|
|
|
):
|
2024-12-14 10:38:49 -06:00
|
|
|
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(self.request, "matchdict", new={"uuid": batch.uuid}):
|
2024-12-14 10:38:49 -06:00
|
|
|
view = self.make_view()
|
|
|
|
grid = view.make_row_model_grid(batch)
|
2025-08-31 12:26:43 -05:00
|
|
|
self.assertIn("sequence", grid.labels)
|
|
|
|
self.assertEqual(grid.labels["sequence"], "Seq.")
|
2024-12-14 20:42:57 -06:00
|
|
|
|
2025-01-02 23:14:10 -06:00
|
|
|
def test_render_row_status(self):
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(mod.BatchMasterView, "get_batch_handler", return_value=None):
|
2025-01-02 23:14:10 -06:00
|
|
|
view = self.make_view()
|
2025-08-31 12:26:43 -05:00
|
|
|
row = MagicMock(foo=1, STATUS={1: "bar"})
|
|
|
|
self.assertEqual(view.render_row_status(row, "foo", 1), "bar")
|
2025-01-02 23:14:10 -06:00
|
|
|
|
2024-12-14 20:42:57 -06:00
|
|
|
def test_defaults(self):
|
|
|
|
# nb. coverage only
|
2025-08-31 12:26:43 -05:00
|
|
|
with patch.object(
|
|
|
|
mod.BatchMasterView, "model_class", new=MockBatch, create=True
|
|
|
|
):
|
2024-12-14 20:42:57 -06:00
|
|
|
mod.BatchMasterView.defaults(self.pyramid_config)
|