Forráskód Böngészése

Add url_path property to class User.

Add `url_path` @property to the `class User` in order to make it consistent with `class Project` that already has that property.
zPlus 4 éve
szülő
commit
709cce9e02

+ 13 - 1
pagure/lib/model.py

@@ -229,6 +229,13 @@ class User(BASE):
         """ Return the username. """
         return self.user
 
+    @property
+    def url_path(self):
+        """ Return the path at which this user can be accessed in the web UI.
+        """
+
+        return "user/%s" % (self.user)
+
     @property
     def html_title(self):
         """ Return the ``fullname (username)`` or simply ``username`` to be
@@ -275,7 +282,12 @@ class User(BASE):
 
     def to_json(self, public=False):
         """ Return a representation of the User in a dictionary. """
-        output = {"name": self.user, "fullname": self.fullname}
+        output = {
+            "name": self.user,
+            "fullname": self.fullname,
+            "url_path": self.url_path,
+        }
+
         if not public:
             output["default_email"] = self.default_email
             output["emails"] = sorted([email.email for email in self.emails])

+ 90 - 18
tests/test_pagure_flask_api_fork.py

@@ -450,7 +450,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                         "parent": None,
                         "priorities": {},
                         "tags": [],
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "remote_git": None,
                     "repo_from": {
@@ -484,7 +488,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                         "parent": None,
                         "priorities": {},
                         "tags": [],
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "status": "Open",
                     "tags": [],
@@ -492,7 +500,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                     "title": "test pull-request",
                     "uid": "1431414800",
                     "updated_on": "1431414800",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
             "total_requests": 1,
@@ -777,7 +789,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                 "parent": None,
                 "priorities": {},
                 "tags": [],
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
             "remote_git": None,
             "repo_from": {
@@ -807,7 +823,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                 "parent": None,
                 "priorities": {},
                 "tags": [],
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
             "status": "Open",
             "tags": [],
@@ -815,7 +835,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
             "title": "test pull-request",
             "uid": "1431414800",
             "updated_on": "1431414800",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertDictEqual(data, expected_data)
 
@@ -923,7 +947,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                 "parent": None,
                 "priorities": {},
                 "tags": [],
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
             "remote_git": None,
             "repo_from": {
@@ -953,7 +981,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                 "parent": None,
                 "priorities": {},
                 "tags": [],
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
             "status": "Open",
             "tags": [],
@@ -961,7 +993,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
             "title": "test pull-request",
             "uid": uid,
             "updated_on": "1431414800",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertDictEqual(data, expected_data)
 
@@ -3026,7 +3062,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "remote_git": None,
                 "repo_from": {
@@ -3056,7 +3096,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "status": "Open",
                 "tags": [],
@@ -3064,7 +3108,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                 "title": "Test PR",
                 "uid": "e8b68df8711648deac67c3afed15a798",
                 "updated_on": "1516348115",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -3151,7 +3199,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "remote_git": None,
                 "repo_from": {
@@ -3181,7 +3233,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "status": "Open",
                 "tags": [],
@@ -3189,7 +3245,11 @@ class PagureFlaskApiForktests(tests.Modeltests):
                 "title": "Test PR",
                 "uid": "e8b68df8711648deac67c3afed15a798",
                 "updated_on": "1516348115",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -3498,7 +3558,11 @@ class PagureApiThresholdReachedTests(tests.Modeltests):
                 "priorities": {},
                 "tags": [],
                 "url_path": "test",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
             "remote_git": None,
             "repo_from": {
@@ -3528,7 +3592,11 @@ class PagureApiThresholdReachedTests(tests.Modeltests):
                 "priorities": {},
                 "tags": [],
                 "url_path": "test",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
             "status": "Open",
             "tags": [],
@@ -3536,7 +3604,11 @@ class PagureApiThresholdReachedTests(tests.Modeltests):
             "title": "Test PR",
             "uid": "e8b68df8711648deac67c3afed15a798",
             "updated_on": "1516348115",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
 
     def test_api_pull_request_no_comments(self):

+ 60 - 12
tests/test_pagure_flask_api_fork_update.py

@@ -282,7 +282,11 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "remote_git": None,
                 "repo_from": {
@@ -334,12 +338,20 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                         "priorities": {},
                         "tags": [],
                         "url_path": "test",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "priorities": {},
                     "tags": [],
                     "url_path": "fork/pingou/test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "status": "Open",
                 "tags": [],
@@ -347,7 +359,11 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                 "title": "edited test PR",
                 "uid": "a2bddecc8ea548e88c22a0df77670092",
                 "updated_on": "1551276260",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -422,7 +438,11 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "remote_git": None,
                 "repo_from": {
@@ -474,12 +494,20 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                         "priorities": {},
                         "tags": [],
                         "url_path": "test",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "priorities": {},
                     "tags": [],
                     "url_path": "fork/pingou/test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "status": "Open",
                 "tags": [],
@@ -487,7 +515,11 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                 "title": "edited test PR",
                 "uid": "a2bddecc8ea548e88c22a0df77670092",
                 "updated_on": "1551276260",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -582,7 +614,11 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "remote_git": None,
                 "repo_from": {
@@ -634,12 +670,20 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                         "priorities": {},
                         "tags": [],
                         "url_path": "test",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "priorities": {},
                     "tags": [],
                     "url_path": "fork/pingou/test",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "status": "Open",
                 "tags": [],
@@ -647,7 +691,11 @@ class PagureFlaskApiForkUpdatetests(tests.SimplePagureTest):
                 "title": "edited test PR",
                 "uid": "a2bddecc8ea548e88c22a0df77670092",
                 "updated_on": "1551276260",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 

+ 48 - 9
tests/test_pagure_flask_api_group.py

@@ -162,6 +162,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
             "description": None,
             "creator": {
                 "fullname": "PY C",
+                "url_path": "user/pingou",
                 "default_email": "bar@pingou.com",
                 "emails": ["bar@pingou.com", "foo@pingou.com"],
                 "name": "pingou",
@@ -185,7 +186,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
         exp = {
             "display_name": "Some Group",
             "description": None,
-            "creator": {"fullname": "PY C", "name": "pingou"},
+            "creator": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
             "members": ["pingou"],
             "date_created": "1492020239",
             "group_type": "user",
@@ -232,6 +237,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
                 "default_email": "bar@pingou.com",
                 "emails": ["bar@pingou.com", "foo@pingou.com"],
                 "name": "pingou",
+                "url_path": "user/pingou",
             },
             "members": ["pingou", "mprahl"],
             "date_created": "1492020239",
@@ -274,6 +280,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
                 "default_email": "bar@pingou.com",
                 "emails": ["bar@pingou.com", "foo@pingou.com"],
                 "name": "pingou",
+                "url_path": "user/pingou",
             },
             "members": ["pingou"],
             "date_created": "1492020239",
@@ -311,7 +318,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test2",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
         }
@@ -344,7 +355,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
         exp = {
             "display_name": "Some Group",
             "description": None,
-            "creator": {"fullname": "PY C", "name": "pingou"},
+            "creator": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
             "members": ["pingou"],
             "date_created": "1492020239",
             "group_type": "user",
@@ -381,7 +396,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test2",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
         }
@@ -406,7 +425,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
         exp = {
             "display_name": "Some Group",
             "description": None,
-            "creator": {"fullname": "PY C", "name": "pingou"},
+            "creator": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
             "members": ["pingou"],
             "date_created": "1492020239",
             "group_type": "user",
@@ -443,7 +466,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
                     "priorities": {},
                     "tags": [],
                     "url_path": "test2",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
         }
@@ -480,7 +507,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
         exp = {
             "display_name": "Some Group",
             "description": None,
-            "creator": {"fullname": "PY C", "name": "pingou"},
+            "creator": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
             "members": ["pingou"],
             "date_created": "1492020239",
             "group_type": "user",
@@ -514,7 +545,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
         exp = {
             "display_name": "Some Group",
             "description": None,
-            "creator": {"fullname": "PY C", "name": "pingou"},
+            "creator": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
             "members": ["pingou"],
             "date_created": "1492020239",
             "group_type": "user",
@@ -546,7 +581,11 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest):
         exp = {
             "display_name": "Release engineering group",
             "description": None,
-            "creator": {"fullname": "PY C", "name": "pingou"},
+            "creator": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
             "members": [],
             "date_created": "1492020239",
             "group_type": "user",

+ 95 - 19
tests/test_pagure_flask_api_issue.py

@@ -53,10 +53,18 @@ FULL_ISSUE_LIST = [
         "status": "Closed",
         "tags": [],
         "title": "Test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
-        "assignee": {"fullname": "foo bar", "name": "foo"},
+        "assignee": {
+            "fullname": "foo bar",
+            "name": "foo",
+            "url_path": "user/foo",
+        },
         "blocks": [],
         "close_status": None,
         "closed_at": None,
@@ -75,7 +83,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue1",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -97,7 +109,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -119,7 +135,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -141,7 +161,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -163,7 +187,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -185,7 +213,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -207,7 +239,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -229,7 +265,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
 ]
 
@@ -255,7 +295,11 @@ LCL_ISSUES = [
         "status": "Open",
         "tags": [],
         "title": "Issue #2",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -277,7 +321,11 @@ LCL_ISSUES = [
         "status": "Open",
         "tags": [],
         "title": "Issue #1",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
 ]
 
@@ -2497,7 +2545,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                         "status": "Open",
                         "tags": [],
                         "title": "Issue #3",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     }
                 ],
                 "pagination": {
@@ -2561,7 +2613,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                 "status": "Open",
                 "tags": [],
                 "title": "test issue",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -2661,7 +2717,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                 "status": "Open",
                 "tags": [],
                 "title": "Test issue",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -2693,7 +2753,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                 "status": "Open",
                 "tags": [],
                 "title": "Test issue",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -3303,7 +3367,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                 "id": 1,
                 "parent": None,
                 "reactions": {},
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -3327,7 +3395,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                 "id": 1,
                 "parent": None,
                 "reactions": {},
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -3422,7 +3494,11 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest):
                 "id": 1,
                 "parent": None,
                 "reactions": {},
-                "user": {"fullname": "foo bar", "name": "foo"},
+                "user": {
+                    "fullname": "foo bar",
+                    "name": "foo",
+                    "url_path": "user/foo",
+                },
             },
         )
 

+ 15 - 3
tests/test_pagure_flask_api_issue_create.py

@@ -160,7 +160,11 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests):
                     "status": "Open",
                     "tags": [],
                     "title": "test issue",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 "message": "Issue created",
             },
@@ -212,7 +216,11 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests):
                     "status": "Open",
                     "tags": [],
                     "title": "test issue",
-                    "user": {"fullname": "foo bar", "name": "foo"},
+                    "user": {
+                        "fullname": "foo bar",
+                        "name": "foo",
+                        "url_path": "user/foo",
+                    },
                 },
                 "message": "Issue created",
             },
@@ -264,7 +272,11 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests):
                     "status": "Open",
                     "tags": [],
                     "title": "test issue",
-                    "user": {"fullname": "foo bar", "name": "foo"},
+                    "user": {
+                        "fullname": "foo bar",
+                        "name": "foo",
+                        "url_path": "user/foo",
+                    },
                 },
                 "message": "Issue created",
             },

+ 23 - 3
tests/test_pagure_flask_api_pr_flag.py

@@ -263,6 +263,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -334,6 +335,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -387,6 +389,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -445,6 +448,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -498,6 +502,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -800,6 +805,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -861,6 +867,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -915,6 +922,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -1076,7 +1084,11 @@ class PagureFlaskApiGetPRFlagtests(tests.Modeltests):
                         "pull_request_uid": "72a61033c2fc464aa9ef514c057aa62c",
                         "status": "success",
                         "url": "http://jenkins.cloud.fedoraproject.org",
-                        "user": {"fullname": "foo bar", "name": "foo"},
+                        "user": {
+                            "fullname": "foo bar",
+                            "name": "foo",
+                            "url_path": "user/foo",
+                        },
                         "username": "jenkins",
                     }
                 ]
@@ -1150,7 +1162,11 @@ class PagureFlaskApiGetPRFlagtests(tests.Modeltests):
                         "pull_request_uid": "72a61033c2fc464aa9ef514c057aa62c",
                         "status": "pending",
                         "url": "http://travis.io",
-                        "user": {"fullname": "foo bar", "name": "foo"},
+                        "user": {
+                            "fullname": "foo bar",
+                            "name": "foo",
+                            "url_path": "user/foo",
+                        },
                         "username": "travis",
                     },
                     {
@@ -1161,7 +1177,11 @@ class PagureFlaskApiGetPRFlagtests(tests.Modeltests):
                         "pull_request_uid": "72a61033c2fc464aa9ef514c057aa62c",
                         "status": "success",
                         "url": "http://jenkins.cloud.fedoraproject.org",
-                        "user": {"fullname": "foo bar", "name": "foo"},
+                        "user": {
+                            "fullname": "foo bar",
+                            "name": "foo",
+                            "url_path": "user/foo",
+                        },
                         "username": "jenkins",
                     },
                 ]

+ 123 - 23
tests/test_pagure_flask_api_project.py

@@ -338,7 +338,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
             "total_projects": 1,
@@ -550,7 +554,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": ["infra"],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
             "total_projects": 1,
@@ -607,7 +615,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": ["infra"],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -636,7 +648,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -665,7 +681,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             ],
             "total_projects": 3,
@@ -722,7 +742,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": ["infra"],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -751,7 +775,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -780,7 +808,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             ],
             "total_projects": 3,
@@ -833,7 +865,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": ["infra"],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
             "total_projects": 1,
@@ -886,7 +922,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
             "total_projects": 1,
@@ -955,7 +995,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
             "parent": None,
             "priorities": {},
             "tags": ["infra"],
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertDictEqual(data, expected_data)
 
@@ -1044,7 +1088,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
             "parent": None,
             "priorities": {},
             "tags": ["infra"],
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertDictEqual(data, expected_data)
 
@@ -1101,7 +1149,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
             "parent": None,
             "priorities": {},
             "tags": ["infra"],
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertDictEqual(data, expected_data)
 
@@ -1162,7 +1214,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -1191,7 +1247,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -1220,7 +1280,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             ],
             "total_projects": 3,
@@ -1287,7 +1351,11 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 }
             ],
             "total_projects": 3,
@@ -1446,6 +1514,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                 "emails": ["foo@bar.com"],
                 "fullname": "foo bar",
                 "name": "foo",
+                "url_path": "user/foo",
             },
         }
         self.assertEqual(data, expected_output)
@@ -1500,6 +1569,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                 "emails": ["foo@bar.com"],
                 "fullname": "foo bar",
                 "name": "foo",
+                "url_path": "user/foo",
             },
         }
         self.assertEqual(data, expected_output)
@@ -1564,6 +1634,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                 "emails": ["foo@bar.com"],
                 "fullname": "foo bar",
                 "name": "foo",
+                "url_path": "user/foo",
             },
         }
         self.assertEqual(data, expected_output)
@@ -1620,6 +1691,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                 "emails": ["foo@bar.com"],
                 "fullname": "foo bar",
                 "name": "foo",
+                "url_path": "user/foo",
             },
         }
         self.assertEqual(data, expected_output)
@@ -1678,6 +1750,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
                 "emails": ["foo@bar.com"],
                 "fullname": "foo bar",
                 "name": "foo",
+                "url_path": "user/foo",
             },
         }
         self.assertEqual(data, expected_output)
@@ -3040,6 +3113,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests):
                     "emails": ["bar@pingou.com", "foo@pingou.com"],
                     "fullname": "PY C",
                     "name": "pingou",
+                    "url_path": "user/pingou",
                 },
                 "username": "Jenkins",
             },
@@ -3091,6 +3165,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests):
                     "emails": ["bar@pingou.com", "foo@pingou.com"],
                     "fullname": "PY C",
                     "name": "pingou",
+                    "url_path": "user/pingou",
                 },
                 "username": "Jenkins",
             },
@@ -3149,6 +3224,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests):
                     "emails": ["bar@pingou.com", "foo@pingou.com"],
                     "fullname": "PY C",
                     "name": "pingou",
+                    "url_path": "user/pingou",
                 },
                 "username": "Jenkins",
             },
@@ -3286,7 +3362,11 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests):
                     "percent": None,
                     "status": "pending",
                     "url": "https://koji.fp.o/koji...",
-                    "user": {"fullname": "foo bar", "name": "foo"},
+                    "user": {
+                        "fullname": "foo bar",
+                        "name": "foo",
+                        "url_path": "user/foo",
+                    },
                     "username": "simple-koji-ci",
                 },
                 {
@@ -3297,7 +3377,11 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests):
                     "percent": None,
                     "status": "success",
                     "url": "https://koji.fp.o/koji...",
-                    "user": {"fullname": "foo bar", "name": "foo"},
+                    "user": {
+                        "fullname": "foo bar",
+                        "name": "foo",
+                        "url_path": "user/foo",
+                    },
                     "username": "complex-koji-ci",
                 },
             ],
@@ -3488,7 +3572,11 @@ class PagureFlaskApiProjectModifyAclTests(tests.Modeltests):
             "priorities": {},
             "tags": [],
             "url_path": "test",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertEqual(data, expected_output)
 
@@ -3548,7 +3636,11 @@ class PagureFlaskApiProjectModifyAclTests(tests.Modeltests):
             "priorities": {},
             "tags": [],
             "url_path": "test",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
         self.assertEqual(data, expected_output)
 
@@ -3663,7 +3755,11 @@ class PagureFlaskApiProjectModifyAclTests(tests.Modeltests):
             "priorities": {},
             "tags": [],
             "url_path": "test",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
 
         self.assertEqual(data, expected_output)
@@ -3726,7 +3822,11 @@ class PagureFlaskApiProjectModifyAclTests(tests.Modeltests):
             "priorities": {},
             "tags": [],
             "url_path": "test",
-            "user": {"fullname": "PY C", "name": "pingou"},
+            "user": {
+                "fullname": "PY C",
+                "name": "pingou",
+                "url_path": "user/pingou",
+            },
         }
 
         self.assertEqual(data, expected_output)

+ 137 - 27
tests/test_pagure_flask_api_ui_private_repo.py

@@ -42,7 +42,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "Test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -64,7 +68,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -86,7 +94,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -108,7 +120,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -130,7 +146,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -152,7 +172,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -174,7 +198,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
     {
         "assignee": None,
@@ -196,7 +224,11 @@ FULL_ISSUE_LIST = [
         "status": "Open",
         "tags": [],
         "title": "test issue",
-        "user": {"fullname": "PY C", "name": "pingou"},
+        "user": {
+            "fullname": "PY C",
+            "name": "pingou",
+            "url_path": "user/pingou",
+        },
     },
 ]
 
@@ -1387,7 +1419,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                             "parent": None,
                             "priorities": {},
                             "tags": ["infra"],
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         }
                     ],
                 },
@@ -1441,7 +1477,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                             "parent": None,
                             "priorities": {},
                             "tags": ["infra"],
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         }
                     ],
                 },
@@ -1571,7 +1611,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                                 "parent": None,
                                 "priorities": {},
                                 "tags": [],
-                                "user": {"fullname": "PY C", "name": "pingou"},
+                                "user": {
+                                    "fullname": "PY C",
+                                    "name": "pingou",
+                                    "url_path": "user/pingou",
+                                },
                             },
                             "remote_git": None,
                             "repo_from": {
@@ -1600,7 +1644,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                                 "parent": None,
                                 "priorities": {},
                                 "tags": [],
-                                "user": {"fullname": "PY C", "name": "pingou"},
+                                "user": {
+                                    "fullname": "PY C",
+                                    "name": "pingou",
+                                    "url_path": "user/pingou",
+                                },
                             },
                             "status": "Open",
                             "tags": [],
@@ -1608,7 +1656,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                             "title": "test pull-request",
                             "uid": "1431414800",
                             "updated_on": "1431414800",
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         }
                     ],
                     "total_requests": 1,
@@ -1690,7 +1742,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "parent": None,
                         "priorities": {},
                         "tags": [],
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "remote_git": None,
                     "repo_from": {
@@ -1719,7 +1775,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "parent": None,
                         "priorities": {},
                         "tags": [],
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     "status": "Open",
                     "tags": [],
@@ -1727,7 +1787,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                     "title": "test pull-request",
                     "uid": "1431414800",
                     "updated_on": "1431414800",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             )
 
@@ -1983,6 +2047,7 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -2036,6 +2101,7 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "emails": ["bar@pingou.com", "foo@pingou.com"],
                         "fullname": "PY C",
                         "name": "pingou",
+                        "url_path": "user/pingou",
                     },
                     "username": "Jenkins",
                 },
@@ -2489,7 +2555,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                             "status": "Open",
                             "tags": [],
                             "title": "test issue",
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         }
                     ],
                     "pagination": {
@@ -2566,7 +2636,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                             "status": "Open",
                             "tags": [],
                             "title": "Test issue",
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         },
                         {
                             "assignee": None,
@@ -2588,7 +2662,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                             "status": "Open",
                             "tags": [],
                             "title": "test issue",
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         },
                     ],
                     "pagination": {
@@ -2658,7 +2736,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "status": "Open",
                         "tags": [],
                         "title": "Test issue",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     {
                         "assignee": None,
@@ -2680,7 +2762,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "status": "Open",
                         "tags": [],
                         "title": "test issue",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                 ],
                 "pagination": {
@@ -2821,7 +2907,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "status": "Open",
                         "tags": [],
                         "title": "Test issue",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                     {
                         "assignee": None,
@@ -2843,7 +2933,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                         "status": "Open",
                         "tags": [],
                         "title": "test issue",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     },
                 ],
                 "pagination": {
@@ -2920,7 +3014,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                     "status": "Open",
                     "tags": [],
                     "title": "test issue",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             )
 
@@ -2969,7 +3067,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                 "status": "Open",
                 "tags": [],
                 "title": "test issue",
-                "user": {"fullname": "PY C", "name": "pingou"},
+                "user": {
+                    "fullname": "PY C",
+                    "name": "pingou",
+                    "url_path": "user/pingou",
+                },
             },
         )
 
@@ -3275,7 +3377,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                     "id": 1,
                     "parent": None,
                     "reactions": {},
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             )
 
@@ -3299,7 +3405,11 @@ class PagurePrivateRepotest(tests.Modeltests):
                     "id": 1,
                     "parent": None,
                     "reactions": {},
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             )
 

+ 47 - 9
tests/test_pagure_flask_api_user.py

@@ -94,6 +94,7 @@ class PagureFlaskApiUSertests(tests.Modeltests):
             "user": {
                 "fullname": "PY C",
                 "name": "pingou",
+                "url_path": "user/pingou",
                 "avatar_url": "https://seccdn.libravatar.org/avatar/...",
             },
         }
@@ -164,7 +165,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -193,7 +198,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "access_groups": {"admin": [], "commit": [], "ticket": []},
@@ -222,7 +231,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "parent": None,
                     "priorities": {},
                     "tags": [],
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             ],
             "repos_pagination": {
@@ -237,6 +250,7 @@ class PagureFlaskApiUSertests(tests.Modeltests):
             "user": {
                 "fullname": "PY C",
                 "name": "pingou",
+                "url_path": "user/pingou",
                 "avatar_url": "https://seccdn.libravatar.org/avatar/...",
             },
         }
@@ -387,7 +401,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "id": 1,
                     "ref_id": "1",
                     "type": "created",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "date": date,
@@ -397,7 +415,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "id": 2,
                     "ref_id": "1",
                     "type": "commented",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "date": date,
@@ -407,7 +429,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "id": 3,
                     "ref_id": "1",
                     "type": "closed",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
                 {
                     "date": date,
@@ -417,7 +443,11 @@ class PagureFlaskApiUSertests(tests.Modeltests):
                     "id": 4,
                     "ref_id": "1",
                     "type": "commented",
-                    "user": {"fullname": "PY C", "name": "pingou"},
+                    "user": {
+                        "fullname": "PY C",
+                        "name": "pingou",
+                        "url_path": "user/pingou",
+                    },
                 },
             ],
             "date": date,
@@ -1757,13 +1787,21 @@ class PagureFlaskApiUsertestissues(tests.Modeltests):
                             "priorities": {},
                             "tags": [],
                             "url_path": "test",
-                            "user": {"fullname": "PY C", "name": "pingou"},
+                            "user": {
+                                "fullname": "PY C",
+                                "name": "pingou",
+                                "url_path": "user/pingou",
+                            },
                         },
                         "related_prs": [],
                         "status": "Open",
                         "tags": [],
                         "title": "Test issue",
-                        "user": {"fullname": "PY C", "name": "pingou"},
+                        "user": {
+                            "fullname": "PY C",
+                            "name": "pingou",
+                            "url_path": "user/pingou",
+                        },
                     }
                 ],
                 "pagination_issues_assigned": {

+ 13 - 8
tests/test_pagure_lib_git.py

@@ -1411,7 +1411,7 @@ new file mode 100644
 index 0000000..60f7480
 --- /dev/null
 +++ b/456
-@@ -0,0 +1,30 @@
+@@ -0,0 +1,31 @@
 +{
 +    "assignee": null,
 +    "blocks": [],
@@ -1438,7 +1438,8 @@ index 0000000..60f7480
 +            "foo@pingou.com"
 +        ],
 +        "fullname": "PY C",
-+        "name": "pingou"
++        "name": "pingou",
++        "url_path": "user/pingou"
 +    }
 +}
 \ No newline at end of file
@@ -1512,7 +1513,7 @@ diff --git a/123 b/456
 index 458821a..77674a8
 --- a/123
 +++ b/456
-@@ -4,13 +4,32 @@
+@@ -4,13 +4,33 @@
      "close_status": null,
      "closed_at": null,
 -    "comments": [],
@@ -1532,7 +1533,8 @@ index 458821a..77674a8
 +                    "foo@bar.com"
 +                ],
 +                "fullname": "foo bar",
-+                "name": "foo"
++                "name": "foo",
++                "url_path": "user/foo"
 +            }
 +        }
 +    ],
@@ -1681,7 +1683,7 @@ new file mode 100644
 index 0000000..60f7480
 --- /dev/null
 +++ b/456
-@@ -0,0 +1,147 @@
+@@ -0,0 +1,150 @@
 +{
 +    "assignee": null,
 +    "branch": "master",
@@ -1751,7 +1753,8 @@ index 0000000..60f7480
 +                "foo@pingou.com"
 +            ],
 +            "fullname": "PY C",
-+            "name": "pingou"
++            "name": "pingou",
++            "url_path": "user/pingou"
 +        }
 +    },
 +    "remote_git": null,
@@ -1810,7 +1813,8 @@ index 0000000..60f7480
 +                "foo@pingou.com"
 +            ],
 +            "fullname": "PY C",
-+            "name": "pingou"
++            "name": "pingou",
++            "url_path": "user/pingou"
 +        }
 +    },
 +    "status": "Open",
@@ -1826,7 +1830,8 @@ index 0000000..60f7480
 +            "foo@pingou.com"
 +        ],
 +        "fullname": "PY C",
-+        "name": "pingou"
++        "name": "pingou",
++        "url_path": "user/pingou"
 +    }
 +}
 \ No newline at end of file