diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-10-10 23:27:39 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-10-10 23:28:29 -0400 |
commit | fdff1f8800b79c05fbbe49c3ed65c37033c074e7 (patch) | |
tree | d9ac59c76e0282c19d710326ccda94330d423020 /group_messaging | |
parent | efe749c42b9998714600b7212cf5534bb5a4263b (diff) | |
download | askbot-fdff1f8800b79c05fbbe49c3ed65c37033c074e7.tar.gz askbot-fdff1f8800b79c05fbbe49c3ed65c37033c074e7.tar.bz2 askbot-fdff1f8800b79c05fbbe49c3ed65c37033c074e7.zip |
added url test to the pm email notification, and fixed the url, made sent messages automatically visited by the sender
Diffstat (limited to 'group_messaging')
-rw-r--r-- | group_messaging/models.py | 15 | ||||
-rw-r--r-- | group_messaging/tests.py | 35 |
2 files changed, 40 insertions, 10 deletions
diff --git a/group_messaging/models.py b/group_messaging/models.py index 91e4a52e..9cc12786 100644 --- a/group_messaging/models.py +++ b/group_messaging/models.py @@ -218,6 +218,8 @@ class MessageManager(models.Manager): senders_info=sender.username, text=text, ) + now = datetime.datetime.now() + LastVisitTime.objects.create(message=message, user=sender, at=now) names = get_recipient_names(recipients) message.add_recipient_names_to_senders_info(recipients) message.save() @@ -327,7 +329,7 @@ class Message(models.Model): sender_list, created = SenderList.objects.get_or_create(recipient=recipient) sender_list.senders.add(self.sender) - def get_absolute_url(self, user=None, include_domain_name=False): + def get_absolute_url(self, user=None): """returns absolute url to the thread""" assert(user != None) settings = django_settings.GROUP_MESSAGING @@ -340,9 +342,9 @@ class Message(models.Model): params = copy.copy(settings['base_url_params']) params['thread_id'] = self.id url = url_getter(user) + '?' + urllib.urlencode(params) - if include_domain_name: - site = Site.objects.get_current() - url = 'http://' + site.domain + url + #if include_domain_name: #don't need this b/c + # site = Site.objects.get_current() + # url = 'http://' + site.domain + url return url def get_email_subject_line(self): @@ -388,9 +390,8 @@ class Message(models.Model): #todo change url scheme so that all users have the same #urls within their personal areas of the user profile #so that we don't need to have loops like this one - thread_url = root_message.get_absolute_url( - user, include_domain_name=True - ).replace('&', '&') + thread_url = root_message.get_absolute_url(user) + thread_url = thread_url.replace('&', '&') #in the template we have a placeholder to be replaced like this: body_text = body_text.replace('THREAD_URL_HOLE', thread_url) send_mail( diff --git a/group_messaging/tests.py b/group_messaging/tests.py index 61b2dbbf..c77f29d7 100644 --- a/group_messaging/tests.py +++ b/group_messaging/tests.py @@ -1,3 +1,4 @@ +import datetime import time import urlparse from bs4 import BeautifulSoup @@ -28,6 +29,10 @@ def create_user(name): user.groups.add(group) return user +def get_html_message(mail_message): + """mail message is an item from the django.core.mail.outbox""" + return mail_message.alternatives[0][0] + class GroupMessagingTests(TestCase): """base class for the test cases in this app""" @@ -90,11 +95,13 @@ class ViewsTests(GroupMessagingTests): user=self.sender ) self.assertEqual(context['threads_data'][root.id]['status'], 'new') - #"visit" the thread - last_visit_time = LastVisitTime.objects.create( + #"visit" the thread: todo - make a method + last_visit_time, created = LastVisitTime.objects.get_or_create( user=self.sender, message=root ) + last_visit_time.at = datetime.datetime.now() + last_visit_time.save() time.sleep(1.5) #response must show as "seen" @@ -149,6 +156,21 @@ class ViewsTests(GroupMessagingTests): thread_data = context['threads_data'][thread_id] self.assertEqual(thread_data['status'], 'new') + def test_emailed_message_url_works_for_post_recipient(self): + root = self.create_thread_for_user(self.sender, self.recipient) + from django.core.mail import outbox + html_message = get_html_message(outbox[0]) + link = BeautifulSoup(html_message).find('a', attrs={'class': 'thread-link'}) + url = link['href'].replace('&', '&') + parsed_url = urlparse.urlparse(url) + url_data = urlparse.parse_qsl(parsed_url.query) + self.client.login(user_id=self.recipient.id, method='force') + response = self.client.get(parsed_url.path, url_data) + dom = BeautifulSoup(response.content) + threads = dom.find_all('ul', attrs={'class': 'thread'}) + self.assertEquals(len(threads), 1) + thread_lists = dom.find_all('table', attrs={'class': 'threads-list'}) + self.assertEquals(len(thread_lists), 0) class ModelsTests(GroupMessagingTests): """test cases for the `private_messaging` models""" @@ -284,7 +306,7 @@ class ModelsTests(GroupMessagingTests): self.assertEqual(len(outbox), 1) self.assertEqual(len(outbox[0].recipients()), 1) self.assertEqual(outbox[0].recipients()[0], self.recipient.email) - html_message = outbox[0].alternatives[0][0] + html_message = get_html_message(outbox[0]) self.assertTrue(root.text in html_message) soup = BeautifulSoup(html_message) links = soup.find_all('a', attrs={'class': 'thread-link'}) @@ -322,3 +344,10 @@ class ModelsTests(GroupMessagingTests): ) threads = Message.objects.get_threads(recipient=self.sender) self.assertEqual(threads.count(), 0) + + def test_sent_message_is_seen_by_the_sender(self): + root = self.create_thread_for_user(self.sender, self.recipient) + time.sleep(1.5) + last_visits = LastVisitTime.objects.filter(message=root, user=self.sender) + self.assertEqual(last_visits.count(), 1) + |