示例#1
0
    def test_follow(self):
        url = FOLLOW_URL.format(self.alex.id)

        # need to login to follow others
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # need to use post to follow
        response = self.bob_client.get(url)
        self.assertEqual(response.status_code, 405)
        # you cannot follow yourself
        response = self.alex_client.post(url)
        self.assertEqual(response.status_code, 400)
        # successful follow
        response = self.bob_client.post(url)
        self.assertEqual(response.status_code, 201)
        # self.assertEqual('user' in response.data, True)
        self.assertEqual('created_at' in response.data, True)
        self.assertEqual(response.data['user']['id'], self.alex.id)
        self.assertEqual(response.data['user']['username'], self.alex.username)

        # duplicate follow silent process
        response = self.bob_client.post(url)
        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.data['duplicate'], True)

        # follow back will create new records
        before_count = FriendshipService.get_following_count(self.alex.id)
        response = self.alex_client.post(FOLLOW_URL.format(self.bob.id))
        self.assertEqual(response.status_code, 201)
        after_count = FriendshipService.get_following_count(self.alex.id)
        self.assertEqual(after_count, before_count + 1)
示例#2
0
    def test_unfollow(self):
        url = UNFOLLOW_URL.format(self.alex.id)

        # need to login to unfollow others
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # need to use post to unfollow
        response = self.bob_client.get(url)
        self.assertEqual(response.status_code, 405)
        # you cannot unfollow yourself
        response = self.alex_client.post(url)
        self.assertEqual(response.status_code, 400)
        # successful unfollow
        self.create_friendship(from_user=self.bob, to_user=self.alex)
        before_count = FriendshipService.get_following_count(self.bob.id)
        response = self.bob_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 1)
        after_count = FriendshipService.get_following_count(self.bob.id)
        self.assertEqual(after_count, before_count - 1)
        # unfollow a person that you haven't followed, silent process
        before_count = FriendshipService.get_following_count(self.alex.id)
        response = self.bob_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 0)
        after_count = FriendshipService.get_following_count(self.alex.id)
        self.assertEqual(before_count, after_count)
示例#3
0
 def _test_follow(self):
     self._create_dummy_friendship()
     # only allow POST method
     response = self.user2_client.get(FOLLOW_URL.format(self.user3.id))
     self.assertEqual(response.status_code, 405)
     # anonymous client not allowed
     response = self.anonymous_client.post(FOLLOW_URL.format(self.user3.id))
     self.assertEqual(response.status_code, 403)
     # follow non-existed user
     # user_id 999 not exists
     response = self.user2_client.post(FOLLOW_URL.format(999))
     self.assertEqual(response.status_code, 404)
     # not support follow myself
     response = self.user2_client.post(FOLLOW_URL.format(self.user2.id))
     self.assertEqual(response.status_code, 201)
     # follow
     before_count = FriendshipService.get_following_count(self.user2.id)
     response = self.user2_client.post(FOLLOW_URL.format(self.user3.id))
     self.assertEqual(response.status_code, 201)
     self.assertEqual(response.data['success'], True)
     self.assertEqual(response.data['friendship']['from_user_id'],
                      self.user2.id)
     self.assertEqual(response.data['friendship']['to_user_id'],
                      self.user3.id)
     after_count = FriendshipService.get_following_count(self.user2.id)
     self.assertEqual(before_count + 1, after_count)
     # re-follow throws error
     before_count = FriendshipService.get_following_count(self.user2.id)
     response = self.user2_client.post(FOLLOW_URL.format(self.user3.id))
     self.assertEqual(response.status_code, 201)
     self.assertEqual(response.data['success'], True)
     self.assertEqual(response.data['duplicated'], True)
     after_count = FriendshipService.get_following_count(self.user2.id)
     self.assertEqual(before_count, after_count)
示例#4
0
 def _test_unfollow(self):
     self._create_dummy_friendship()
     # only allow POST method
     response = self.user2_client.get(UNFOLLOW_URL.format(self.user3.id))
     self.assertEqual(response.status_code, 405)
     # anonymous client not allowed
     response = self.anonymous_client.post(
         UNFOLLOW_URL.format(self.user3.id))
     self.assertEqual(response.status_code, 403)
     # unfollow non-existed user, user_id 999 not exists
     response = self.user2_client.post(UNFOLLOW_URL.format(999))
     self.assertEqual(response.status_code, 404)
     # not support unfollow myself
     response = self.user2_client.post(UNFOLLOW_URL.format(self.user2.id))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.data['success'], False)
     self.assertEqual(response.data['message'],
                      "You cannot unfollow yourself.")
     # unfollow
     before_count = FriendshipService.get_following_count(self.user2.id)
     response = self.user2_client.post(UNFOLLOW_URL.format(self.user1.id))
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data['success'], True)
     self.assertEqual(int(response.data['deleted']), 1)
     after_count = FriendshipService.get_following_count(self.user2.id)
     self.assertEqual(before_count - 1, after_count)
     # re-unfollow
     before_count = FriendshipService.get_following_count(self.user2.id)
     response = self.user2_client.post(UNFOLLOW_URL.format(self.user1.id))
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.data, 'Friendship not exists')
     after_count = FriendshipService.get_following_count(self.user2.id)
     self.assertEqual(before_count, after_count)
示例#5
0
    def test_follow(self):
        url = FOLLOW_URL.format(self.linghu.id)

        # 需要登录才能 follow 别人
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # 要用 get 来 follow
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)
        # 不可以 follow 自己
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)

        # follow 成功
        response = self.dongxie_client.post(url)
        # self.assertEqual(response.status_code, 201)
        # self.assertEqual('created_at' in response.data, True)
        # self.assertEqual('user' in response.data, True)
        # self.assertEqual(response.data['user']['id'], self.linghu.id)
        # self.assertEqual(response.data['user']['username'], self.linghu.username)

        # 重复 follow 会 400
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 400)

        # 反向关注会创建新的数据
        before_count = FriendshipService.get_following_count(self.linghu.id)
        response = self.linghu_client.post(FOLLOW_URL.format(self.dongxie.id))
        self.assertEqual(response.status_code, 201)
        after_count = FriendshipService.get_following_count(self.linghu.id)
        self.assertEqual(after_count, before_count + 1)
示例#6
0
    def test_unfollow(self):
        url = UNFOLLOW_URL.format(self.linghu.id)

        # 需要登录才能 unfollow 别人
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # 不能用 get 来 unfollow 别人
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)
        # 不能用 unfollow 自己
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)

        # unfollow 成功
        self.create_friendship(self.dongxie, self.linghu)
        before_count = FriendshipService.get_following_count(self.dongxie.id)
        response = self.dongxie_client.post(url)
        after_count = FriendshipService.get_following_count(self.dongxie.id)
        self.assertEqual(response.status_code, 204)
        self.assertEqual(response.data['deleted'], 1)
        self.assertEqual(after_count, before_count - 1)

        # 未 follow 的情况下 unfollow 静默处理
        before_count = FriendshipService.get_following_count(self.dongxie.id)
        response = self.dongxie_client.post(url)
        after_count = FriendshipService.get_following_count(self.dongxie.id)
        self.assertEqual(response.status_code, 204)
        self.assertEqual(response.data['deleted'], 0)
        self.assertEqual(after_count, before_count)
    def test_follow(self):
        url = FOLLOW_URL.format(self.ray.id)

        # login to follow others
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # use GET to follow
        response = self.lux_client.get(url)
        self.assertEqual(response.status_code, 405)
        # can't follow yourself
        response = self.ray_client.post(url)
        self.assertEqual(response.status_code, 400)
        # follow successfully
        response = self.lux_client.post(url)
        self.assertEqual(response.status_code, 201)
        # repeating follow is muted instead of throwing exceptions
        response = self.lux_client.post(url)
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data['duplicate'], True)
        # reverse follow will create new data
        before_count = FriendshipService.get_following_count(self.ray.id)
        response = self.ray_client.post(FOLLOW_URL.format(self.lux.id))
        self.assertEqual(response.status_code, 201)
        after_count = FriendshipService.get_following_count(self.ray.id)
        self.assertEqual(after_count, before_count + 1)
    def test_unfollow(self):
        url = UNFOLLOW_URL.format(self.ray.id)

        # log in to unfollow others
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # can't use get to unfollow others
        response = self.lux_client.get(url)
        self.assertEqual(response.status_code, 405)
        # can't unfollow yourself
        response = self.ray_client.post(url)
        self.assertEqual(response.status_code, 400)
        # unfollow successfully
        self.create_friendship(from_user=self.lux, to_user=self.ray)
        before_count = FriendshipService.get_following_count(self.lux.id)
        response = self.lux_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 1)
        after_count = FriendshipService.get_following_count(self.lux.id)
        self.assertEqual(after_count, before_count - 1)
        # If not following, unfollow request will be muted
        before_count = FriendshipService.get_following_count(self.lux.id)
        response = self.lux_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 0)
        after_count = FriendshipService.get_following_count(self.lux.id)
        self.assertEqual(before_count, after_count)
示例#9
0
    def test_follow(self):
        url = FOLLOW_URL.format(self.linghu.id)

        # 需要登录才能 follow 别人
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # 要用 get 来 follow
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)
        # 不可以 follow 自己
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)
        # follow 成功
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 201)
        # 重复 follow 静默成功
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.data['success'], False)
        # 反向关注会创建新的数据
        before_count = FriendshipService.get_following_count(self.linghu.id)
        response = self.linghu_client.post(FOLLOW_URL.format(self.dongxie.id))
        self.assertEqual(response.status_code, 201)
        after_count = FriendshipService.get_following_count(self.linghu.id)
        self.assertEqual(after_count, before_count + 1)
示例#10
0
    def test_follow(self):
        url = FOLLOW_URL.format(self.linghu.id)

        # cannot follow without login
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # fail to follow through get
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)
        # cannot self-follow
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)
        # success
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 201)
        # duplicate follow
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data['duplicate'], True)
        # mutual follow
        count = FriendshipService.get_following_count(self.linghu.id)
        response = self.linghu_client.post(FOLLOW_URL.format(self.dongxie.id))
        self.assertEqual(response.status_code, 201)
        self.assertEqual(FriendshipService.get_following_count(self.linghu.id),
                         count + 1)
示例#11
0
    def test_unfollow(self):
        url = UNFOLLOW_URL.format(self.linghu.id)

        # need login first, then unfollow others
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # cannot use get to unfollow
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)
        # cannot unfollow yourself
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)
        # unfollow success
        self.create_friendship(from_user=self.dongxie, to_user=self.linghu)
        before_count = FriendshipService.get_following_count(self.dongxie.id)
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 1)
        after_count = FriendshipService.get_following_count(self.dongxie.id)
        self.assertEqual(after_count, before_count - 1)
        # unfollow, then unfollow,
        before_count = FriendshipService.get_following_count(self.dongxie.id)
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 0)
        after_count = FriendshipService.get_following_count(self.dongxie.id)
        self.assertEqual(before_count, after_count)
示例#12
0
    def test_follow(self):
        url = FOLLOW_URL.format(self.linghu.id)

        # need login first, then follow others
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)
        # use get to follow
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)
        # cannot follow yourself
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)
        # follow success
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 201)
        #self.assertEqual('created_at' in response.data, True)
        #self.assertEqual('user' in response.data, True)
        #self.assertEqual(response.data['user']['id'], self.linghu.id)
        #self.assertEqual(response.data['user']['username'], self.linghu.username)
        # dup follow, silent success
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data['duplicate'], True)
        # follow reversely will create new relation
        before_count = FriendshipService.get_following_count(self.linghu.id)
        response = self.linghu_client.post(FOLLOW_URL.format(self.dongxie.id))
        self.assertEqual(response.status_code, 201)
        after_count = FriendshipService.get_following_count(self.linghu.id)
        self.assertEqual(after_count, before_count + 1)
示例#13
0
    def test_unfollow(self):
        url = UNFOLLOW_URL.format(self.linghu.id)

        # case 1: follow without login
        response = self.anonymous_client.post(url)
        self.assertEqual(response.status_code, 403)

        # case 2: use get to follow
        response = self.dongxie_client.get(url)
        self.assertEqual(response.status_code, 405)

        # case 3: self-unfollow
        response = self.linghu_client.post(url)
        self.assertEqual(response.status_code, 400)

        # case 4: success
        self.create_friendship(self.dongxie, self.linghu)
        count = FriendshipService.get_following_count(
            from_user_id=self.dongxie.id)
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 1)
        self.assertEqual(
            FriendshipService.get_following_count(
                from_user_id=self.dongxie.id), count - 1)

        # case 5: re-unfollow
        count = FriendshipService.get_following_count(
            from_user_id=self.dongxie.id)
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 0)
        self.assertEqual(
            FriendshipService.get_following_count(
                from_user_id=self.dongxie.id), count)

        # case 6: duplicate unfollow
        before_count = FriendshipService.get_following_count(self.dongxie.id)
        response = self.dongxie_client.post(url)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['deleted'], 0)
        after_count = FriendshipService.get_following_count(self.dongxie.id)
        self.assertEqual(before_count, after_count)