This is an automated email from the ASF dual-hosted git repository.

brondsem pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 4cd3e82ae459d3a516f72ba8202f7a3673ef0d4e
Author: Dillon Walls <[email protected]>
AuthorDate: Fri Jul 21 03:34:50 2023 +0000

    [#8516] Ticket - now has full delete
---
 ForgeTracker/forgetracker/model/ticket.py          |  5 +++
 .../forgetracker/tests/unit/test_ticket_model.py   | 36 ++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/ForgeTracker/forgetracker/model/ticket.py 
b/ForgeTracker/forgetracker/model/ticket.py
index 4d7800939..cded51127 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -1375,6 +1375,11 @@ class Ticket(VersionedArtifact, ActivityObject, 
VotableArtifact):
             self.app.config.options.get('AllowEmailPosting', True),
             discussion_disabled=self.discussion_disabled)
 
+    def delete(self):
+        Shortlink.query.remove(dict(ref_id=self.index_id()))
+        super().delete()
+        self.globals.invalidate_bin_counts()
+
     def soft_delete(self):
         require_access(self, 'delete')
         Shortlink.query.remove(dict(ref_id=self.index_id()))
diff --git a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py 
b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
index 3d9aac1af..afd604678 100644
--- a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
+++ b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
@@ -17,6 +17,8 @@
 
 from tg import tmpl_context as c
 from datetime import datetime
+from io import BytesIO
+import os
 import six.moves.urllib.parse
 import six.moves.urllib.request
 import six.moves.urllib.error
@@ -29,6 +31,7 @@ from ming import schema
 from forgetracker.model import Ticket, TicketAttachment
 from forgetracker.tests.unit import TrackerTestWithModel
 from forgetracker.import_support import ResettableStream
+import allura
 from allura.model import Feed, Post, User
 from allura.lib import helpers as h
 from allura.tests import decorators as td
@@ -107,6 +110,39 @@ class TestTicketModel(TrackerTestWithModel):
         p.deleted = True
         assert not p.has_activity_access('read', c.user, 'activity')
 
+    def test_delete_ticket(self):
+        att_path = os.path.join(allura.__path__[0], 'tests', 'data', 
'user.png')
+
+        ticket = Ticket(summary='ticket', ticket_num=666)
+        with open(att_path, 'rb') as fp:
+            ticket.attach('ticket.png', fp,
+                          
discussion_id=ticket.discussion_thread.discussion._id,
+                          thread_id=ticket.discussion_thread._id)
+
+        post = ticket.discussion_thread.add_post(text='test post')
+        with open(att_path, 'rb') as fp:
+            post.attach('post.png', fp,
+                        discussion_id=ticket.discussion_thread.discussion._id,
+                        thread_id=ticket.discussion_thread._id,
+                        post_id=post._id)
+
+        ThreadLocalODMSession.flush_all()
+
+        assert Ticket.query.get(ticket_num=666)
+        assert Post.query.get(_id=post._id)
+        assert 
len(Ticket.attachment_class().query.find(dict(filename='ticket.png')).all()) == 
2
+        assert 
len(Post.attachment_class().query.find(dict(filename='post.png')).all()) == 2
+
+        ticket.delete()
+
+        ThreadLocalODMSession.flush_all()
+        ThreadLocalODMSession.close_all()
+
+        assert not Ticket.query.get(ticket_num=666)
+        assert not Post.query.get(_id=post._id)
+        assert not 
Ticket.attachment_class().query.find(dict(filename='ticket.png')).all()
+        assert not 
Post.attachment_class().query.find(dict(filename='post.png')).all()
+
     def test_private_ticket(self):
         from allura.model import ProjectRole
         from allura.model import ACE, DENY_ALL

Reply via email to