Repository: gratipay/gratipay.com

Issue:
Explain character restrictions in team names
E.g., you can't include at least some special characters like ":" as explained by https://gratipay.freshdesk.com/helpdesk/tickets/3677.
## <bountysource-plugin>

Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/29242142-explain-character-restrictions-in-team-names?utm_campaign=plugin&utm_content=tracker%2F85909&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F85909&utm_medium=issues&utm_source=github).
</bountysource-plugin>

Fix teams slug
I reused `slugize` from the Community model in #3412, realized this when I found #3425.

All of the slugs are now lowercase, we should probably give teams the same freedom that users have with `username`. 
## <bountysource-plugin>

Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/14919696-fix-teams-slug?utm_campaign=plugin&utm_content=tracker%2F85909&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F85909&utm_medium=issues&utm_source=github).
</bountysource-plugin>



Discussion:
Part of https://github.com/gratipay/gratipay.com/issues/3859.

+1


Resolving patch:
diff --git a/gratipay/exceptions.py b/gratipay/exceptions.py
--- a/gratipay/exceptions.py
+++ b/gratipay/exceptions.py
@@ -57,6 +57,7 @@ class NoSelfTipping(Exception): pass
 class NoTippee(Exception): pass
 class NoTeam(Exception): pass
 class BadAmount(Exception): pass
+class InvalidTeamName(Exception): pass
 
 class FailedToReserveUsername(Exception): pass
 
diff --git a/gratipay/models/team.py b/gratipay/models/team.py
--- a/gratipay/models/team.py
+++ b/gratipay/models/team.py
@@ -1,11 +1,32 @@
 """Teams on Gratipay receive payments and distribute payroll.
 """
+import re
 import requests
 from aspen import json, log
+from gratipay.exceptions import InvalidTeamName
 from gratipay.models import add_event
 from postgres.orm import Model
 
 
+# Should have at least one letter.
+TEAM_NAME_PATTERN = re.compile(r'^(?=.*[A-Za-z])([A-Za-z0-9.,-_ ]+)$')
+
+
+def slugize(name):
+    """ Create a slug from a team name.
+    """
+    if TEAM_NAME_PATTERN.match(name) is None:
+      raise InvalidTeamName
+
+    slug = name.strip()
+    for c in (',', ' '):
+        slug = slug.replace(c, '-') # Avoid % encoded characters in slug url.
+    while '--' in slug:
+        slug = slug.replace('--', '-')
+    slug = slug.strip('-')
+    return slug
+
+
 class Team(Model):
     """Represent a Gratipay team.
     """
diff --git a/gratipay/utils/fake_data.py b/gratipay/utils/fake_data.py
--- a/gratipay/utils/fake_data.py
+++ b/gratipay/utils/fake_data.py
@@ -10,7 +10,7 @@
 from gratipay import wireup, MAX_TIP, MIN_TIP
 from gratipay.elsewhere import PLATFORMS
 from gratipay.models.participant import Participant
-from gratipay.models.team import Team
+from gratipay.models.team import slugize, Team
 from gratipay.models import community
 from gratipay.models import check_db
 
@@ -82,8 +82,7 @@ def fake_team(db, teamowner):
     teamslugname = faker.city()
 
     try:
-        #using community.slugize
-        teamslug = community.slugize(teamslugname)
+        teamslug = slugize(teamslugname)
         homepage = 'http://www.example.org/' + fake_text_id(3)
         _fake_thing( db
                    , "teams"


Test patch:
diff --git a/tests/py/fixtures/TestTeams.yml b/tests/py/fixtures/TestTeams.yml
--- a/tests/py/fixtures/TestTeams.yml
+++ b/tests/py/fixtures/TestTeams.yml
@@ -155,7 +155,7 @@ interactions:
   response:
     body:
       string: !!binary |
-        UEsDBBQAAAAIAMmEY0hx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
+        UEsDBBQAAAAIABBVaUhx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
         27aNiTXx5Lnur+8PeNfq2v2lV1VX1drVvaOUFKQQYHFhQUBAEGSkxVX+2wv/ZwCo/zBm3pIBBESd
         WEZcRM0z9+bbMoVcpq0sSkA2lodqkKy5qepOvyYWYIY18PODBG7EopXl0x1jZnHveDs2q/YgMrsj
         QEomo+7moWB6pKbNC+PhQlFPKKAX1rr2KFv/nCftfwfVs/Sz8ww7oPlR9/8HS/o9wA0uA8BsluIN
@@ -535,8 +535,8 @@ interactions:
         WYrSdORh9B50OXqAUkTdsaQG9ewciJ7iU899THvb9oqGoXcFw8eyKPPM6Lpv0Fk0Yfp8u+rcbx6C
         ITSsEbCUe5E+m0chuVN3hWkTYJxXRzUVsnbzsd899t0eqPPRMTM1MJd+9n7fmGVjy9wy6Cnt9Ath
         F4v4g923u9KdU91Par/Aca549PjElon8S67cF4PAHlEVImX7VpxZ4TXWQxubo+csojVry1UD57Gi
-        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIAMmE
-        Y0h3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
+        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIABBV
+        aUh3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
         hwAADE1JREFUeJztmXmQXcV1xn99l7fNvPdme5JmkYR2tI2k0QYWSFhisTAIG0Mwiw3E4NgOZVcR
         x+Wk7CTOHjt2YhMqVcSAwuLISYCgsjEoMmhD+wpaLWnEjKQZbbO8NzNvu7f75I/7RiNpJJngP1RU
         6dTcqqnpvt/5Tt/TfU5/o0RE+BibdaUJ/K52NYArbVcDuNLmXGkCH80EozViBHX1GL3C9rFKIRFB
@@ -592,8 +592,8 @@ interactions:
         l1IlBOML6oJLvWiNEQvbGVwRL26C9uUil3qD0YLl2B8Sx+AbhW0NrsVKay39MocxgdRh2xbWJZUu
         QYxBG4MQ6Dhn1RcRRAxGKOlLFvZlFDMRg9E60JEodREquN9ignNeWTaWZV2g8Aja14g5TxcKNJ9A
         9vktuo9I4ORi80pjHwrnrJwYzFJKzv5+bmIM1pVK4yIoY4xcbuLl/QuD8++jyJQX6KIBmQ8lel39
-        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAyYRjSHHt
-        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIAMmEY0h3+548iwwAAIYM
+        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAEFVpSHHt
+        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIABBVaUh3+548iwwAAIYM
         AAACAAAAAAAAAAAAAACAAclUAAA0OFBLBQYAAAAAAgACAGEAAAB0YQAAAAA=
     headers:
       content-type: [application/zip]
@@ -601,7 +601,7 @@ interactions:
       via: [1.1 vegur]
     status: {code: 200, message: OK}
 - request:
-    body: "{\n    \"body\": \"https://gratipay.com/gratiteam/\\n\\n(This application
+    body: "{\n    \"body\": \"https://gratipay.com/Gratiteam/\\n\\n(This application
       will remain open for at least a week.)\",\n    \"title\": \"Gratiteam\"\n}"
     headers: {}
     method: POST
@@ -609,7 +609,6 @@ interactions:
   response:
     body: {string: !!python/unicode '{"message":"Bad credentials","documentation_url":"https://developer.github.com/v3"}'}
     headers:
-      access-control-allow-credentials: ['true']
       access-control-allow-origin: ['*']
       access-control-expose-headers: ['ETag, Link, X-GitHub-OTP, X-RateLimit-Limit,
           X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes,
@@ -776,7 +775,7 @@ interactions:
   response:
     body:
       string: !!binary |
-        UEsDBBQAAAAIAMuEY0hx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
+        UEsDBBQAAAAIABNVaUhx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
         27aNiTXx5Lnur+8PeNfq2v2lV1VX1drVvaOUFKQQYHFhQUBAEGSkxVX+2wv/ZwCo/zBm3pIBBESd
         WEZcRM0z9+bbMoVcpq0sSkA2lodqkKy5qepOvyYWYIY18PODBG7EopXl0x1jZnHveDs2q/YgMrsj
         QEomo+7moWB6pKbNC+PhQlFPKKAX1rr2KFv/nCftfwfVs/Sz8ww7oPlR9/8HS/o9wA0uA8BsluIN
@@ -1156,8 +1155,8 @@ interactions:
         WYrSdORh9B50OXqAUkTdsaQG9ewciJ7iU899THvb9oqGoXcFw8eyKPPM6Lpv0Fk0Yfp8u+rcbx6C
         ITSsEbCUe5E+m0chuVN3hWkTYJxXRzUVsnbzsd899t0eqPPRMTM1MJd+9n7fmGVjy9wy6Cnt9Ath
         F4v4g923u9KdU91Par/Aca549PjElon8S67cF4PAHlEVImX7VpxZ4TXWQxubo+csojVry1UD57Gi
-        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIAMuE
-        Y0h3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
+        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIABNV
+        aUh3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
         hwAADE1JREFUeJztmXmQXcV1xn99l7fNvPdme5JmkYR2tI2k0QYWSFhisTAIG0Mwiw3E4NgOZVcR
         x+Wk7CTOHjt2YhMqVcSAwuLISYCgsjEoMmhD+wpaLWnEjKQZbbO8NzNvu7f75I/7RiNpJJngP1RU
         6dTcqqnpvt/5Tt/TfU5/o0RE+BibdaUJ/K52NYArbVcDuNLmXGkCH80EozViBHX1GL3C9rFKIRFB
@@ -1213,8 +1212,8 @@ interactions:
         l1IlBOML6oJLvWiNEQvbGVwRL26C9uUil3qD0YLl2B8Sx+AbhW0NrsVKay39MocxgdRh2xbWJZUu
         QYxBG4MQ6Dhn1RcRRAxGKOlLFvZlFDMRg9E60JEodREquN9ignNeWTaWZV2g8Aja14g5TxcKNJ9A
         9vktuo9I4ORi80pjHwrnrJwYzFJKzv5+bmIM1pVK4yIoY4xcbuLl/QuD8++jyJQX6KIBmQ8lel39
-        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAy4RjSHHt
-        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIAMuEY0h3+548iwwAAIYM
+        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAE1VpSHHt
+        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIABNVaUh3+548iwwAAIYM
         AAACAAAAAAAAAAAAAACAAclUAAA0OFBLBQYAAAAAAgACAGEAAAB0YQAAAAA=
     headers:
       content-type: [application/zip]
@@ -1377,7 +1376,7 @@ interactions:
   response:
     body:
       string: !!binary |
-        UEsDBBQAAAAIAMyEY0hx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
+        UEsDBBQAAAAIABRVaUhx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
         27aNiTXx5Lnur+8PeNfq2v2lV1VX1drVvaOUFKQQYHFhQUBAEGSkxVX+2wv/ZwCo/zBm3pIBBESd
         WEZcRM0z9+bbMoVcpq0sSkA2lodqkKy5qepOvyYWYIY18PODBG7EopXl0x1jZnHveDs2q/YgMrsj
         QEomo+7moWB6pKbNC+PhQlFPKKAX1rr2KFv/nCftfwfVs/Sz8ww7oPlR9/8HS/o9wA0uA8BsluIN
@@ -1757,8 +1756,8 @@ interactions:
         WYrSdORh9B50OXqAUkTdsaQG9ewciJ7iU899THvb9oqGoXcFw8eyKPPM6Lpv0Fk0Yfp8u+rcbx6C
         ITSsEbCUe5E+m0chuVN3hWkTYJxXRzUVsnbzsd899t0eqPPRMTM1MJd+9n7fmGVjy9wy6Cnt9Ath
         F4v4g923u9KdU91Par/Aca549PjElon8S67cF4PAHlEVImX7VpxZ4TXWQxubo+csojVry1UD57Gi
-        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIAMyE
-        Y0h3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
+        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIABRV
+        aUh3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
         hwAADE1JREFUeJztmXmQXcV1xn99l7fNvPdme5JmkYR2tI2k0QYWSFhisTAIG0Mwiw3E4NgOZVcR
         x+Wk7CTOHjt2YhMqVcSAwuLISYCgsjEoMmhD+wpaLWnEjKQZbbO8NzNvu7f75I/7RiNpJJngP1RU
         6dTcqqnpvt/5Tt/TfU5/o0RE+BibdaUJ/K52NYArbVcDuNLmXGkCH80EozViBHX1GL3C9rFKIRFB
@@ -1814,8 +1813,8 @@ interactions:
         l1IlBOML6oJLvWiNEQvbGVwRL26C9uUil3qD0YLl2B8Sx+AbhW0NrsVKay39MocxgdRh2xbWJZUu
         QYxBG4MQ6Dhn1RcRRAxGKOlLFvZlFDMRg9E60JEodREquN9ignNeWTaWZV2g8Aja14g5TxcKNJ9A
         9vktuo9I4ORi80pjHwrnrJwYzFJKzv5+bmIM1pVK4yIoY4xcbuLl/QuD8++jyJQX6KIBmQ8lel39
-        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAzIRjSHHt
-        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIAMyEY0h3+548iwwAAIYM
+        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAFFVpSHHt
+        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIABRVaUh3+548iwwAAIYM
         AAACAAAAAAAAAAAAAACAAclUAAA0OFBLBQYAAAAAAgACAGEAAAB0YQAAAAA=
     headers:
       content-type: [application/zip]
@@ -1823,7 +1822,627 @@ interactions:
       via: [1.1 vegur]
     status: {code: 200, message: OK}
 - request:
-    body: "{\n    \"body\": \"https://gratipay.com/gratiteam/\\n\\n(This application
+    body: "{\n    \"body\": \"https://gratipay.com/GratiTeam/\\n\\n(This application
+      will remain open for at least a week.)\",\n    \"title\": \"GratiTeam\"\n}"
+    headers: {}
+    method: POST
+    uri: https://api.github.com:443/repos/gratipay/test-gremlin/issues
+  response:
+    body: {string: !!python/unicode '{"message":"Bad credentials","documentation_url":"https://developer.github.com/v3"}'}
+    headers:
+      access-control-allow-origin: ['*']
+      access-control-expose-headers: ['ETag, Link, X-GitHub-OTP, X-RateLimit-Limit,
+          X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes,
+          X-Poll-Interval']
+      content-length: ['83']
+      content-security-policy: [default-src 'none']
+      content-type: [application/json; charset=utf-8]
+      status: [401 Unauthorized]
+      strict-transport-security: [max-age=31536000; includeSubdomains; preload]
+    status: {code: 401, message: Unauthorized}
+- request:
+    body: !!binary |
+      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
+      59iX4x7HB4rliytPkJ+IPTFVYl7SelLg5NGT66WBpeNlumX15Rzl2eXfTvmeGqvQrrhSyVmZW/nj
+      dNDpx2eMzjRXCVUVV+Oq46pfn3U8e+ec8rna82znc89v1ITXTF2wvXC7Vqm29iLHxfw6uC62buHS
+      7ksjl/Uvt16RuHKmnqk+twE0xDYsXvW8OtFo1th7TfnaleuC18ub6JtymqHmxObllsCWqVaX1tE2
+      07bedrX2phuSN2o6eDvKOhk787vIu9K7NruTuld6InuWbgbcnO316H16y/nWw9s2t4f7zPru9hv2
+      37qjc6f7rsbdjgHVgbZ7yvdaBhUHm4cUhpr+UviraVhxuPm+0v3WEZWR9lH10a4xrbGbD/Qf9D80
+      eTg4bjk+OuEw8fjR7kdTj30fv3kS+uTjZNzk2tOUZ9hnOc9pnhe/4HhR9VL0Zf2U4lTntP700Izd
+      zNNZn9m3r6Jfrc+lv6Z6XTzPPV/7RvZNx4Lhwsii2+Lc28i3a0uZ72jflb8XeX/9g/aHoWXn5bmP
+      pI+bnw5/Zv1c80X+S++K9cqLr2Ff177lrLKuXviu/P3OD6cf82vx6/j1kg3RjfafZj+fbYZtbkZ6
+      kby2rwIIWmF/fwA+1QBA5QIAPZrHkRN38q9fBYG20g4A8OhNwRS9AcxCYui53QOzwjHwJGKC3MIY
+      YR5iw3C0uF78XoImGZ7sOXkbRTllPlUN8RkNDa0ZXTb9ACMt027mS6wYNi/2Tk4ersPcq7y+fJMC
+      loIDwlIieaJvxU12VUp8ldKTPiIzIkclr6sQrViu1KM8pbKhxqwurqGiaaBlq+2jE62brndCv86g
+      2/CB0YLxpimj2S5zPQs3yyCrOOsMm0LbSrs6+xZ01Q86jTk/cXnpOuv2Zve7PW/cn3kMe3Z71XtX
+      +BzxTfLz97cJUAsUCCIGfQ1+GdIfWht2JDwywi5SKYotap30Ironpjo2I84/3iRBPJE8cTFpKLlh
+      b8m+9P3xB6JSSKlJaTkHz6R3Zrw8RJalnh2ZU507cYQ8Tz0/7GhFwXDhxrFdx92Kc040l0yVUpQp
+      lHucyq5orHx6BlMlUe149sC5C+dHa1ZreS6a1+291Hj5Y71qQ/7VD9fcrt9vtmp52KbeHnOjtuNZ
+      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
+      911grPW/2H6JeNn3SkcD49XIxsHrImjm867Vpq3lBldHZuf7bqeem73it47f3uwPvvNwQPte3RDT
+      X9HD90bYRwPHLj1YHOefcHqU9vjCk3uTc0/Xn9O84H4pPqUwrTqjOav9SntO87XqvNIbmQWxRb63
+      xLcLS23v4t8rvF/6cG7Z5SP5x45P/p9pPrd+2b0CVqq+6n6d+XZglWO17bvD9+Ufh9eE13rX3ddX
+      N4p+Sv0c2PTdin+0v5zs9vEBUeoCgH2xuflZCE0qCgHYKNjcXKva3NyoRpONZwD0hO78t7N91tAA
+      UF79n/5j+S+y5M7QfRndOAAAAZtpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEg
+      eG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJk
+      ZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgt
+      bnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1s
+      bnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQ
+      aXhlbFhEaW1lbnNpb24+Njg8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQ
+      aXhlbFlEaW1lbnNpb24+Mjk8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNj
+      cmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K1c8BZQAABrFJREFUWAntWHtsU1UY
+      /7oHuxp1FyOxRsPaGJJh1HWJCZrMtUQTlqjJIsqtRGmnCfIIdvIa/mEI/IEPkC1RWKcJK0TpRniI
+      JGxEZGwQRtDQTsVWUHvlD1aH2pKAPRPp8Tvn9t7eR8tm4A/AneT2vH7fd77zO4/vO7VRTDCRNAZK
+      tNJEgTMwQYhpI0wQMkGIiQFTdWKH3DKEkDPQbCuH0tplIJP/7ijlPavBZrPBqr0/GSi5qXdIFP6B
+      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
+      AABJRU5ErkJggg==
+    headers: {}
+    method: POST
+    uri: http://gip.rocks/v1
+  response:
+    body:
+      string: !!binary |
+        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
+    headers:
+      content-type: [application/zip]
+      transfer-encoding: [chunked]
+      via: [1.1 vegur]
+    status: {code: 200, message: OK}
+- request:
+    body: "{\n    \"body\": \"https://gratipay.com/Gratiteam/\\n\\n(This application
       will remain open for at least a week.)\",\n    \"title\": \"Gratiteam\"\n}"
     headers: {}
     method: POST
@@ -1831,7 +2450,6 @@ interactions:
   response:
     body: {string: !!python/unicode '{"message":"Bad credentials","documentation_url":"https://developer.github.com/v3"}'}
     headers:
-      access-control-allow-credentials: ['true']
       access-control-allow-origin: ['*']
       access-control-expose-headers: ['ETag, Link, X-GitHub-OTP, X-RateLimit-Limit,
           X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes,
@@ -1998,7 +2616,7 @@ interactions:
   response:
     body:
       string: !!binary |
-        UEsDBBQAAAAIAM+EY0hx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
+        UEsDBBQAAAAIABdVaUhx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
         27aNiTXx5Lnur+8PeNfq2v2lV1VX1drVvaOUFKQQYHFhQUBAEGSkxVX+2wv/ZwCo/zBm3pIBBESd
         WEZcRM0z9+bbMoVcpq0sSkA2lodqkKy5qepOvyYWYIY18PODBG7EopXl0x1jZnHveDs2q/YgMrsj
         QEomo+7moWB6pKbNC+PhQlFPKKAX1rr2KFv/nCftfwfVs/Sz8ww7oPlR9/8HS/o9wA0uA8BsluIN
@@ -2378,8 +2996,8 @@ interactions:
         WYrSdORh9B50OXqAUkTdsaQG9ewciJ7iU899THvb9oqGoXcFw8eyKPPM6Lpv0Fk0Yfp8u+rcbx6C
         ITSsEbCUe5E+m0chuVN3hWkTYJxXRzUVsnbzsd899t0eqPPRMTM1MJd+9n7fmGVjy9wy6Cnt9Ath
         F4v4g923u9KdU91Par/Aca549PjElon8S67cF4PAHlEVImX7VpxZ4TXWQxubo+csojVry1UD57Gi
-        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIAM+E
-        Y0h3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
+        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIABdV
+        aUh3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
         hwAADE1JREFUeJztmXmQXcV1xn99l7fNvPdme5JmkYR2tI2k0QYWSFhisTAIG0Mwiw3E4NgOZVcR
         x+Wk7CTOHjt2YhMqVcSAwuLISYCgsjEoMmhD+wpaLWnEjKQZbbO8NzNvu7f75I/7RiNpJJngP1RU
         6dTcqqnpvt/5Tt/TfU5/o0RE+BibdaUJ/K52NYArbVcDuNLmXGkCH80EozViBHX1GL3C9rFKIRFB
@@ -2435,8 +3053,8 @@ interactions:
         l1IlBOML6oJLvWiNEQvbGVwRL26C9uUil3qD0YLl2B8Sx+AbhW0NrsVKay39MocxgdRh2xbWJZUu
         QYxBG4MQ6Dhn1RcRRAxGKOlLFvZlFDMRg9E60JEodREquN9ignNeWTaWZV2g8Aja14g5TxcKNJ9A
         9vktuo9I4ORi80pjHwrnrJwYzFJKzv5+bmIM1pVK4yIoY4xcbuLl/QuD8++jyJQX6KIBmQ8lel39
-        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAz4RjSHHt
-        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIAM+EY0h3+548iwwAAIYM
+        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAF1VpSHHt
+        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIABdVaUh3+548iwwAAIYM
         AAACAAAAAAAAAAAAAACAAclUAAA0OFBLBQYAAAAAAgACAGEAAAB0YQAAAAA=
     headers:
       content-type: [application/zip]
@@ -2444,7 +3062,7 @@ interactions:
       via: [1.1 vegur]
     status: {code: 200, message: OK}
 - request:
-    body: "{\n    \"body\": \"https://gratipay.com/gratiteam/\\n\\n(This application
+    body: "{\n    \"body\": \"https://gratipay.com/Gratiteam/\\n\\n(This application
       will remain open for at least a week.)\",\n    \"title\": \"Gratiteam\"\n}"
     headers: {}
     method: POST
@@ -2452,7 +3070,6 @@ interactions:
   response:
     body: {string: !!python/unicode '{"message":"Bad credentials","documentation_url":"https://developer.github.com/v3"}'}
     headers:
-      access-control-allow-credentials: ['true']
       access-control-allow-origin: ['*']
       access-control-expose-headers: ['ETag, Link, X-GitHub-OTP, X-RateLimit-Limit,
           X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes,
@@ -2619,7 +3236,7 @@ interactions:
   response:
     body:
       string: !!binary |
-        UEsDBBQAAAAIANCEY0hx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
+        UEsDBBQAAAAIABhVaUhx7ZuYqFQAAFlVAAADAAAAMTYwvHdjdyVM03WcE9u2bduZ2DZPbNu2ObFt
         27aNiTXx5Lnur+8PeNfq2v2lV1VX1drVvaOUFKQQYHFhQUBAEGSkxVX+2wv/ZwCo/zBm3pIBBESd
         WEZcRM0z9+bbMoVcpq0sSkA2lodqkKy5qepOvyYWYIY18PODBG7EopXl0x1jZnHveDs2q/YgMrsj
         QEomo+7moWB6pKbNC+PhQlFPKKAX1rr2KFv/nCftfwfVs/Sz8ww7oPlR9/8HS/o9wA0uA8BsluIN
@@ -2999,8 +3616,8 @@ interactions:
         WYrSdORh9B50OXqAUkTdsaQG9ewciJ7iU899THvb9oqGoXcFw8eyKPPM6Lpv0Fk0Yfp8u+rcbx6C
         ITSsEbCUe5E+m0chuVN3hWkTYJxXRzUVsnbzsd899t0eqPPRMTM1MJd+9n7fmGVjy9wy6Cnt9Ath
         F4v4g923u9KdU91Par/Aca549PjElon8S67cF4PAHlEVImX7VpxZ4TXWQxubo+csojVry1UD57Gi
-        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIANCE
-        Y0h3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
+        2w/Z4J+2YAg50aX3TmuWpP+73fz/5uc8+Csrg8c7tpwM/wlmaGFQpf8k9n8AUEsDBBQAAAAIABhV
+        aUh3+548iwwAAIYMAAACAAAANDgBhgx584lQTkcNChoKAAAADUlIRFIAAAAwAAAAMAgGAAAAVwL5
         hwAADE1JREFUeJztmXmQXcV1xn99l7fNvPdme5JmkYR2tI2k0QYWSFhisTAIG0Mwiw3E4NgOZVcR
         x+Wk7CTOHjt2YhMqVcSAwuLISYCgsjEoMmhD+wpaLWnEjKQZbbO8NzNvu7f75I/7RiNpJJngP1RU
         6dTcqqnpvt/5Tt/TfU5/o0RE+BibdaUJ/K52NYArbVcDuNLmXGkCH80EozViBHX1GL3C9rFKIRFB
@@ -3056,8 +3673,8 @@ interactions:
         l1IlBOML6oJLvWiNEQvbGVwRL26C9uUil3qD0YLl2B8Sx+AbhW0NrsVKay39MocxgdRh2xbWJZUu
         QYxBG4MQ6Dhn1RcRRAxGKOlLFvZlFDMRg9E60JEodREquN9ignNeWTaWZV2g8Aja14g5TxcKNJ9A
         9vktuo9I4ORi80pjHwrnrJwYzFJKzv5+bmIM1pVK4yIoY4xcbuLl/QuD8++jyJQX6KIBmQ8lel39
-        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgA0IRjSHHt
-        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIANCEY0h3+548iwwAAIYM
+        B8eVtqsBXGm7GsCVtqsBXGn7P9bMe0a9jTH8AAAAAElFTkSuQmCCUEsBAhQDFAAAAAgAGFVpSHHt
+        m5ioVAAAWVUAAAMAAAAAAAAAAAAAAIABAAAAADE2MFBLAQIUAxQAAAAIABhVaUh3+548iwwAAIYM
         AAACAAAAAAAAAAAAAACAAclUAAA0OFBLBQYAAAAAAgACAGEAAAB0YQAAAAA=
     headers:
       content-type: [application/zip]
diff --git a/tests/py/test_teams.py b/tests/py/test_teams.py
--- a/tests/py/test_teams.py
+++ b/tests/py/test_teams.py
@@ -8,7 +8,7 @@
 
 from aspen.testing.client import FileUpload
 from gratipay.testing import Harness
-from gratipay.models.team import Team, AlreadyMigrated
+from gratipay.models.team import Team, AlreadyMigrated, slugize, InvalidTeamName
 
 
 REVIEW_URL = "https://github.com/gratipay/test-gremlin/issues/9"
@@ -235,6 +235,15 @@ def test_casing_of_urls_survives(self):
         assert team.onboarding_url == 'http://INSIDE.GRATipay.com/'
         assert team.todo_url == 'hTTPS://github.com/GRATIPAY'
 
+    def test_casing_of_slug_survives(self):
+        self.make_participant('alice', claimed_time='now', email_address='', last_paypal_result='')
+        data = dict(self.valid_data)
+        data['name'] = 'GratiTeam'
+        self.post_new(dict(data))
+        team = Team.from_slug('GratiTeam')
+        assert team is not None
+        assert team.slug_lower == 'gratiteam'
+
     def test_401_for_anon_creating_new_team(self):
         self.post_new(self.valid_data, auth_as=None, expected=401)
         assert self.db.one("SELECT COUNT(*) FROM teams") == 0
@@ -296,12 +305,20 @@ def test_error_message_for_bad_url(self):
         r = self.post_new(dict(self.valid_data, todo_url='foo'), expected=400)
         assert "Please enter an http[s]:// URL for the 'To-do URL' field." in r.body
 
+    def test_error_message_for_invalid_team_name(self):
+        self.make_participant('alice', claimed_time='now', email_address='alice@example.com', last_paypal_result='')
+        data = dict(self.valid_data)
+        data['name'] = '~Invalid:Name;'
+        r = self.post_new(data, expected=400)
+        assert self.db.one("SELECT COUNT(*) FROM teams") == 0
+        assert "Sorry, your team name is invalid." in r.body
+
     def test_error_message_for_slug_collision(self):
         self.make_participant('alice', claimed_time='now', email_address='alice@example.com', last_paypal_result='')
         self.post_new(dict(self.valid_data))
         r = self.post_new(dict(self.valid_data), expected=400)
         assert self.db.one("SELECT COUNT(*) FROM teams") == 1
-        assert "Sorry, there is already a team using 'gratiteam'." in r.body
+        assert "Sorry, there is already a team using 'Gratiteam'." in r.body
 
     def test_approved_team_shows_up_on_homepage(self):
         self.make_team(is_approved=True)
@@ -478,3 +495,39 @@ def test_update_updates_object_attributes(self):
         team.update(name='Enterprise', product_or_service='We save galaxies.')
         assert team.name == 'Enterprise'
         assert team.product_or_service == 'We save galaxies.'
+
+
+    # slugize
+
+    def test_slugize_slugizes(self):
+        assert slugize('Foo') == 'Foo'
+
+    def test_slugize_requires_a_letter(self):
+        assert pytest.raises(InvalidTeamName, slugize, '123')
+
+    def test_slugize_accepts_letter_in_middle(self):
+        assert slugize('1a23') == '1a23'
+
+    def test_slugize_converts_comma_to_dash(self):
+        assert slugize('foo,bar') == 'foo-bar'
+
+    def test_slugize_converts_space_to_dash(self):
+        assert slugize('foo bar') == 'foo-bar'
+
+    def test_slugize_allows_underscore(self):
+        assert slugize('foo_bar') == 'foo_bar'
+
+    def test_slugize_allows_period(self):
+        assert slugize('foo.bar') == 'foo.bar'
+
+    def test_slugize_trims_whitespace(self):
+        assert slugize('  Foo Bar  ') == 'Foo-Bar'
+
+    def test_slugize_trims_dashes(self):
+        assert slugize('--Foo Bar--') == 'Foo-Bar'
+
+    def test_slugize_trims_replacement_dashes(self):
+        assert slugize(',,Foo Bar,,') == 'Foo-Bar'
+
+    def test_slugize_folds_dashes_together(self):
+        assert slugize('1a----------------23') == '1a-23'