You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2018/03/22 18:21:51 UTC

[2/3] allura git commit: [#8149] Refractors bulk delete method and adds test coverage for bulk delete functionality

[#8149] Refractors bulk delete method and adds test coverage for bulk delete functionality


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

Branch: refs/heads/master
Commit: 8e568e71a4908e323d25f0055903670b7f7b34fe
Parents: a2b5932
Author: deshigtk <de...@gmail.com>
Authored: Wed Mar 21 22:06:15 2018 +0530
Committer: deshigtk <de...@gmail.com>
Committed: Wed Mar 21 22:06:15 2018 +0530

----------------------------------------------------------------------
 ForgeTracker/forgetracker/model/ticket.py       | 19 +++++++++++-----
 .../tracker_widgets/mass_edit_form.html         |  1 -
 .../forgetracker/tests/functional/test_root.py  | 23 ++++++++++++++++++++
 ForgeTracker/forgetracker/tracker_main.py       |  9 +-------
 4 files changed, 37 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/8e568e71/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index 467afca..084eb8d 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -37,7 +37,7 @@ from ming.orm import FieldProperty, ForeignIdProperty, RelationProperty
 from ming.orm.declarative import MappedClass
 from ming.orm.ormsession import ThreadLocalORMSession
 
-from tg import config as tg_config
+from tg import config as tg_config, flash
 
 from allura.model import (
     ACE,
@@ -60,6 +60,7 @@ from allura.model import (
     artifact_orm_session,
     project_orm_session,
     AlluraUserProperty,
+    Shortlink
 )
 from allura.model.timeline import ActivityObject
 from allura.model.notification import MailFooter
@@ -70,6 +71,7 @@ from allura.lib.search import search_artifact, SearchError
 from allura.lib import utils
 from allura.lib import helpers as h
 from allura.lib.plugin import ImportIdConverter
+from allura.lib.security import require_access
 from allura.tasks import mail_tasks
 from forgetracker import search as tsearch
 
@@ -388,11 +390,7 @@ class Globals(MappedClass):
             for k, v in sorted(values.iteritems()):
                 if k == 'deleted':
                     if v:
-                        ticket.deleted = True
-                        suffix = " {dt.hour}:{dt.minute}:{dt.second} {dt.day}-{dt.month}-{dt.year}".format(
-                            dt=datetime.utcnow())
-                        ticket.summary += suffix
-                        c.app.globals.invalidate_bin_counts()
+                        ticket.soft_delete()
                         break
                 elif k == 'assigned_to_id':
                     new_user = User.query.get(_id=v)
@@ -1311,6 +1309,15 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
             self.app.config.options.get('AllowEmailPosting', True),
             discussion_disabled=self.discussion_disabled)
 
+    def soft_delete(self):
+        require_access(self, 'delete')
+        Shortlink.query.remove(dict(ref_id=self.index_id()))
+        self.deleted = True
+        suffix = " {dt.hour}:{dt.minute}:{dt.second} {dt.day}-{dt.month}-{dt.year}".format(
+            dt=datetime.utcnow())
+        self.summary += suffix
+        flash('Ticket successfully deleted')
+        c.app.globals.invalidate_bin_counts()
 
 
 class TicketAttachment(BaseAttachment):

http://git-wip-us.apache.org/repos/asf/allura/blob/8e568e71/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html b/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
index 5169683..2a929f0 100644
--- a/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
+++ b/ForgeTracker/forgetracker/templates/tracker_widgets/mass_edit_form.html
@@ -55,7 +55,6 @@
       <select name="deleted" id="deleted">
         <option value="" selected="selected">Don't change</option>
         <option value="True">True</option>
-        <option value="False">False</option>
       </select>
     </div>
     <div class="grid-6">

http://git-wip-us.apache.org/repos/asf/allura/blob/8e568e71/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 cb15819..5f0fb1c 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -2458,6 +2458,29 @@ class TestFunctionalController(TrackerTestController):
         M.User.query.remove({'username': c.user.username})
         self.app.get('/p/test/bugs/1/', status=200)
 
+    def test_bulk_delete(self):
+        self.new_ticket(summary='test first ticket')
+        self.new_ticket(summary='test second ticket')
+        ThreadLocalORMSession.flush_all()
+        M.MonQTask.run_ready()
+        ThreadLocalORMSession.flush_all()
+        first_ticket = tm.Ticket.query.get(summary='test first ticket')
+        second_ticket = tm.Ticket.query.get(summary='test second ticket')
+
+        M.MonQTask.query.remove()
+        self.app.post('/p/test/bugs/update_tickets', {
+            '__search': '',
+            '__ticket_ids': (
+                first_ticket._id,
+                second_ticket._id),
+            'deleted': True})
+        M.MonQTask.run_ready()
+
+        r = self.app.get('/bugs/')
+        assert 'No open tickets found.' in r
+        assert tm.Ticket.query.get(ticket_num=1).summary != 'test first ticket'
+        assert tm.Ticket.query.get(ticket_num=2).summary != 'test second ticket'
+
 
 class TestMilestoneAdmin(TrackerTestController):
     def _post(self, params, **kw):

http://git-wip-us.apache.org/repos/asf/allura/blob/8e568e71/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 8c8e626..ca45f4c 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1445,14 +1445,7 @@ class TicketController(BaseController, FeedController):
     @expose('json:')
     @require_post()
     def delete(self, **kw):
-        require_access(self.ticket, 'delete')
-        M.Shortlink.query.remove(dict(ref_id=self.ticket.index_id()))
-        self.ticket.deleted = True
-        suffix = " {dt.hour}:{dt.minute}:{dt.second} {dt.day}-{dt.month}-{dt.year}".format(
-            dt=datetime.utcnow())
-        self.ticket.summary += suffix
-        flash('Ticket successfully deleted')
-        c.app.globals.invalidate_bin_counts()
+        self.ticket.soft_delete()
         return dict(location='../' + str(self.ticket.ticket_num))
 
     @without_trailing_slash