feat: add basic support for execute upgrades, download stdout/stderr
upgrade progress is still not being shown yet
This commit is contained in:
parent
1a8900c9f4
commit
e5e31a7d32
17 changed files with 805 additions and 12 deletions
|
@ -30,6 +30,8 @@ class TestMasterView(WebTestCase):
|
|||
model_key='uuid',
|
||||
deletable_bulk=True,
|
||||
has_autocomplete=True,
|
||||
downloadable=True,
|
||||
executable=True,
|
||||
configurable=True):
|
||||
mod.MasterView.defaults(self.pyramid_config)
|
||||
|
||||
|
@ -1310,6 +1312,59 @@ class TestMasterView(WebTestCase):
|
|||
self.assertEqual(normal, {'value': 'bogus',
|
||||
'label': "Betty Boop"})
|
||||
|
||||
def test_download(self):
|
||||
model = self.app.model
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
self.session.commit()
|
||||
|
||||
with patch.multiple(mod.MasterView, create=True,
|
||||
model_class=model.Setting,
|
||||
model_key='name',
|
||||
Session=MagicMock(return_value=self.session)):
|
||||
view = self.make_view()
|
||||
self.request.matchdict = {'name': 'foo'}
|
||||
|
||||
# 404 if no filename
|
||||
response = view.download()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
# 404 if bad filename
|
||||
self.request.GET = {'filename': 'doesnotexist'}
|
||||
response = view.download()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
# 200 if good filename
|
||||
foofile = self.write_file('foo.txt', 'foo')
|
||||
with patch.object(view, 'download_path', return_value=foofile):
|
||||
response = view.download()
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.content_disposition, 'attachment; filename="foo.txt"')
|
||||
|
||||
def test_execute(self):
|
||||
self.pyramid_config.add_route('settings.view', '/settings/{name}')
|
||||
model = self.app.model
|
||||
self.app.save_setting(self.session, 'foo', 'bar')
|
||||
self.session.commit()
|
||||
|
||||
with patch.multiple(mod.MasterView, create=True,
|
||||
model_class=model.Setting,
|
||||
model_key='name',
|
||||
Session=MagicMock(return_value=self.session)):
|
||||
view = self.make_view()
|
||||
self.request.matchdict = {'name': 'foo'}
|
||||
|
||||
# basic usage, redirects to view obj url
|
||||
response = view.execute()
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(self.request.session.pop_flash(), ["Setting was executed."])
|
||||
|
||||
# execution error
|
||||
with patch.object(view, 'execute_instance', side_effect=RuntimeError):
|
||||
response = view.execute()
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertEqual(self.request.session.pop_flash(), [])
|
||||
self.assertEqual(self.request.session.pop_flash('error'), ["RuntimeError"])
|
||||
|
||||
def test_configure(self):
|
||||
self.pyramid_config.include('wuttaweb.views.common')
|
||||
self.pyramid_config.include('wuttaweb.views.auth')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue