# -*- coding: utf-8; -*- import datetime from unittest.mock import patch, MagicMock from wuttaweb.views import upgrades as mod from tests.util import WebTestCase class TestUpgradeView(WebTestCase): def make_view(self): return mod.UpgradeView(self.request) def test_includeme(self): self.pyramid_config.include('wuttaweb.views.upgrades') def test_configure_grid(self): model = self.app.model view = self.make_view() # sanity / coverage check grid = view.make_grid(model_class=model.Upgrade) view.configure_grid(grid) def test_grid_row_class(self): model = self.app.model enum = self.app.enum upgrade = model.Upgrade(description="test", status=enum.UpgradeStatus.PENDING) data = dict(upgrade) view = self.make_view() self.assertIsNone(view.grid_row_class(upgrade, data, 1)) upgrade.status = enum.UpgradeStatus.EXECUTING self.assertEqual(view.grid_row_class(upgrade, data, 1), 'has-background-warning') upgrade.status = enum.UpgradeStatus.SUCCESS self.assertIsNone(view.grid_row_class(upgrade, data, 1)) upgrade.status = enum.UpgradeStatus.FAILURE self.assertEqual(view.grid_row_class(upgrade, data, 1), 'has-background-warning') def test_configure_form(self): model = self.app.model enum = self.app.enum user = model.User(username='barney') self.session.add(user) upgrade = model.Upgrade(description='test', created_by=user, status=enum.UpgradeStatus.PENDING) self.session.add(upgrade) self.session.commit() view = self.make_view() # some fields exist when viewing with patch.object(view, 'viewing', new=True): form = view.make_form(model_class=model.Upgrade, model_instance=upgrade) self.assertIn('created', form) view.configure_form(form) self.assertIn('created', form) # but then are removed when creating with patch.object(view, 'creating', new=True): form = view.make_form(model_class=model.Upgrade) self.assertIn('created', form) view.configure_form(form) self.assertNotIn('created', form) # test executed field when viewing with patch.object(view, 'viewing', new=True): # executed is *not* shown by default form = view.make_form(model_class=model.Upgrade, model_instance=upgrade) self.assertIn('executed', form) view.configure_form(form) self.assertNotIn('executed', form) # but it *is* shown if upgrade is executed upgrade.executed = datetime.datetime.now() form = view.make_form(model_class=model.Upgrade, model_instance=upgrade) self.assertIn('executed', form) view.configure_form(form) self.assertIn('executed', form) def test_objectify(self): model = self.app.model enum = self.app.enum user = model.User(username='barney') self.session.add(user) self.session.commit() view = self.make_view() # user and status are auto-set when creating self.request.user = user self.request.method = 'POST' self.request.POST = {'description': "new one"} with patch.object(view, 'creating', new=True): form = view.make_model_form() self.assertTrue(form.validate()) upgrade = view.objectify(form) self.assertEqual(upgrade.description, "new one") self.assertIs(upgrade.created_by, user) self.assertEqual(upgrade.status, enum.UpgradeStatus.PENDING)