[#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):