def create_notification_for_pm(self, sender, target): topic = PrivateTopicFactory(author=sender) topic.add_participant(target, silent=True) send_message_mp(author=sender, n_topic=topic, text="Testing") return topic
class PrivateTopicTest(TestCase): def setUp(self): # scenario - topic1 : # post1 - user1 - unread # post2 - user2 - unread self.user1 = ProfileFactory().user self.user2 = ProfileFactory().user self.outsider = ProfileFactory().user # Create the bot accound and add it to the bot group self.bot = ProfileFactory().user bot_group = Group(name=settings.ZDS_APP["member"]["bot_group"]) bot_group.save() self.bot.groups.add(bot_group) self.topic1 = PrivateTopicFactory(author=self.user1) self.topic1.participants.add(self.user2) self.post1 = PrivatePostFactory(privatetopic=self.topic1, author=self.user1, position_in_topic=1) self.post2 = PrivatePostFactory(privatetopic=self.topic1, author=self.user2, position_in_topic=2) def test_get_absolute_url(self): url = reverse("private-posts-list", args=[self.topic1.pk, self.topic1.slug()]) self.assertEqual(self.topic1.get_absolute_url(), url) def test_get_post_count(self): self.assertEqual(2, self.topic1.get_post_count()) def test_get_last_answer(self): topic = PrivateTopicFactory(author=self.user2) PrivatePostFactory(privatetopic=topic, author=self.user2, position_in_topic=1) self.assertEqual(self.post2, self.topic1.get_last_answer()) self.assertNotEqual(self.post1, self.topic1.get_last_answer()) self.assertIsNone(topic.get_last_answer()) def test_first_post(self): topic = PrivateTopicFactory(author=self.user2) self.assertEqual(self.post1, self.topic1.first_post()) self.assertIsNone(topic.first_post()) def test_last_read_post(self): # scenario - topic1 : # post1 - user1 - unread # post2 - user2 - unread self.assertEqual(self.post1, self.topic1.last_read_post(self.user1)) # scenario - topic1 : # post1 - user1 - read # post2 - user2 - read mark_read(self.topic1, user=self.user1) self.assertEqual(self.post2, self.topic1.last_read_post(self.user1)) # scenario - topic1 : # post1 - user1 - read # post2 - user2 - read # post3 - user2 - unread PrivatePostFactory(privatetopic=self.topic1, author=self.user2, position_in_topic=3) self.assertEqual(self.post2, self.topic1.last_read_post(self.user1)) def test_first_unread_post(self): # scenario - topic1 : # post1 - user1 - unread # post2 - user2 - unread self.assertEqual(self.post1, self.topic1.first_unread_post(self.user1)) # scenario - topic1 : # post1 - user1 - read # post2 - user2 - read # post3 - user2 - unread mark_read(self.topic1, self.user1) post3 = PrivatePostFactory(privatetopic=self.topic1, author=self.user2, position_in_topic=3) self.assertEqual(post3, self.topic1.first_unread_post(self.user1)) def test_one_participant_remaining(self): topic2 = PrivateTopicFactory(author=self.user1) self.assertFalse(self.topic1.one_participant_remaining()) self.assertTrue(topic2.one_participant_remaining()) def test_is_unread(self): # scenario - topic1 : # post1 - user1 - unread # post2 - user2 - unread self.assertTrue(self.topic1.is_unread(self.user1)) # scenario - topic1 : # post1 - user1 - read # post2 - user2 - read mark_read(self.topic1, self.user1) self.assertFalse(self.topic1.is_unread(self.user1)) # scenario - topic1 : # post1 - user1 - read # post2 - user2 - read # post3 - user2 - unread PrivatePostFactory(privatetopic=self.topic1, author=self.user2, position_in_topic=3) self.assertTrue(self.topic1.is_unread(self.user1)) def test_topic_never_read_get_last_read(self): """Trying to read last message of a never read Private Topic Should return the first message of the Topic""" tester = ProfileFactory() self.topic1.participants.add(tester.user) self.assertEqual(self.topic1.last_read_post(user=tester.user), self.post1) def test_is_author(self): self.assertEqual(self.topic1.author, self.user1) self.assertTrue(self.topic1.is_author(self.user1)) self.assertFalse(self.topic1.is_author(self.user2)) def test_set_as_author_same_author(self): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.set_as_author(self.user1) self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) def test_set_as_author_new_author(self): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.set_as_author(self.user2) self.assertEqual(self.topic1.author, self.user2) self.assertEqual(list(self.topic1.participants.all()), [self.user1]) def test_set_as_author_outsider(self): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) with self.assertRaises(NotParticipatingError): self.topic1.set_as_author(self.outsider) def test_is_participant(self): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.assertTrue(self.topic1.is_participant(self.user1)) self.assertTrue(self.topic1.is_participant(self.user2)) self.assertFalse(self.topic1.is_participant(self.outsider)) @patch("zds.mp.signals.participant_added") def test_add_participant_unreachable_user(self, participant_added): self.assertFalse(is_reachable(self.bot)) with self.assertRaises(NotReachableError): self.topic1.add_participant(self.bot) self.assertFalse(participant_added.send.called) @patch("zds.mp.signals.participant_added") def test_add_participant_already_participating(self, participant_added): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.add_participant(self.user2) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.assertFalse(participant_added.send.called) @patch("zds.mp.signals.participant_added") def test_add_participant_normal(self, participant_added): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.add_participant(self.outsider) self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2, self.outsider]) self.assertEqual(participant_added.send.call_count, 1) @patch("zds.mp.signals.participant_removed") def test_remove_participant_not_participating(self, participant_removed): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.remove_participant(self.outsider) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.assertFalse(participant_removed.send.called) @patch("zds.mp.signals.participant_removed") def test_remove_participant_author(self, participant_removed): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.remove_participant(self.user1) self.assertEqual(self.topic1.author, self.user2) self.assertEqual(list(self.topic1.participants.all()), []) self.assertEqual(participant_removed.send.call_count, 1) @patch("zds.mp.signals.participant_removed") def test_remove_participant_normal(self, participant_removed): self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), [self.user2]) self.topic1.remove_participant(self.user2) self.assertEqual(self.topic1.author, self.user1) self.assertEqual(list(self.topic1.participants.all()), []) self.assertEqual(participant_removed.send.call_count, 1)