Ejemplo n.º 1
0
    class AcceptFriendshipRequestViewTestCaseMixin(
            SpeedyCoreFriendsLanguageMixin):
        def set_up(self):
            super().set_up()
            self.first_user = ActiveUserFactory()
            self.second_user = ActiveUserFactory()
            friendship_request = Friend.objects.add_friend(
                from_user=self.first_user, to_user=self.second_user)
            self.page_url = '/{}/friends/request/accept/{}/'.format(
                self.second_user.slug, friendship_request.pk)
            self.second_user_friends_list_url = '/{}/friends/'.format(
                self.second_user.slug)

        def test_visitor_cannot_accept_friendship_request(self):
            self.client.logout()
            r = self.client.post(path=self.page_url)
            self.assertRedirects(response=r,
                                 expected_url='/login/?next={}'.format(
                                     self.page_url),
                                 status_code=302,
                                 target_status_code=200)
            self.assertIsNone(obj=r.context)

        def test_user_cannot_accept_friendship_request_they_sent_another_user(
                self):
            self.client.login(username=self.first_user.slug,
                              password=tests_settings.USER_PASSWORD)
            r = self.client.post(path=self.page_url)
            self.assertEqual(first=r.status_code, second=403)

        def test_user_that_has_received_request_can_accept_it(self):
            self.client.login(username=self.second_user.slug,
                              password=tests_settings.USER_PASSWORD)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.post(path=self.page_url)
            expected_url = self.first_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertTrue(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            self.assertIsNone(obj=r.context)
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[self._friendship_request_accepted_success_message])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])

        @override_settings(
            USER_SETTINGS=get_django_settings_class_with_override_settings(
                django_settings_class=django_settings.USER_SETTINGS,
                MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
                OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
        def test_user_that_has_received_request_can_accept_it_if_not_maximum(
                self):
            self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                             second=4)
            for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED - 1):
                Friend.objects.add_friend(
                    from_user=self.second_user,
                    to_user=ActiveUserFactory()).accept()
            self.client.login(username=self.second_user.slug,
                              password=tests_settings.USER_PASSWORD)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.post(path=self.page_url)
            expected_url = self.first_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertTrue(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            self.assertIsNone(obj=r.context)
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[self._friendship_request_accepted_success_message])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])

        @override_settings(
            USER_SETTINGS=get_django_settings_class_with_override_settings(
                django_settings_class=django_settings.USER_SETTINGS,
                MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
                OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
        def test_user_that_has_received_request_cannot_accept_it_if_maximum(
                self):
            self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                             second=4)
            for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED):
                Friend.objects.add_friend(
                    from_user=self.second_user,
                    to_user=ActiveUserFactory()).accept()
            self.client.login(username=self.second_user.slug,
                              password=tests_settings.USER_PASSWORD)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.post(path=self.page_url)
            expected_url = self.first_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[
                    self.
                    _you_already_have_friends_error_message_by_user_number_of_friends_and_gender(
                        user_number_of_friends=4,
                        gender=self.second_user.get_gender())
                ])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))

        @override_settings(
            USER_SETTINGS=get_django_settings_class_with_override_settings(
                django_settings_class=django_settings.USER_SETTINGS,
                MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
                OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
        def test_user_that_has_received_request_can_accept_it_if_other_not_maximum(
                self):
            self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                             second=4)
            for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED - 1):
                Friend.objects.add_friend(
                    from_user=self.first_user,
                    to_user=ActiveUserFactory()).accept()
            self.client.login(username=self.second_user.slug,
                              password=tests_settings.USER_PASSWORD)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.post(path=self.page_url)
            expected_url = self.first_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertTrue(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            self.assertIsNone(obj=r.context)
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[self._friendship_request_accepted_success_message])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])

        @override_settings(
            USER_SETTINGS=get_django_settings_class_with_override_settings(
                django_settings_class=django_settings.USER_SETTINGS,
                MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
                OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
        def test_user_that_has_received_request_cannot_accept_it_if_other_maximum(
                self):
            self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                             second=4)
            for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED):
                Friend.objects.add_friend(
                    from_user=self.first_user,
                    to_user=ActiveUserFactory()).accept()
            self.client.login(username=self.second_user.slug,
                              password=tests_settings.USER_PASSWORD)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.post(path=self.page_url)
            expected_url = self.first_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[
                    self.
                    _this_user_already_has_friends_error_message_by_other_user_number_of_friends_and_both_genders(
                        other_user_number_of_friends=4,
                        both_genders=get_both_genders_context_from_users(
                            user=self.second_user, other_user=self.first_user))
                ])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])
            self.assertFalse(expr=Friend.objects.are_friends(
                user1=self.first_user, user2=self.second_user))
Ejemplo n.º 2
0
    class RemoveFriendViewTestCaseMixin(SpeedyCoreFriendsLanguageMixin):
        def set_up(self):
            super().set_up()
            self.first_user = ActiveUserFactory()
            self.second_user = ActiveUserFactory()
            Friend.objects.add_friend(from_user=self.first_user,
                                      to_user=self.second_user).accept()
            self.page_url = '/{}/friends/remove/'.format(self.second_user.slug)
            self.opposite_url = '/{}/friends/remove/'.format(
                self.first_user.slug)

        def test_visitor_has_no_access(self):
            r = self.client.post(path=self.page_url)
            self.assertRedirects(response=r,
                                 expected_url='/login/?next={}'.format(
                                     self.page_url),
                                 status_code=302,
                                 target_status_code=200)
            self.assertIsNone(obj=r.context)

        def test_user_can_remove_other_user(self):
            self.assertEqual(first=Friend.objects.count(), second=1 * 2)
            self.client.login(username=self.first_user.slug,
                              password=tests_settings.USER_PASSWORD)
            r = self.client.post(path=self.page_url)
            expected_url = self.second_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertEqual(first=Friend.objects.count(), second=0)
            self.assertIsNone(obj=r.context)
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[
                    self.
                    _you_have_removed_this_user_from_friends_success_message_dict_by_gender[
                        self.second_user.get_gender()]
                ])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])

        def test_other_user_can_remove_first_user(self):
            self.assertEqual(first=Friend.objects.count(), second=1 * 2)
            self.client.login(username=self.second_user.slug,
                              password=tests_settings.USER_PASSWORD)
            r = self.client.post(path=self.opposite_url)
            expected_url = self.first_user.get_absolute_url()
            self.assertRedirects(response=r,
                                 expected_url=expected_url,
                                 status_code=302,
                                 target_status_code=200,
                                 fetch_redirect_response=False)
            self.assertEqual(first=Friend.objects.count(), second=0)
            self.assertIsNone(obj=r.context)
            r = self.client.get(path=expected_url)
            self.assertListEqual(
                list1=list(map(str, r.context['messages'])),
                list2=[
                    self.
                    _you_have_removed_this_user_from_friends_success_message_dict_by_gender[
                        self.first_user.get_gender()]
                ])
            r = self.client.get(path=expected_url)
            self.assertListEqual(list1=list(map(str, r.context['messages'])),
                                 list2=[])
Ejemplo n.º 3
0
    class LikeListViewsTestCaseMixin(SpeedyMatchLikesLanguageMixin):
        def set_up(self):
            super().set_up()
            self.user_1 = ActiveUserFactory()
            self.user_2 = ActiveUserFactory()
            self.user_3 = ActiveUserFactory()
            self.user_4 = ActiveUserFactory()
            self.user_5 = ActiveUserFactory()
            self.default_url = '/{}/likes/'.format(self.user_1.slug)
            self.to_url = '/{}/likes/people-i-like/'.format(self.user_1.slug)
            self.from_url = '/{}/likes/people-who-like-me/'.format(self.user_1.slug)
            self.mutual_url = '/{}/likes/mutual/'.format(self.user_1.slug)
            UserLike.objects.add_like(from_user=self.user_1, to_user=ActiveUserFactory(slug="user-99"))
            UserLike.objects.add_like(from_user=self.user_1, to_user=ActiveUserFactory(slug="user-98"))
            UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_3)
            UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_2)
            UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_5)
            UserLike.objects.add_like(from_user=ActiveUserFactory(slug="user-97"), to_user=self.user_1)
            UserLike.objects.add_like(from_user=ActiveUserFactory(slug="user-96"), to_user=self.user_1)
            UserLike.objects.add_like(from_user=self.user_5, to_user=self.user_1)
            UserLike.objects.add_like(from_user=self.user_2, to_user=self.user_1)
            self.to_likes = {
                User.objects.get(slug="user-99"),
                User.objects.get(slug="user-98"),
                self.user_3,
                self.user_2,
                self.user_5,
            }
            self.from_likes = {
                User.objects.get(slug="user-97"),
                User.objects.get(slug="user-96"),
                self.user_2,
                self.user_5,
            }
            self.mutual_likes = {
                self.user_2,
                self.user_5,
            }
            self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD)
            sleep(0.02)
            self.user_5.profile.update_last_visit()
            sleep(0.01)
            self.user_4.profile.update_last_visit()
            sleep(0.01)
            self.user_2.profile.update_last_visit()
            sleep(0.01)
            self.user_3.profile.update_last_visit()
            self.assertEqual(first=UserLike.objects.count(), second=9)

        def _test_all_like_list_views_contain_strings(self, strings):
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=len(self.to_likes))
            for string in strings:
                self.assertIn(member=string, container=r.content.decode())
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=len(self.from_likes))
            for string in strings:
                self.assertIn(member=string, container=r.content.decode())
            r = self.client.get(path=self.mutual_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=len(self.mutual_likes))
            for string in strings:
                self.assertIn(member=string, container=r.content.decode())

        def test_visitor_has_no_access(self):
            self.client.logout()
            self.assertEqual(first=self.client.get(path=self.to_url).status_code, second=302)
            self.assertEqual(first=self.client.get(path=self.from_url).status_code, second=302)
            self.assertEqual(first=self.client.get(path=self.mutual_url).status_code, second=302)

        def test_default_redirect(self):
            r = self.client.get(path=self.default_url)
            self.assertRedirects(response=r, expected_url=self.to_url, status_code=302, target_status_code=200)

        def test_user_can_see_who_they_like(self):
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=5)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.to_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2={self.user_1})
            to_likes = set(self.to_likes)
            UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_4)
            to_likes.add(self.user_4)
            self.assertEqual(first=UserLike.objects.count(), second=10)
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=6)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.to_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=to_likes)
            self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_3)
            sleep(0.01)
            self.user_4.profile.update_last_visit()
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=6)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.to_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=to_likes)
            self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_4)
            Block.objects.block(blocker=self.user_4, blocked=self.user_1)
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=6)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.to_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=to_likes)
            Block.objects.block(blocker=self.user_1, blocked=self.user_4)
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=5)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=to_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.to_likes)
            Block.objects.unblock(blocker=self.user_1, blocked=self.user_4)
            r = self.client.get(path=self.to_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=5)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=to_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.to_likes)

        def test_user_can_see_who_likes_them(self):
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=4)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2={self.user_1})
            from_likes = set(self.from_likes)
            UserLike.objects.add_like(from_user=self.user_4, to_user=self.user_1)
            from_likes.add(self.user_4)
            self.assertEqual(first=UserLike.objects.count(), second=10)
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=5)
            self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=self.from_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=from_likes)
            self.assertEqual(first=r.context['object_list'][0].from_user, second=self.user_2)
            sleep(0.01)
            self.user_4.profile.update_last_visit()
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=5)
            self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=self.from_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=from_likes)
            self.assertEqual(first=r.context['object_list'][0].from_user, second=self.user_4)
            Block.objects.block(blocker=self.user_1, blocked=self.user_4)
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=4)
            self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=from_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes)
            Block.objects.unblock(blocker=self.user_1, blocked=self.user_4)
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=5)
            self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=self.from_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=from_likes)
            Block.objects.block(blocker=self.user_4, blocked=self.user_1)
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=4)
            self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=from_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes)
            Block.objects.unblock(blocker=self.user_4, blocked=self.user_1)
            r = self.client.get(path=self.from_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=4)
            self.assertNotEqual(first={like.from_user for like in r.context['object_list']}, second=from_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2=self.from_likes)

        def test_user_can_see_mutual_likes(self):
            r = self.client.get(path=self.mutual_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=2)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.mutual_likes)
            self.assertSetEqual(set1={like.from_user for like in r.context['object_list']}, set2={self.user_1})
            mutual_likes = set(self.mutual_likes)
            UserLike.objects.add_like(from_user=self.user_1, to_user=self.user_4)
            UserLike.objects.add_like(from_user=self.user_4, to_user=self.user_1)
            mutual_likes.add(self.user_4)
            self.assertEqual(first=UserLike.objects.count(), second=11)
            r = self.client.get(path=self.mutual_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=3)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.mutual_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=mutual_likes)
            self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_2)
            sleep(0.01)
            self.user_4.profile.update_last_visit()
            r = self.client.get(path=self.mutual_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=3)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=self.mutual_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=mutual_likes)
            self.assertEqual(first=r.context['object_list'][0].to_user, second=self.user_4)
            Block.objects.block(blocker=self.user_4, blocked=self.user_1)
            r = self.client.get(path=self.mutual_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=2)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=mutual_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.mutual_likes)
            Block.objects.unblock(blocker=self.user_4, blocked=self.user_1)
            r = self.client.get(path=self.mutual_url)
            self.assertEqual(first=r.status_code, second=200)
            self.assertEqual(first=len(r.context['object_list']), second=2)
            self.assertNotEqual(first={like.to_user for like in r.context['object_list']}, second=mutual_likes)
            self.assertSetEqual(set1={like.to_user for like in r.context['object_list']}, set2=self.mutual_likes)

        def test_like_list_views_titles(self):
            self._test_all_like_list_views_contain_strings(strings=[
                self._list_to_title_dict_by_gender[User.GENDER_OTHER_STRING],
                self._list_from_title_dict_by_gender[User.GENDER_OTHER_STRING],
                self._list_mutual_title,
            ])
            user_99 = User.objects.get(slug="user-99")
            user_97 = User.objects.get(slug="user-97")
            gender_count_dict = {
                User.GENDER_FEMALE_STRING: 0,
                User.GENDER_MALE_STRING: 0,
                User.GENDER_OTHER_STRING: 0,
            }
            for gender in User.GENDER_VALID_VALUES:
                for user in [self.user_3, self.user_2, self.user_5, User.objects.get(slug="user-98"), User.objects.get(slug="user-96")]:
                    user.gender = gender
                    user.save_user_and_profile()
                if (gender == User.GENDER_OTHER):
                    two_genders = [random.choice([User.GENDER_FEMALE, User.GENDER_MALE]), gender]
                else:
                    two_genders = [User.GENDER_FEMALE, User.GENDER_MALE]
                for gender_to_match in [User.GENDER_VALID_VALUES, [gender], two_genders]:
                    self.user_1.speedy_match_profile.gender_to_match = gender_to_match
                    self.user_1.save_user_and_profile()
                    for gender_99 in User.GENDER_VALID_VALUES:
                        for gender_97 in User.GENDER_VALID_VALUES:
                            user_99.gender = gender_99
                            user_97.gender = gender_97
                            user_99.save_user_and_profile()
                            user_97.save_user_and_profile()
                            if ((gender in [User.GENDER_FEMALE, User.GENDER_MALE]) and (gender_to_match == [gender]) and (len({user_99.gender, user_97.gender, self.user_2.gender}) == 1)):
                                gender_string = self.user_2.get_gender()
                                self.assertIn(member=gender_string, container=[User.GENDER_FEMALE_STRING, User.GENDER_MALE_STRING])
                                self.assertEqual(first=gender_string, second=User.GENDERS_DICT.get(gender))
                            else:
                                gender_string = User.GENDER_OTHER_STRING
                                self.assertEqual(first=gender_string, second=User.GENDERS_DICT.get(User.GENDER_OTHER))
                            self._test_all_like_list_views_contain_strings(strings=[
                                self._list_to_title_dict_by_gender[gender_string],
                                self._list_from_title_dict_by_gender[gender_string],
                                self._list_mutual_title,
                            ])
                            gender_count_dict[gender_string] += 1
            expected_gender_count_dict = {
                User.GENDER_FEMALE_STRING: 1,
                User.GENDER_MALE_STRING: 1,
                User.GENDER_OTHER_STRING: 79,
            }
            self.assertDictEqual(d1=gender_count_dict, d2=expected_gender_count_dict)

        def test_like_list_views_titles_with_empty_lists(self):
            for user in User.objects.all().exclude(pk=self.user_1.pk):
                user.delete()
            self.user_2 = None
            self.user_3 = None
            self.user_4 = None
            self.user_5 = None
            self.to_likes = set()
            self.from_likes = set()
            self.mutual_likes = set()
            self.assertEqual(first=UserLike.objects.count(), second=0)
            self._test_all_like_list_views_contain_strings(strings=[
                self._list_to_title_dict_by_gender[User.GENDER_OTHER_STRING],
                self._list_from_title_dict_by_gender[User.GENDER_OTHER_STRING],
                self._list_mutual_title,
            ])
            gender_count_dict = {
                User.GENDER_FEMALE_STRING: 0,
                User.GENDER_MALE_STRING: 0,
                User.GENDER_OTHER_STRING: 0,
            }
            for gender in User.GENDER_VALID_VALUES:
                if (gender == User.GENDER_OTHER):
                    two_genders = [random.choice([User.GENDER_FEMALE, User.GENDER_MALE]), gender]
                else:
                    two_genders = [User.GENDER_FEMALE, User.GENDER_MALE]
                for gender_to_match in [User.GENDER_VALID_VALUES, [gender], two_genders]:
                    self.user_1.speedy_match_profile.gender_to_match = gender_to_match
                    self.user_1.save_user_and_profile()
                    if ((gender in [User.GENDER_FEMALE, User.GENDER_MALE]) and (gender_to_match == [gender])):
                        gender_string = User.GENDERS_DICT.get(gender)
                        self.assertIn(member=gender_string, container=[User.GENDER_FEMALE_STRING, User.GENDER_MALE_STRING])
                    else:
                        gender_string = User.GENDER_OTHER_STRING
                        self.assertEqual(first=gender_string, second=User.GENDERS_DICT.get(User.GENDER_OTHER))
                    self._test_all_like_list_views_contain_strings(strings=[
                        self._list_to_title_dict_by_gender[gender_string],
                        self._list_from_title_dict_by_gender[gender_string],
                        self._list_mutual_title,
                    ])
                    gender_count_dict[gender_string] += 1
            expected_gender_count_dict = {
                User.GENDER_FEMALE_STRING: 1,
                User.GENDER_MALE_STRING: 1,
                User.GENDER_OTHER_STRING: 7,
            }
            self.assertDictEqual(d1=gender_count_dict, d2=expected_gender_count_dict)

        def test_cannot_delete_users_with_queryset_delete(self):
            with self.assertRaises(NotImplementedError) as cm:
                User.objects.all().exclude(pk=self.user_1.pk).delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
            with self.assertRaises(NotImplementedError) as cm:
                User.objects.delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
            with self.assertRaises(NotImplementedError) as cm:
                User.objects.all().delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
            with self.assertRaises(NotImplementedError) as cm:
                User.objects.all().filter(pk=1).delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")

        def test_cannot_delete_likes_with_queryset_delete(self):
            with self.assertRaises(NotImplementedError) as cm:
                UserLike.objects.delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
            with self.assertRaises(NotImplementedError) as cm:
                UserLike.objects.all().delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
            with self.assertRaises(NotImplementedError) as cm:
                UserLike.objects.filter(from_user=self.user_1, to_user=self.user_3).delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
            with self.assertRaises(NotImplementedError) as cm:
                UserLike.objects.all().exclude(pk=2).delete()
            self.assertEqual(first=str(cm.exception), second="delete is not implemented.")
Ejemplo n.º 4
0
    class LikeViewTestCaseMixin(SpeedyCoreAccountsModelsMixin, SpeedyMatchLikesLanguageMixin):
        def set_up(self):
            super().set_up()
            self.user_1 = ActiveUserFactory()
            self.user_2 = ActiveUserFactory()
            self.page_url = '/{}/likes/like/'.format(self.user_2.slug)

        def test_user_can_like_and_other_user_gets_notified_on_like(self):
            self.assert_models_count(
                entity_count=2,
                user_count=2,
                user_email_address_count=2,
                confirmed_email_address_count=2,
                unconfirmed_email_address_count=0,
            )
            self.user_1 = User.objects.get(pk=self.user_1.pk)
            self.assert_user_email_addresses_count(
                user=self.user_1,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.user_2 = User.objects.get(pk=self.user_2.pk)
            self.assert_user_email_addresses_count(
                user=self.user_2,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.assertEqual(first=len(mail.outbox), second=0)
            self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON)
            self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON)
            self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD)
            self.assertEqual(first=UserLike.objects.count(), second=0)
            r = self.client.post(path=self.page_url)
            self.assertRedirects(response=r, expected_url=self.user_2.get_absolute_url(), status_code=302, target_status_code=200)
            self.assertEqual(first=UserLike.objects.count(), second=1)
            like = UserLike.objects.first()
            self.assertEqual(first=like.from_user.id, second=self.user_1.id)
            self.assertEqual(first=like.to_user.id, second=self.user_2.id)
            self.assertEqual(first=len(mail.outbox), second=1)
            self.assertEqual(first=mail.outbox[0].subject, second=self._someone_likes_you_on_speedy_match_subject_dict_by_gender[self.user_1.get_gender()])

        def test_user_can_like_and_other_user_doesnt_get_notified_on_like(self):
            self.assert_models_count(
                entity_count=2,
                user_count=2,
                user_email_address_count=2,
                confirmed_email_address_count=2,
                unconfirmed_email_address_count=0,
            )
            self.user_1 = User.objects.get(pk=self.user_1.pk)
            self.assert_user_email_addresses_count(
                user=self.user_1,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.user_2 = User.objects.get(pk=self.user_2.pk)
            self.assert_user_email_addresses_count(
                user=self.user_2,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.assertEqual(first=len(mail.outbox), second=0)
            self.user_2.speedy_match_profile.notify_on_like = User.NOTIFICATIONS_OFF
            self.user_2.save_user_and_profile()
            self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON)
            self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_OFF)
            self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD)
            self.assertEqual(first=UserLike.objects.count(), second=0)
            r = self.client.post(path=self.page_url)
            self.assertRedirects(response=r, expected_url=self.user_2.get_absolute_url(), status_code=302, target_status_code=200)
            self.assertEqual(first=UserLike.objects.count(), second=1)
            like = UserLike.objects.first()
            self.assertEqual(first=like.from_user.id, second=self.user_1.id)
            self.assertEqual(first=like.to_user.id, second=self.user_2.id)
            self.assertEqual(first=len(mail.outbox), second=0)

        def test_user_cannot_like_self(self):
            self.client.login(username=self.user_2.slug, password=tests_settings.USER_PASSWORD)
            self.assertEqual(first=UserLike.objects.count(), second=0)
            r = self.client.post(path=self.page_url)
            self.assertEqual(first=r.status_code, second=403)
            self.assertEqual(first=UserLike.objects.count(), second=0)

        def test_user_cannot_like_other_user_if_blocked(self):
            Block.objects.block(blocker=self.user_1, blocked=self.user_2)
            self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD)
            self.assertEqual(first=UserLike.objects.count(), second=0)
            r = self.client.post(path=self.page_url)
            self.assertEqual(first=r.status_code, second=403)
            self.assertEqual(first=UserLike.objects.count(), second=0)

        def test_user_cannot_like_other_user_if_blocking(self):
            Block.objects.block(blocker=self.user_2, blocked=self.user_1)
            self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD)
            self.assertEqual(first=UserLike.objects.count(), second=0)
            r = self.client.post(path=self.page_url)
            self.assertEqual(first=r.status_code, second=403)
            self.assertEqual(first=UserLike.objects.count(), second=0)

        def test_user_cannot_like_twice(self):
            self.client.login(username=self.user_1.slug, password=tests_settings.USER_PASSWORD)
            self.assertEqual(first=UserLike.objects.count(), second=0)
            r = self.client.post(path=self.page_url)
            self.assertRedirects(response=r, expected_url=self.user_2.get_absolute_url(), status_code=302, target_status_code=200)
            self.assertEqual(first=UserLike.objects.count(), second=1)
            like = UserLike.objects.first()
            self.assertEqual(first=like.from_user.id, second=self.user_1.id)
            self.assertEqual(first=like.to_user.id, second=self.user_2.id)
            r = self.client.post(path=self.page_url)
            self.assertEqual(first=r.status_code, second=403)
            self.assertEqual(first=UserLike.objects.count(), second=1)
Ejemplo n.º 5
0
    class LikeNotificationsTestCaseMixin(SpeedyCoreAccountsModelsMixin, SpeedyMatchLikesLanguageMixin):
        def set_up(self):
            super().set_up()
            self.user_1 = ActiveUserFactory()
            self.user_2 = ActiveUserFactory()

        def test_user_gets_notified_on_like(self):
            self.assert_models_count(
                entity_count=2,
                user_count=2,
                user_email_address_count=2,
                confirmed_email_address_count=2,
                unconfirmed_email_address_count=0,
            )
            self.user_1 = User.objects.get(pk=self.user_1.pk)
            self.assert_user_email_addresses_count(
                user=self.user_1,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.user_2 = User.objects.get(pk=self.user_2.pk)
            self.assert_user_email_addresses_count(
                user=self.user_2,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.assertEqual(first=len(mail.outbox), second=0)
            self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON)
            self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON)
            UserLike.objects.add_like(from_user=self.user_2, to_user=self.user_1)
            self.assertEqual(first=len(mail.outbox), second=1)
            self.assertEqual(first=mail.outbox[0].subject, second=self._someone_likes_you_on_speedy_match_subject_dict_by_gender[self.user_2.get_gender()])

        def test_user_doesnt_get_notified_on_like(self):
            self.assert_models_count(
                entity_count=2,
                user_count=2,
                user_email_address_count=2,
                confirmed_email_address_count=2,
                unconfirmed_email_address_count=0,
            )
            self.user_1 = User.objects.get(pk=self.user_1.pk)
            self.assert_user_email_addresses_count(
                user=self.user_1,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.user_2 = User.objects.get(pk=self.user_2.pk)
            self.assert_user_email_addresses_count(
                user=self.user_2,
                user_email_addresses_count=1,
                user_primary_email_addresses_count=1,
                user_confirmed_email_addresses_count=1,
                user_unconfirmed_email_addresses_count=0,
            )
            self.assertEqual(first=len(mail.outbox), second=0)
            self.user_1.speedy_match_profile.notify_on_like = User.NOTIFICATIONS_OFF
            self.user_1.save_user_and_profile()
            self.assertEqual(first=self.user_1.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_OFF)
            self.assertEqual(first=self.user_2.speedy_match_profile.notify_on_like, second=User.NOTIFICATIONS_ON)
            UserLike.objects.add_like(from_user=self.user_2, to_user=self.user_1)
            self.assertEqual(first=len(mail.outbox), second=0)
Ejemplo n.º 6
0
class AcceptFriendRequestViewTestCaseMixin(SpeedyCoreFriendsLanguageMixin):
    def set_up(self):
        super().set_up()
        self.first_user = ActiveUserFactory()
        self.second_user = ActiveUserFactory()
        friendship_request = Friend.objects.add_friend(
            from_user=self.first_user, to_user=self.second_user)
        self.page_url = '/{}/friends/request/accept/{}/'.format(
            self.second_user.slug, friendship_request.pk)
        self.second_user_friends_list_url = '/{}/friends/'.format(
            self.second_user.slug)

    def test_visitor_cannot_accept_friend_request(self):
        self.client.logout()
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url='/login/?next={}'.format(
                                 self.page_url))
        self.assertIsNone(obj=r.context)

    def test_user_cannot_accept_friend_request_he_sent_another_user(self):
        self.client.login(username=self.first_user.slug,
                          password=tests_settings.USER_PASSWORD)
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url='/login/?next={}'.format(
                                 self.page_url))
        self.assertIsNone(obj=r.context)

    @unittest.expectedFailure  # ~~~~ TODO: fix this test!
    def test_user_that_has_received_request_can_accept_it(self):
        self.client.login(username=self.second_user.slug,
                          password=tests_settings.USER_PASSWORD)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url=self.second_user_friends_list_url)
        self.assertTrue(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user_friends_list_url)
        self.assertListEqual(
            list1=list(map(str, r.context['messages'])),
            list2=[self._friend_request_accepted_success_message])  ###### TODO

    @unittest.expectedFailure  # ~~~~ TODO: fix this test!
    @override_settings(
        USER_SETTINGS=get_django_settings_class_with_override_settings(
            django_settings_class=django_settings.USER_SETTINGS,
            MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
            OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
    def test_user_that_has_received_request_can_accept_it_if_not_maximum(self):
        # ~~~~ TODO: remove all the following lines.
        self._1___set_up(
            django_settings=django_settings)  #### ~~~~ TODO: remove this line!

        # print("test_user_that_has_received_request_can_accept_it_if_not_maximum: django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED", django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # print("test_user_that_has_received_request_can_accept_it_if_not_maximum: User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED", User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # ~~~~ TODO: remove all the above lines.

        self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                         second=4)
        for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED - 1):
            Friend.objects.add_friend(from_user=self.second_user,
                                      to_user=ActiveUserFactory()).accept()
        self.client.login(username=self.second_user.slug,
                          password=tests_settings.USER_PASSWORD)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url=self.second_user_friends_list_url)
        self.assertTrue(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user_friends_list_url)
        self.assertListEqual(
            list1=list(map(str, r.context['messages'])),
            list2=[self._friend_request_accepted_success_message])  ###### TODO

    @override_settings(
        USER_SETTINGS=get_django_settings_class_with_override_settings(
            django_settings_class=django_settings.USER_SETTINGS,
            MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
            OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
    def test_user_that_has_received_request_cannot_accept_it_if_maximum(self):
        # ~~~~ TODO: remove all the following lines.
        self._1___set_up(
            django_settings=django_settings)  #### ~~~~ TODO: remove this line!

        # print("test_user_that_has_received_request_cannot_accept_it_if_maximum: django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED", django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # print("test_user_that_has_received_request_cannot_accept_it_if_maximum: User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED", User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # ~~~~ TODO: remove all the above lines.

        self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                         second=4)
        for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED):
            Friend.objects.add_friend(from_user=self.second_user,
                                      to_user=ActiveUserFactory()).accept()
        self.client.login(username=self.second_user.slug,
                          password=tests_settings.USER_PASSWORD)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url=self.second_user_friends_list_url,
                             fetch_redirect_response=False)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.get(path=self.second_user_friends_list_url)
        self.assertListEqual(
            list1=list(map(str, r.context['messages'])),
            list2=[
                self.
                _you_already_have_friends_error_message_by_user_number_of_friends_and_gender(
                    user_number_of_friends=4,
                    gender=self.second_user.get_gender())
            ])  #####-1 TODO
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))

    @unittest.expectedFailure  # ~~~~ TODO: fix this test!
    @override_settings(
        USER_SETTINGS=get_django_settings_class_with_override_settings(
            django_settings_class=django_settings.USER_SETTINGS,
            MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
            OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
    def test_user_that_has_received_request_can_accept_it_if_other_not_maximum(
            self):
        # ~~~~ TODO: remove all the following lines.
        self._1___set_up(
            django_settings=django_settings)  #### ~~~~ TODO: remove this line!

        # print("test_user_that_has_received_request_can_accept_it_if_other_not_maximum: django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED", django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # print("test_user_that_has_received_request_can_accept_it_if_other_not_maximum: User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED", User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # ~~~~ TODO: remove all the above lines.

        self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                         second=4)
        for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED - 1):
            Friend.objects.add_friend(from_user=self.first_user,
                                      to_user=ActiveUserFactory()).accept()
        self.client.login(username=self.second_user.slug,
                          password=tests_settings.USER_PASSWORD)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url=self.second_user_friends_list_url)
        self.assertTrue(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user_friends_list_url)
        self.assertListEqual(
            list1=list(map(str, r.context['messages'])),
            list2=[self._friend_request_accepted_success_message])  ###### TODO

    @override_settings(
        USER_SETTINGS=get_django_settings_class_with_override_settings(
            django_settings_class=django_settings.USER_SETTINGS,
            MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.
            OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
    def test_user_that_has_received_request_cannot_accept_it_if_other_maximum(
            self):
        # ~~~~ TODO: remove all the following lines.
        self._1___set_up(
            django_settings=django_settings)  #### ~~~~ TODO: remove this line!

        # print("test_user_that_has_received_request_cannot_accept_it_if_other_maximum: django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED", django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # print("test_user_that_has_received_request_cannot_accept_it_if_other_maximum: User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED", User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # ~~~~ TODO: remove all the above lines.

        self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED,
                         second=4)
        for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED):
            Friend.objects.add_friend(from_user=self.first_user,
                                      to_user=ActiveUserFactory()).accept()
        self.client.login(username=self.second_user.slug,
                          password=tests_settings.USER_PASSWORD)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r,
                             expected_url=self.second_user_friends_list_url,
                             fetch_redirect_response=False)
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
        r = self.client.get(path=self.second_user_friends_list_url)
        self.assertListEqual(
            list1=list(map(str, r.context['messages'])),
            list2=[
                self.
                _this_user_already_has_friends_error_message_by_other_user_number_of_friends_and_gender(
                    other_user_number_of_friends=4,
                    gender=self.first_user.get_gender())
            ])  #####-1 TODO
        self.assertFalse(expr=Friend.objects.are_friends(
            user1=self.first_user, user2=self.second_user))
Ejemplo n.º 7
0
class UserFriendRequestViewTestCaseMixin(SpeedyCoreFriendsLanguageMixin):
    def set_up(self):
        super().set_up()
        self.first_user = ActiveUserFactory()
        self.second_user = ActiveUserFactory()
        self.page_url = '/{}/friends/request/'.format(self.second_user.slug)
        self.same_user_page_url = '/{}/friends/request/'.format(self.first_user.slug)
        self.client.login(username=self.first_user.slug, password=tests_settings.USER_PASSWORD)

    def test_visitor_cannot_send_friend_request(self):
        self.client.logout()
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url='/login/?next={}'.format(self.page_url))
        self.assertIsNone(obj=r.context)

    @unittest.expectedFailure # ~~~~ TODO: fix this test!
    def test_user_can_send_friend_request(self):
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url=self.second_user.get_absolute_url())
        self.assertEqual(first=self.second_user.friendship_requests_received.count(), second=1)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=1)
        friendship_request = self.second_user.friendship_requests_received.first()
        self.assertEqual(first=friendship_request.from_user, second=self.first_user)
        self.assertEqual(first=friendship_request.to_user, second=self.second_user)
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user.get_absolute_url())
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=[self._friend_request_sent_success_message]) ###### TODO

    @unittest.expectedFailure # ~~~~ TODO: fix this test!
    def test_user_cannot_send_friend_request_twice(self):
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url=self.second_user.get_absolute_url())
        self.assertEqual(first=self.second_user.friendship_requests_received.count(), second=1)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=1)
        self.assertIsNone(obj=r.context)
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url=self.second_user.get_absolute_url())
        self.assertEqual(first=self.second_user.friendship_requests_received.count(), second=1)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=1)
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user.get_absolute_url())
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=[self._friendship_already_requested_error_message]) ###### TODO
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=["Friendship already requested"])#### # ~~~~ TODO: remove this line!

    @unittest.expectedFailure # ~~~~ TODO: fix this test!
    def test_user_cannot_send_friend_request_to_a_friend(self):
        self.assertFalse(expr=Friend.objects.are_friends(user1=self.first_user, user2=self.second_user))
        Friend.objects.add_friend(from_user=self.first_user, to_user=self.second_user).accept()
        self.assertTrue(expr=Friend.objects.are_friends(user1=self.first_user, user2=self.second_user))
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url=self.second_user.get_absolute_url())
        self.assertEqual(first=self.first_user.friendship_requests_received.count(), second=0)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=0)
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.first_user.get_absolute_url())
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=[self._users_are_already_friends_error_message]) ###### TODO
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=["Users are already friends"])#### # ~~~~ TODO: remove this line!

    @unittest.expectedFailure # ~~~~ TODO: fix this test!
    def test_user_cannot_send_friend_request_to_himself(self):
        r = self.client.post(path=self.same_user_page_url)
        self.assertRedirects(response=r, expected_url=self.first_user.get_absolute_url())
        self.assertEqual(first=self.first_user.friendship_requests_received.count(), second=0)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=0)
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.first_user.get_absolute_url())
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=[self._users_cannot_be_friends_with_themselves_error_message]) ###### TODO
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=["Users cannot be friends with themselves"])#### # ~~~~ TODO: remove this line!

    @unittest.expectedFailure # ~~~~ TODO: fix this test!
    @override_settings(USER_SETTINGS=get_django_settings_class_with_override_settings(django_settings_class=django_settings.USER_SETTINGS, MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
    def test_user_can_send_friend_request_if_not_maximum(self):
        # ~~~~ TODO: remove all the following lines.
        self._1___set_up(django_settings=django_settings) #### ~~~~ TODO: remove this line

        # print("test_user_can_send_friend_request_if_not_maximum: django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED", django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # print("test_user_can_send_friend_request_if_not_maximum: User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED", User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # ~~~~ TODO: remove all the above lines.

        self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED, second=4)
        for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED - 1):
            Friend.objects.add_friend(from_user=self.first_user, to_user=ActiveUserFactory()).accept()
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url=self.second_user.get_absolute_url())
        self.assertEqual(first=self.second_user.friendship_requests_received.count(), second=1)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=1)
        friendship_request = self.second_user.friendship_requests_received.first()
        self.assertEqual(first=friendship_request.from_user, second=self.first_user)
        self.assertEqual(first=friendship_request.to_user, second=self.second_user)
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user.get_absolute_url())
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=[self._friend_request_sent_success_message]) ###### TODO

    @override_settings(USER_SETTINGS=get_django_settings_class_with_override_settings(django_settings_class=django_settings.USER_SETTINGS, MAX_NUMBER_OF_FRIENDS_ALLOWED=tests_settings.OVERRIDE_USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED))
    def test_user_cannot_send_friend_request_if_maximum(self):
        # ~~~~ TODO: remove all the following lines.
        self._1___set_up(django_settings=django_settings) #### ~~~~ TODO: remove this line

        # print("test_user_cannot_send_friend_request_if_maximum: django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED", django_settings.USER_SETTINGS.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # print("test_user_cannot_send_friend_request_if_maximum: User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED", User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED)####
        # ~~~~ TODO: remove all the above lines.

        self.assertEqual(first=User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED, second=4)
        for i in range(User.settings.MAX_NUMBER_OF_FRIENDS_ALLOWED):
            Friend.objects.add_friend(from_user=self.first_user, to_user=ActiveUserFactory()).accept()
        r = self.client.post(path=self.page_url)
        self.assertRedirects(response=r, expected_url=self.second_user.get_absolute_url(), fetch_redirect_response=False)
        self.assertEqual(first=self.second_user.friendship_requests_received.count(), second=0)
        self.assertEqual(first=self.first_user.friendship_requests_sent.count(), second=0)
        self.assertIsNone(obj=r.context)
        r = self.client.get(path=self.second_user.get_absolute_url())
        self.assertListEqual(list1=list(map(str, r.context['messages'])), list2=[self._you_already_have_friends_error_message_by_user_number_of_friends_and_gender(user_number_of_friends=4, gender=self.first_user.get_gender())]) #####-1 TODO