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
