# HG changeset patch
# User osimons
# Date 1249003095 0
# Node ID 5d396356bf7adf411363fd4b5a4806e635ab6c16
# Parent 07ac9218f649db4d2a5ede75c9cc5de1c5f94562
0.6dev: Reworked UI for adding Target Platform. Like elsewhere in Trac web admin, 'New Target Platform' is now a fieldset to the right of the listing. This fixes the issue discussed on #333.
diff --git a/bitten/admin.py b/bitten/admin.py
--- a/bitten/admin.py
+++ b/bitten/admin.py
@@ -124,16 +124,9 @@
req.redirect(req.abs_href.admin(cat, page,
config_name))
else: # creating target platform
- if req.method == 'POST':
- if 'add' in req.args:
- self._create_platform(req, config_name)
- req.redirect(req.abs_href.admin(cat, page,
- config_name))
- elif 'cancel' in req.args:
- req.redirect(req.abs_href.admin(cat, page,
- config_name))
-
- platform = TargetPlatform(self.env, config=config_name)
+ platform = self._create_platform(req, config_name)
+ req.redirect(req.abs_href.admin(cat, page,
+ config_name, platform.id))
# Set up template variables
data['platform'] = {
@@ -151,11 +144,7 @@
config=config.name))
if req.method == 'POST':
- if 'add' in req.args: # Add target platform
- platform = self._create_platform(req, config)
- req.redirect(req.abs_href.admin(cat, page, config.name))
-
- elif 'remove' in req.args: # Remove selected platforms
+ if 'remove' in req.args: # Remove selected platforms
self._remove_platforms(req)
req.redirect(req.abs_href.admin(cat, page, config.name))
@@ -298,12 +287,12 @@
def _create_platform(self, req, config_name):
req.perm.assert_permission('BUILD_MODIFY')
- name = req.args.get('name')
+ name = req.args.get('platform_name')
if not name:
raise TracError('Missing required field "name"', 'Missing field')
platform = TargetPlatform(self.env, config=config_name, name=name)
- self._update_platform(req, platform)
+ platform.insert()
return platform
def _remove_platforms(self, req):
diff --git a/bitten/htdocs/admin.css b/bitten/htdocs/admin.css
--- a/bitten/htdocs/admin.css
+++ b/bitten/htdocs/admin.css
@@ -1,6 +1,9 @@
table.form th { text-align: right; }
div.platforms h3 { margin-top: 3em; }
+table#platformlist { width: 67%; }
table#platformlist td ul { list-style: none; margin: 0; padding: 0; }
+fieldset#newplatform { float:right; width: 30%; margin-top: -0.75em;
+ padding-top: 0; }
dl.help { color: #666; font-size: 90%; margin: 1em .5em; }
dl.help dt { font-weight: bold; }
diff --git a/bitten/templates/bitten_admin_configs.html b/bitten/templates/bitten_admin_configs.html
--- a/bitten/templates/bitten_admin_configs.html
+++ b/bitten/templates/bitten_admin_configs.html
@@ -74,6 +74,15 @@
Target Platforms
+
-
diff --git a/bitten/tests/admin.py b/bitten/tests/admin.py
--- a/bitten/tests/admin.py
+++ b/bitten/tests/admin.py
@@ -593,28 +593,24 @@
self.assertEqual('Steps must have an "id" attribute', e.message)
self.assertEqual('Invalid Recipe', e.title)
- def test_process_new_platform(self):
+ def test_process_new_platform_no_name(self):
BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',
active=True).insert()
data = {}
req = Mock(method='POST', chrome={}, hdf=data, href=Href('/'),
perm=PermissionCache(self.env, 'joe'),
- args={'new': ''})
+ args={'new': '', 'platform_name': ''})
provider = BuildConfigurationsAdminPageProvider(self.env)
- template_name, data = provider.render_admin_panel(
- req, 'bitten', 'configs', 'foo'
- )
+ try:
+ provider.render_admin_panel(req, 'bitten', 'configs', 'foo')
+ self.fail("No TracError?")
+ except Exception, e:
+ self.assertEquals(e.message, 'Missing required field "name"')
+ self.assertEquals(e.title, 'Missing field')
- self.assertEqual('bitten_admin_configs.html', template_name)
- assert 'platform' in data
- platform = data['platform']
- self.assertEqual({
- 'id': None, 'exists': False, 'name': None, 'rules': [('', '')],
- }, platform)
-
- def test_process_add_platform(self):
+ def test_process_new_platform(self):
BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',
active=True).insert()
@@ -625,8 +621,7 @@
req = Mock(method='POST', perm=PermissionCache(self.env, 'joe'),
abs_href=Href('http://example.org/'), redirect=redirect,
authname='joe',
- args={'add': '', 'new': '', 'name': 'Test',
- 'property_0': 'family', 'pattern_0': 'posix'})
+ args={'add': '', 'new': '', 'platform_name': 'Test'})
provider = BuildConfigurationsAdminPageProvider(self.env)
try:
@@ -634,37 +629,12 @@
self.fail('Expected RequestDone')
except RequestDone:
- self.assertEqual('http://example.org/admin/bitten/configs/foo',
+ self.assertEqual('http://example.org/admin/bitten/configs/foo/1',
redirected_to[0])
platforms = list(TargetPlatform.select(self.env, config='foo'))
self.assertEqual(1, len(platforms))
self.assertEqual('Test', platforms[0].name)
- self.assertEqual([('family', 'posix')], platforms[0].rules)
-
- def test_process_add_platform_cancel(self):
- BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',
- active=True).insert()
-
- redirected_to = []
- def redirect(url):
- redirected_to.append(url)
- raise RequestDone
- req = Mock(method='POST', perm=PermissionCache(self.env, 'joe'),
- abs_href=Href('http://example.org/'), redirect=redirect,
- authname='joe',
- args={'cancel': '', 'new': '', 'name': 'Test',
- 'property_0': 'family', 'pattern_0': 'posix'})
-
- provider = BuildConfigurationsAdminPageProvider(self.env)
- try:
- provider.render_admin_panel(req, 'bitten', 'configs', 'foo')
- self.fail('Expected RequestDone')
-
- except RequestDone:
- self.assertEqual('http://example.org/admin/bitten/configs/foo',
- redirected_to[0])
- platforms = list(TargetPlatform.select(self.env, config='foo'))
- self.assertEqual(0, len(platforms))
+ self.assertEqual([], platforms[0].rules)
def test_process_remove_platforms(self):
BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',