def assertHasErrorMessage(self, response): msgs = get_flash_messages(response) self.assertEqual(len(msgs), 1) self.assertEqual( msgs[0].level, messages.ERROR, "%s: %s" % (messages.DEFAULT_TAGS[msgs[0].level], msgs[0].message)) return msgs[0].message
def test_delete_all_messages_in_thread(self): self.user.is_staff = True self.user.save() msg = Email.objects.get(message_id="msg") msg2 = Message() msg2["From"] = "*****@*****.**" msg2["Message-ID"] = "<msg2>" msg2["In-Reply-To"] = "<msg>" msg2.set_payload("Dummy message") add_to_list("*****@*****.**", msg2) msg2 = Email.objects.get(message_id="msg2") thread_id = msg.thread.pk url = reverse('hk_thread_delete', args=("*****@*****.**", msg.thread.thread_id)) response = self.client.post(url, {"email": [msg.pk, msg2.pk]}) self.assertRedirects( response, reverse('hk_list_overview', kwargs={"mlist_fqdn": "*****@*****.**"})) # Flash message messages = get_flash_messages(response) self.assertEqual(len(messages), 1) self.assertEqual(messages[0].tags, "success") # Alls messages and the thread must be deleted. self.assertFalse(Email.objects.filter(message_id="msg").exists()) self.assertFalse(Email.objects.filter(message_id="msg2").exists()) self.assertFalse(Thread.objects.filter(pk=thread_id).exists())
def assertHasSuccessMessage(self, response, count=1): msgs = get_flash_messages(response) self.assertEqual(len(msgs), count) self.assertEqual( msgs[0].level, messages.SUCCESS, "%s: %s" % (messages.DEFAULT_TAGS[msgs[0].level], msgs[0].message)) return msgs[0].message
def test_new_message_post(self): self.user.first_name = "Django" self.user.last_name = "User" self.user.save() url = reverse('hk_message_new', args=["*****@*****.**"]) with patch("hyperkitty.lib.posting.mailman.subscribe") as sub_fn: response = self.client.post(url, { "subject": "Test subject", "message": "Test message content" }) self.assertTrue(sub_fn.called) redirect_url = reverse('hk_archives_with_month', kwargs={ "mlist_fqdn": "*****@*****.**", 'year': timezone.now().year, 'month': timezone.now().month }) self.assertRedirects(response, redirect_url) # flash message messages = get_flash_messages(response) self.assertEqual(len(messages), 1) self.assertEqual(messages[0].tags, "success") # sent email self.assertEqual(len(mail.outbox), 1) # print(mail.outbox[0].message()) self.assertEqual(mail.outbox[0].recipients(), ["*****@*****.**"]) self.assertEqual(mail.outbox[0].from_email, '"Django User" <*****@*****.**>') self.assertEqual(mail.outbox[0].subject, 'Test subject') self.assertEqual(mail.outbox[0].body, "Test message content") self.assertIsNone(mail.outbox[0].message().get("references")) self.assertIsNone(mail.outbox[0].message().get("in-reply-to"))
def test_reattach(self): threadid1 = self.messages[0]["Message-ID-Hash"] threadid2 = self.messages[1]["Message-ID-Hash"] response = self.client.post(reverse( 'hk_thread_reattach', args=["*****@*****.**", threadid2]), data={"parent": threadid1}) threads = Thread.objects.order_by("id") self.assertEqual(len(threads), 1) self.assertEqual(threads[0].thread_id, threadid1) expected_url = reverse('hk_thread', args=["*****@*****.**", threadid1]) self.assertRedirects(response, expected_url) messages = get_flash_messages(response) self.assertEqual(len(messages), 1) self.assertEqual(messages[0].tags, "success")
def test_delete_single_message(self): self.user.is_staff = True self.user.save() msg = Email.objects.get(message_id="msg") thread_id = msg.thread.pk url = reverse('hk_message_delete', args=("*****@*****.**", msg.message_id_hash)) response = self.client.post(url, {"email": msg.pk}) self.assertRedirects( response, reverse('hk_list_overview', kwargs={"mlist_fqdn": "*****@*****.**"})) # Flash message messages = get_flash_messages(response) self.assertEqual(len(messages), 1) self.assertEqual(messages[0].tags, "success") # The message and the thread must be deleted. self.assertFalse(Email.objects.filter(message_id="msg").exists()) self.assertFalse(Thread.objects.filter(pk=thread_id).exists())
def test_new_message_different_sender(self): self.user.first_name = "Django" self.user.last_name = "User" self.user.save() EmailAddress.objects.create(user=self.user, verified=True, email="*****@*****.**") EmailAddress.objects.create(user=self.user, verified=True, email="*****@*****.**") mm_user = Mock() self.mailman_client.get_user.side_effect = lambda name: mm_user mm_user.user_id = uuid.uuid1().int mm_user.subscriptions = [] mlist = MailingList.objects.get(name="*****@*****.**") url = reverse('hk_message_new', args=["*****@*****.**"]) with patch("hyperkitty.views.message.post_to_list") as posting_fn: response = self.client.post( url, { "subject": "Test subject", "sender": "*****@*****.**", "message": "Test message content", }) self.assertEqual(posting_fn.call_count, 1) self.assertEqual(posting_fn.call_args[0][1:], (mlist, 'Test subject', 'Test message content', { 'From': '*****@*****.**' })) redirect_url = reverse('hk_archives_with_month', kwargs={ "mlist_fqdn": "*****@*****.**", 'year': timezone.now().year, 'month': timezone.now().month }) self.assertRedirects(response, redirect_url) # flash message messages = get_flash_messages(response) self.assertEqual(len(messages), 1) self.assertEqual(messages[0].tags, "success")
def test_delete_single_in_thread(self): # Delete an email in a thread that contains other emails self.user.is_staff = True self.user.save() msg = Email.objects.get(message_id="msg") msg2 = Message() msg2["From"] = "*****@*****.**" msg2["Message-ID"] = "<msg2>" msg2["In-Reply-To"] = "<msg>" msg2.set_payload("Dummy message") add_to_list("*****@*****.**", msg2) msg2 = Email.objects.get(message_id="msg2") thread_id = msg.thread.thread_id url = reverse('hk_message_delete', args=("*****@*****.**", msg.message_id_hash)) response = self.client.post(url, {"email": msg.pk}) self.assertRedirects( response, reverse('hk_thread', kwargs={ "mlist_fqdn": "*****@*****.**", "threadid": thread_id })) # Flash message messages = get_flash_messages(response) self.assertEqual(len(messages), 1) self.assertEqual(messages[0].tags, "success") # The message must be deleted, but not the other message or the thread. self.assertFalse(Email.objects.filter(message_id="msg").exists()) self.assertTrue(Email.objects.filter(message_id="msg2").exists()) thread = Thread.objects.get(thread_id=thread_id) self.assertIsNotNone(thread) # msg2 must now be the thread starter. msg2.refresh_from_db() self.assertIsNone(msg2.parent_id) self.assertEqual(thread.starting_email.message_id, "msg2")
def assertHasNoMessage(self, response): msgs = get_flash_messages(response) self.assertEqual(len(msgs), 0)