You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by ke...@apache.org on 2018/07/09 14:40:26 UTC

allura git commit: Avoid error when closing a private ticket created by a deleted user

Repository: allura
Updated Branches:
  refs/heads/master a1181f25f -> 22ac7e1e6


Avoid error when closing a private ticket created by a deleted user


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/22ac7e1e
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/22ac7e1e
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/22ac7e1e

Branch: refs/heads/master
Commit: 22ac7e1e6577d2727cda361172c32fa366b54a5c
Parents: a1181f2
Author: Dave Brondsema <da...@brondsema.net>
Authored: Fri Jul 6 14:17:00 2018 -0400
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Fri Jul 6 14:30:09 2018 -0400

----------------------------------------------------------------------
 ForgeTracker/forgetracker/model/ticket.py       |  4 +--
 .../forgetracker/tests/functional/test_root.py  | 27 +++++++++++++++++---
 2 files changed, 25 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/22ac7e1e/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index db50536..3955391 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -834,13 +834,13 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
     def _set_private(self, bool_flag):
         if bool_flag:
             role_developer = ProjectRole.by_name('Developer')
-            role_creator = ProjectRole.by_user(self.reported_by, upsert=True)
+            role_creator = ProjectRole.by_user(self.reported_by, upsert=True) if self.reported_by else None
             def _allow_all(role, perms):
                 return [ACE.allow(role._id, perm) for perm in perms]
             # maintain existing access for developers and the ticket creator,
             # but revoke all access for everyone else
             acl = _allow_all(role_developer, security.all_allowed(self, role_developer))
-            if role_creator != ProjectRole.anonymous():
+            if role_creator and role_creator != ProjectRole.anonymous():
                 acl += _allow_all(role_creator, security.all_allowed(self, role_creator))
             acl += [DENY_ALL]
             self.acl = acl

http://git-wip-us.apache.org/repos/asf/allura/blob/22ac7e1e/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index d9b349a..5e4fff4 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -49,7 +49,7 @@ from allura import model as M
 from forgewiki import model as wm
 from forgetracker import model as tm
 
-from allura.lib.security import has_access
+from allura.lib.security import has_access, Credentials
 from allura.lib import helpers as h
 from allura.lib.search import SearchError
 from allura.tests import decorators as td
@@ -95,7 +95,7 @@ class TrackerTestController(TestController):
 
         for k, v in kw.iteritems():
             form['ticket_form.%s' % k] = v
-        resp = form.submit()
+        resp = form.submit(extra_environ=extra_environ)
         assert resp.status_int != 200, resp
         return resp
 
@@ -2468,8 +2468,27 @@ class TestFunctionalController(TrackerTestController):
             assert_equal(t, None)
 
     def test_user_missing(self):
-        self.new_ticket(summary='foo bar', assigned_to=c.user.username)
-        M.User.query.remove({'username': c.user.username})
+        # add test-user to project so it can be assigned the ticket
+        testuser = M.User.by_username('test-user')
+        c.project.add_user(testuser, ['Developer'])
+        Credentials.get().clear()
+        # make a ticket created by & assigned to test-user
+        self.new_ticket(summary='foo bar', assigned_to='test-user', private=True,
+                        extra_environ={'username': 'test-user'})
+        # but then remove the user
+        M.User.query.remove({'username': 'test-user'})
+
+        self.app.get('/p/test/bugs/1/', status=200)
+
+        r = self.app.post('/p/test/bugs/1/update_ticket', {
+            'summary': 'new summary',
+            'description': 'new description',
+            'status': 'closed',
+            'assigned_to': '',
+            'labels': '',
+            'private': '1',
+            'comment': 'closing ticket of a user that is gone'
+        })
         self.app.get('/p/test/bugs/1/', status=200)
 
     def test_bulk_delete(self):