You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by ke...@apache.org on 2019/11/25 18:26:16 UTC
[allura] branch kt/trove_admin_refactor created (now 6954a19)
This is an automated email from the ASF dual-hosted git repository.
kentontaylor pushed a change to branch kt/trove_admin_refactor
in repository https://gitbox.apache.org/repos/asf/allura.git.
at 6954a19 Refactor some trove admin bits, add some test coverage
This branch includes the following new commits:
new 6954a19 Refactor some trove admin bits, add some test coverage
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[allura] 01/01: Refactor some trove admin bits,
add some test coverage
Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kentontaylor pushed a commit to branch kt/trove_admin_refactor
in repository https://gitbox.apache.org/repos/asf/allura.git
commit 6954a19f12d5d8a01c213adec9fb4756dcc4fa5c
Author: Kenton Taylor <kt...@slashdotmedia.com>
AuthorDate: Mon Nov 25 18:26:02 2019 +0000
Refactor some trove admin bits, add some test coverage
---
Allura/allura/controllers/trovecategories.py | 52 +++++++++++++++-------
.../allura/tests/functional/test_trovecategory.py | 33 +++++++++++++-
2 files changed, 68 insertions(+), 17 deletions(-)
diff --git a/Allura/allura/controllers/trovecategories.py b/Allura/allura/controllers/trovecategories.py
index 6edb9d4..d0f191e 100644
--- a/Allura/allura/controllers/trovecategories.py
+++ b/Allura/allura/controllers/trovecategories.py
@@ -38,6 +38,15 @@ class F(object):
add_category_form = forms.AddTroveCategoryForm()
+class TroveAdminException(Exception):
+ def __init__(self, flash_args, redir_params, upper):
+ super(TroveAdminException, self).__init__()
+
+ self.flash_args = flash_args
+ self.redir_params = redir_params
+ self.upper = upper
+
+
class TroveCategoryController(BaseController):
@expose()
def _lookup(self, trove_cat_id, *remainder):
@@ -102,22 +111,15 @@ class TroveCategoryController(BaseController):
}
return dict(tree=OrderedDict(sorted(tree.iteritems())))
- @expose()
- @require_post()
- @validate(F.add_category_form, error_handler=index)
- def create(self, **kw):
- name = kw.get('categoryname')
- upper_id = int(kw.get('uppercategory_id', 0))
- shortname = kw.get('shortname', None)
+
+ def _create(self, name, upper_id, shortname):
upper = M.TroveCategory.query.get(trove_cat_id=upper_id)
if upper_id == 0:
path = name
show_as_skill = True
elif upper is None:
- flash('Invalid upper category.', "error")
- redirect('/categories')
- return
+ raise TroveAdminException(('Invalid upper category.', "error"))
else:
path = upper.fullpath + " :: " + name
show_as_skill = upper.show_as_skill
@@ -133,10 +135,13 @@ class TroveCategoryController(BaseController):
# no parent, so making a top-level. Don't limit fullpath_re, so enforcing global uniqueness
fullpath_re = re.compile(r'')
oldcat = M.TroveCategory.query.get(shortname=shortname, fullpath=fullpath_re)
+
if oldcat:
- flash('A category with shortname "%s" already exists (%s). Try a different, unique shortname'
- % (shortname, oldcat.fullpath), "error")
- redir_params = u'?categoryname={}&shortname={}'.format(name, shortname)
+ raise TroveAdminException(
+ ('A category with shortname "%s" already exists (%s). Try a different, unique shortname' % (shortname, oldcat.fullpath), "error"),
+ u'?categoryname={}&shortname={}'.format(name, shortname),
+ upper
+ )
else:
M.TroveCategory(
trove_cat_id=newid,
@@ -145,8 +150,25 @@ class TroveCategoryController(BaseController):
shortname=shortname,
fullpath=path,
show_as_skill=show_as_skill)
- flash('Category "%s" successfully created.' % name)
- redir_params = ''
+ return upper, ('Category "%s" successfully created.' % name,), ''
+
+ @expose()
+ @require_post()
+ @validate(F.add_category_form, error_handler=index)
+ def create(self, **kw):
+ name = kw.get('categoryname')
+ upper_id = int(kw.get('uppercategory_id', 0))
+ shortname = kw.get('shortname', None)
+
+ try:
+ upper, flash_args, redir_params = self._create(name, upper_id, shortname)
+ except TroveAdminException as ex:
+ upper = ex.upper
+ flash_args = ex.flash_args
+ redir_params = ex.redir_params
+
+ flash(*flash_args)
+
if upper:
redirect(u'/categories/{}/{}'.format(upper.trove_cat_id, redir_params))
else:
diff --git a/Allura/allura/tests/functional/test_trovecategory.py b/Allura/allura/tests/functional/test_trovecategory.py
index 346a9f1..ceeeaaa 100644
--- a/Allura/allura/tests/functional/test_trovecategory.py
+++ b/Allura/allura/tests/functional/test_trovecategory.py
@@ -18,7 +18,7 @@ from bs4 import BeautifulSoup
import mock
from tg import config
-from nose.tools import assert_equals, assert_true, assert_in
+from nose.tools import assert_equals, assert_true, assert_in, assert_equal
from ming.orm import session
from allura import model as M
@@ -149,4 +149,33 @@ class TestTroveCategoryController(TestController):
form = r.forms[0]
r = form.submit()
assert_in("Category removed", self.webflash(r))
- assert_equals(4, M.TroveCategory.query.find().count())
\ No newline at end of file
+ assert_equals(4, M.TroveCategory.query.find().count())
+
+ def test_create_parent(self):
+ self.create_some_cats()
+ session(M.TroveCategory).flush()
+ r = self.app.get('/categories/')
+
+ form = r.forms[1]
+ form['categoryname'].value = "New Category"
+ form.submit()
+
+ possible = M.TroveCategory.query.find(dict(fullname='New Category')).all()
+ assert_equal(len(possible), 1)
+ assert_equal(possible[0].fullname, 'New Category')
+ assert_equal(possible[0].shortname, 'new-category')
+
+ def test_create_child(self):
+ self.create_some_cats()
+ session(M.TroveCategory).flush()
+ r = self.app.get('/categories/2')
+
+ form = r.forms[2]
+ form['categoryname'].value = "New Child"
+ form.submit()
+
+ possible =M.TroveCategory.query.find(dict(fullname='New Child')).all()
+ assert_equal(len(possible), 1)
+ assert_equal(possible[0].fullname, 'New Child')
+ assert_equal(possible[0].shortname, 'new-child')
+ assert_equal(possible[0].trove_parent_id, 2)