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