changeset 434:ca0fded18882

Fixes and more tests for the admin panels.
author cmlenz
date Thu, 16 Aug 2007 22:07:47 +0000
parents 201f467e0ec1
children 8424a8afd1a1
files bitten/admin.py bitten/templates/bitten_admin_configs.cs bitten/tests/admin.py
diffstat 3 files changed, 58 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/admin.py
+++ b/bitten/admin.py
@@ -98,7 +98,7 @@
 
             if req.method == 'POST':
                 if 'save' in req.args:
-                    self._save_config(req, config)
+                    self._update_config(req, config)
                 req.redirect(req.abs_href.admin(cat, page))
 
             data['config'] = {
@@ -142,7 +142,12 @@
     # Internal methods
 
     def _activate_configs(self, req):
+        req.perm.assert_permission('BUILD_MODIFY')
+
         active = req.args.get('active')
+        if not active:
+            return
+
         active = isinstance(active, list) and active or [active]
         db = self.env.get_db_cnx()
         for config in BuildConfig.select(self.env, db=db,
@@ -153,6 +158,14 @@
 
     def _create_config(self, req):
         req.perm.assert_permission('BUILD_CREATE')
+
+        name = req.args.get('name')
+        if not name:
+            raise TracError('Missing required field "name"', 'Missing field')
+        if not re.match(r'^[\w.-]+$', name):
+            raise TracError('The field "name" may only contain letters, '
+                            'digits, periods, or dashes.', 'Invalid field')
+
         config = BuildConfig(self.env)
         config.name = req.args.get('name')
         config.label = req.args.get('label', config.name)
@@ -175,6 +188,8 @@
         db.commit()
 
     def _update_config(self, req, config):
+        req.perm.assert_permission('BUILD_MODIFY')
+
         name = req.args.get('name')
         if not name:
             raise TracError('Missing required field "name"', 'Missing field')
@@ -194,8 +209,7 @@
             try:
                 repos.get_node(path, req.args.get('min_rev'))
             except TracError, e:
-                raise TracError(e,
-                                'Invalid value for oldest revision')
+                raise TracError(e, 'Invalid value for oldest revision')
 
         recipe_xml = req.args.get('recipe', '')
         if recipe_xml:
--- a/bitten/templates/bitten_admin_configs.cs
+++ b/bitten/templates/bitten_admin_configs.cs
@@ -61,12 +61,18 @@
  <form class="addnew" id="addcomp" method="post">
   <fieldset>
    <legend>Add Configuration:</legend>
-   <div class="field">
-    <label>Name:<br /><input type="text" name="name" /></label>
-   </div>
-   <div class="field">
-    <label>Label:<br /><input type="text" name="label" /></label>
-   </div>
+   <table summary=""><tr>
+    <td class="name"><div class="field"><label>Name:<br />
+     <input type="text" name="name" size="12" />
+    </label></div></td>
+    <td class="label"><div class="field"><label>Label:<br />
+     <input type="text" name="label" size="22" />
+    </label></div></td>
+   </tr><tr>
+     <td class="path" colspan="2"><div class="field">
+      <label>Path:<br /><input type="text" name="path" size="32" /></label>
+     </div>
+   </tr></table>
    <div class="buttons">
     <input type="submit" name="add" value="Add">
    </div>
--- a/bitten/tests/admin.py
+++ b/bitten/tests/admin.py
@@ -247,6 +247,18 @@
             config = BuildConfig.fetch(self.env, name='bar')
             self.assertEqual('Bar', config.label)
 
+    def test_process_add_config_no_name(self):
+        req = Mock(method='POST', perm=PermissionCache(self.env, 'joe'),
+                   args={'add': '', 'name': ''})
+
+        provider = BuildConfigurationsAdminPageProvider(self.env)
+        try:
+            provider.process_admin_request(req, 'bitten', 'configs', '')
+            self.fail('Expected TracError')
+
+        except TracError, e:
+            self.assertEqual('Missing required field "name"', e.message)
+
     def test_process_add_config_no_perms(self):
         BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',
                     active=True).insert()
@@ -257,12 +269,8 @@
                    args={'add': '', 'name': 'bar', 'label': 'Bar'})
 
         provider = BuildConfigurationsAdminPageProvider(self.env)
-        try:
-            provider.process_admin_request(req, 'bitten', 'configs', '')
-            self.fail('Expected PermissionError')
-
-        except PermissionError:
-            pass
+        self.assertRaises(PermissionError, provider.process_admin_request, req,
+                          'bitten', 'configs', '')
 
     def test_process_remove_config(self):
         BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',
@@ -328,12 +336,23 @@
                    args={'remove': '', 'sel': 'bar'})
 
         provider = BuildConfigurationsAdminPageProvider(self.env)
+        self.assertRaises(PermissionError, provider.process_admin_request, req,
+                          'bitten', 'configs', '')
+
+    def test_process_update_config_no_name(self):
+        BuildConfig(self.env, name='foo', label='Foo', path='branches/foo',
+                    active=True).insert()
+
+        req = Mock(method='POST', perm=PermissionCache(self.env, 'joe'),
+                   args={'save': ''})
+
+        provider = BuildConfigurationsAdminPageProvider(self.env)
         try:
-            provider.process_admin_request(req, 'bitten', 'configs', '')
-            self.fail('Expected PermissionError')
+            provider.process_admin_request(req, 'bitten', 'configs', 'foo')
+            self.fail('Expected TracError')
 
-        except PermissionError:
-            pass
+        except TracError, e:
+            self.assertEqual('Missing required field "name"', e.message)
 
 
 def suite():
Copyright (C) 2012-2017 Edgewall Software