# 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

+
+ New Target Platform +
+
+ +
+
@@ -105,8 +114,6 @@
 
-
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',