104 lines
3.7 KiB
Python
104 lines
3.7 KiB
Python
|
# -*- 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)
|