Switch to side-by-side view

--- a/Allura/allura/tests/functional/test_auth.py
+++ b/Allura/allura/tests/functional/test_auth.py
@@ -152,3 +152,57 @@
     def test_default_lookup(self):
         # Make sure that default _lookup() throws 404
         self.app.get('/auth/foobar', status=404)
+
+
+class TestUserPermissions(TestController):
+    allow = dict(allow_read=True, allow_write=True, allow_create=True)
+    read = dict(allow_read=True, allow_write=False, allow_create=False)
+    disallow = dict(allow_read=False, allow_write=False, allow_create=False)
+
+    def test_permissions_page(self):
+        response = self.app.get('/u/test-admin/profile/permissions', params={'repo_path': 'git/test/src'})
+
+    def test_unknown_project(self):
+        r = self._check_repo('/git/foo/bar', status=404)
+
+    def test_unknown_app(self):
+        r = self._check_repo('/git/test/bar')
+        assert r == self.disallow, r
+
+    def test_repo_write(self):
+        r = self._check_repo('/git/test/src.git')
+        assert r == self.allow, r
+        r = self._check_repo('/git/test/src')
+        assert r == self.allow, r
+
+    def test_subdir(self):
+        r = self._check_repo('/git/test/src.git/foo')
+        assert r == self.allow, r
+        r = self._check_repo('/git/test/src/foo')
+        assert r == self.allow, r
+
+    def test_neighborhood(self):
+        r = self._check_repo('/git/test.p/src.git')
+        assert r == self.allow, r
+
+    def test_repo_read(self):
+        r = self._check_repo(
+            '/git/test.p/src.git',
+            username='test-user')
+        assert r == self.read, r
+
+    def test_unknown_user(self):
+        r = self._check_repo(
+            '/git/test.p/src.git',
+            username='test-usera',
+            status=404)
+
+    def _check_repo(self, path, username='test-admin', **kw):
+        url = '/auth/repo_permissions'
+        r = self.app.get(url, params=dict(
+                repo_path=path,
+                username=username), **kw)
+        try:
+            return r.json
+        except:
+            return r