From a375496f39029ae77f2040e9f6adcabcb3b7bef6 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Thu, 4 Oct 2012 04:24:06 -0400 Subject: responses to archived messages kick them back to the inbox --- group_messaging/models.py | 27 ++++++++++++++++----------- group_messaging/tests.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 11 deletions(-) (limited to 'group_messaging') diff --git a/group_messaging/models.py b/group_messaging/models.py index f78f2b87..87f3005e 100644 --- a/group_messaging/models.py +++ b/group_messaging/models.py @@ -169,9 +169,11 @@ class MessageManager(models.Manager): #add author of the parent as a recipient to parent parent.add_recipients([senders_group]) #mark last active timestamp for the root message - #so that we know that this thread was most recently - #updated - message.update_root_info() + message.root.last_active_at = datetime.datetime.now() + #update senders info - stuff that is shown in the thread heading + message.root.update_senders_info() + #unarchive the thread for all recipients + message.root.unarchive() return message @@ -241,17 +243,20 @@ class Message(models.Model): sender_list, created = SenderList.objects.get_or_create(recipient=recipient) sender_list.senders.add(self.sender) - def update_root_info(self): - """Update the last active at timestamp and - the contributors info, if relevant. - Root object will be saved to the database. + def update_senders_info(self): + """update the contributors info, + meant to be used on a root message only """ - self.root.last_active_at = datetime.datetime.now() - senders_names = self.root.senders_info.split(',') + senders_names = self.senders_info.split(',') if self.sender.username in senders_names: senders_names.remove(self.sender.username) senders_names.insert(0, self.sender.username) - self.root.senders_info = (','.join(senders_names))[:64] - self.root.save() + self.senders_info = (','.join(senders_names))[:64] + self.save() + + def unarchive(self): + """unarchive message for all recipients""" + memos = self.memos.filter(status=MessageMemo.ARCHIVED) + memos.update(status=MessageMemo.SEEN) diff --git a/group_messaging/tests.py b/group_messaging/tests.py index c8401dc1..93b6b22f 100644 --- a/group_messaging/tests.py +++ b/group_messaging/tests.py @@ -5,6 +5,8 @@ from group_messaging.models import MessageMemo from group_messaging.models import SenderList from group_messaging.models import get_personal_group from group_messaging.models import create_personal_group +from group_messaging.views import ThreadsList +from mock import Mock MESSAGE_TEXT = 'test message text' @@ -116,3 +118,33 @@ class ModelTests(TestCase): self.assertEqual(threads, set([root_message])) threads = set(Message.objects.get_threads_for_user(self.recipient)) self.assertEqual(threads, set([root_message])) + + def test_answer_to_deleted_thread_undeletes_thread(self): + #setup: message, reply, responder deletes thread + root_message = self.create_thread_for_user(self.recipient) + response = Message.objects.create_response( + sender=self.recipient, + text='some response', + parent=root_message + ) + memo1, created = MessageMemo.objects.get_or_create( + message=root_message, + user=self.recipient, + status=MessageMemo.ARCHIVED + ) + #OP sends reply to reply + response2 = Message.objects.create_response( + sender=self.sender, + text='some response2', + parent=response + ) + + view = ThreadsList() + request = Mock(spec=('REQUEST', 'user')) + request.REQUEST = {'sender_id': '-1'} + request.user = self.recipient + context = view.get_context(request) + self.assertEqual(len(context['threads']), 1) + thread_id = context['threads'][0].id + thread_data = context['threads_data'][thread_id] + self.assertEqual(thread_data['status'], 'new') -- cgit v1.2.3-1-g7c22