[#7909] ticket:817 Use dashes when suggesting project shortnames
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 3fc5e87..be69b29 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -685,7 +685,8 @@ def suggest_name(self, project_name, neighborhood):
Example: "My Great Project" -> "mygreatproject"
"""
- return re.sub("[^A-Za-z0-9]", "", project_name).lower()
+ name = re.sub("[^A-Za-z0-9]", " ", project_name).lower()
+ return '-'.join(name.split())
def rate_limit(self, user, neighborhood):
"""Check the various config-defined project registration rate
diff --git a/Allura/allura/tests/functional/test_neighborhood.py b/Allura/allura/tests/functional/test_neighborhood.py
index 593671d..5d0d3ac 100644
--- a/Allura/allura/tests/functional/test_neighborhood.py
+++ b/Allura/allura/tests/functional/test_neighborhood.py
@@ -825,9 +825,9 @@ def test_projects_anchored_tools(self):
def test_name_suggest(self):
r = self.app.get('/p/suggest_name?project_name=My+Moz')
- assert_equal(r.json, dict(suggested_name='mymoz'))
+ assert_equal(r.json, dict(suggested_name='my-moz'))
r = self.app.get('/p/suggest_name?project_name=Te%st!')
- assert_equal(r.json, dict(suggested_name='test'))
+ assert_equal(r.json, dict(suggested_name='te-st'))
def test_name_check(self):
for name in ('My+Moz', 'Te%st!', 'ab', 'a' * 16):
diff --git a/Allura/allura/tests/test_plugin.py b/Allura/allura/tests/test_plugin.py
index 64b9695..2b8b039 100644
--- a/Allura/allura/tests/test_plugin.py
+++ b/Allura/allura/tests/test_plugin.py
@@ -67,8 +67,11 @@ def test_validate_project_15char_user(self, has_access):
def test_suggest_name(self):
f = self.provider.suggest_name
+ assert_equals(f('Foo Bar', Mock()), 'foo-bar')
assert_equals(f('A More Than Fifteen Character Name', Mock()),
- 'amorethanfifteencharactername')
+ 'a-more-than-fifteen-character-name')
+ assert_equals(f('foo! bar?.. the great!!', Mock()),
+ 'foo-bar-the-great')
@patch('allura.model.Project')
def test_shortname_validator(self, Project):