Example #1
0
 def test_get_count_if_moderator(self, moderator):
     post = PostFactory(community=moderator.community)
     FlagFactory(content_object=post, community=post.community)
     other = MembershipFactory(member=moderator.member,
                               role=Membership.Role.MODERATOR)
     post = PostFactory(community=other.community)
     FlagFactory(content_object=post, community=post.community)
     assert get_external_flag_count(moderator.member,
                                    moderator.community) == 1
Example #2
0
 def test_post(self, client, moderator):
     post = PostFactory(community=moderator.community)
     flag = FlagFactory(
         content_object=post,
         community=moderator.community,
     )
     response = client.post(reverse("flags:delete", args=[flag.id]))
     assert response.url == post.get_absolute_url()
     assert not Flag.objects.exists()
Example #3
0
 def test_post(self, client, member):
     post = PostFactory(community=member.community)
     comment = CommentFactory(
         owner=member.member,
         content_object=post,
         community=member.community,
     )
     response = client.post(reverse("comments:delete", args=[comment.id]))
     assert response.url == post.get_absolute_url()
     assert Comment.objects.count() == 0
Example #4
0
    def test_exclude_blocked_users_if_user_blocked(self, user):

        my_post = PostFactory(owner=user)

        first_post = PostFactory()
        second_post = PostFactory()
        user.blockers.add(first_post.owner)

        posts = Post.objects.exclude_blocked_users(user).all()
        assert len(posts) == 2
        assert my_post in posts
        assert second_post in posts
Example #5
0
    def test_get_if_member(self, client, member):
        EventFactory(community=member.community, owner=member.member)
        PostFactory(community=member.community, owner=member.member)
        PostFactory(community=member.community, owner=member.member)
        poll = PollFactory(community=member.community, owner=member.member)

        for _ in range(3):
            answer = AnswerFactory(poll=poll)
            answer.voters.add(UserFactory())

        response = client.get(settings.HOME_PAGE_URL)
        assert response.status_code == 200
        assert len(response.context["object_list"]) == 4
Example #6
0
 def test_post(self, client, member, send_webpush_mock):
     post = PostFactory(community=member.community)
     parent = CommentFactory(
         content_object=post,
         community=member.community,
         owner=MembershipFactory(community=member.community).member,
     )
     response = client.post(reverse("comments:reply", args=[parent.id]),
                            {"content": "test"})
     comment = Comment.objects.get(parent=parent)
     assert response.url == post.get_absolute_url()
     assert comment.owner == member.member
     assert comment.content_object == parent.content_object
     assert comment.parent == parent
Example #7
0
    def test_exclude_blocked(self, user):
        first_post = PostFactory()
        second_post = PostFactory()
        third_post = PostFactory()
        fourth_post = PostFactory()

        first_post.tags.add("movies")
        second_post.tags.add("movies", "reviews")
        third_post.tags.add("reviews")

        user.blocked.add(fourth_post.owner)
        user.blocked_tags.add(Tag.objects.get(name="movies"))

        assert Post.objects.exclude_blocked(user).distinct().get() == third_post
Example #8
0
    def test_with_activity_stream_filters_if_none_set(self, user, anonymous_user):

        PostFactory(owner=user)

        first_post = PostFactory()
        user.following.add(first_post.owner)

        second_post = PostFactory()
        second_post.tags.add("reviews")

        PostFactory()

        assert Post.objects.with_activity_stream_filters(user).count() == 4
        assert Post.objects.with_activity_stream_filters(anonymous_user).count() == 4
Example #9
0
    def test_unreshared(self, post, user, anonymous_user):

        first = PostFactory()
        PostFactory()

        other = UserFactory()

        first.reshare(user)

        assert Post.objects.unreshared(other).count() == 4
        assert Post.objects.unreshared(anonymous_user).count() == 4

        posts = Post.objects.unreshared(user)
        # incl. reshared post
        assert posts.count() == 3
        assert first not in posts
Example #10
0
 def test_get_content_object_if_soft_deleted(self):
     assert (
         CommentFactory(
             content_object=PostFactory(deleted=timezone.now())
         ).get_content_object()
         is None
     )
Example #11
0
 def test_post(self, client, member):
     post = PostFactory(community=member.community, owner=member.member)
     post.tags.set("movies")
     tag = Tag.objects.get()
     response = client.post(reverse("hashtags:block", args=[tag.id]))
     assert response.status_code == http.HTTPStatus.OK
     assert tag in member.member.blocked_tags.all()
Example #12
0
    def test_notify_on_create_if_no_content_object(self, community):

        comment_owner = MembershipFactory(community=community).member
        post_owner = MembershipFactory(
            community=community,
        ).member

        mentioned = UserFactory(username="******")

        MembershipFactory(member=mentioned, community=community)

        post = PostFactory(
            owner=post_owner, community=community, deleted=timezone.now()
        )

        CommentFactory(
            owner=MembershipFactory(community=community).member,
            content_object=post,
        )

        comment = CommentFactory(
            owner=comment_owner,
            community=community,
            content_object=post,
            content="hello @danjac",
        )

        follower = MembershipFactory(community=community).member
        follower.following.add(comment.owner)

        notifications = list(comment.notify_on_create())

        assert len(notifications) == 0
Example #13
0
    def test_notify_on_update(self, community, mailoutbox, send_webpush_mock):

        comment_owner = MembershipFactory(
            community=community,
        ).member

        member = MembershipFactory(
            community=community, member=UserFactory(username="******")
        ).member

        post_owner = MembershipFactory(community=community).member
        post = PostFactory(owner=post_owner, community=community)

        comment = CommentFactory(
            owner=comment_owner,
            community=community,
            content_object=post,
            content="hello",
        )

        comment.content = "hello @danjac"
        comment.save()

        notifications = list(comment.notify_on_update())
        assert len(notifications) == 1

        assert notifications[0].recipient == member
        assert notifications[0].actor == comment_owner
        assert notifications[0].verb == "mention"
Example #14
0
    def test_get_if_current_user(self, client, member):

        post = PostFactory(community=member.community, owner=member.member)
        EventFactory(community=member.community, owner=member.member)
        # unlikely, but just for testing
        notification = NotificationFactory(
            recipient=member.member,
            content_object=member.member,
            is_read=False,
        )
        LikeFactory(
            content_object=post,
            community=post.community,
            recipient=post.owner,
        )

        response = client.get(
            reverse("users:activities", args=[member.member.username])
        )
        assert response.status_code == http.HTTPStatus.OK
        assert len(dict(response.context or {})["object_list"]) == 2
        assert dict(response.context or {})["num_likes"] == 1

        # ignore: user is self
        notification.refresh_from_db()
        assert not notification.is_read
Example #15
0
    def test_authenticated(self, member):
        post = PostFactory(
            community=member.community,
            owner=MembershipFactory(community=member.community).member,
        )

        Notification.objects.create(
            content_object=post,
            recipient=member.member,
            actor=post.owner,
            community=post.community,
            verb="updated",
            is_read=False,
        )

        Notification.objects.create(
            content_object=post,
            recipient=member.member,
            actor=post.owner,
            community=post.community,
            verb="updated",
            is_read=True,
        )

        assert get_unread_notification_count(member.member, member.community) == 1
Example #16
0
    def test_post_by_moderator(self, client, moderator, mailoutbox,
                               send_webpush_mock):
        member = MembershipFactory(community=moderator.community)
        post = PostFactory(community=moderator.community, owner=member.member)
        comment = CommentFactory(
            owner=member.member,
            content_object=post,
            community=moderator.community,
        )
        response = client.post(reverse("comments:delete", args=[comment.id]))

        assert response.url == post.get_absolute_url()
        assert Comment.objects.deleted().count() == 1

        assert send_webpush_mock.delay.called
        assert len(mailoutbox) == 1
        assert mailoutbox[0].to == [comment.owner.email]
Example #17
0
 def test_get(self, client, member):
     PostFactory(
         community=member.community,
         owner=MembershipFactory(community=member.community).member,
     ).tags.add("movies")
     response = client.get(reverse("hashtags:detail", args=["movies"]))
     assert response.context["tag"].name == "movies"
     assert len(response.context["object_list"]) == 1
Example #18
0
 def test_get_count_if_not_moderator(self, member):
     other = MembershipFactory(member=member.member)
     post = PostFactory(community=other.community)
     FlagFactory(
         content_object=post,
         community=post.community,
     )
     assert get_external_flag_count(member.member, member.community) == 0
Example #19
0
    def test_get(self, client, member):
        PostFactory(community=member.community, owner=member.member)
        PostFactory(
            community=member.community,
            owner=MembershipFactory(community=member.community).member,
            published=None,
        )
        PostFactory(community=member.community,
                    owner=member.member,
                    published=None)
        EventFactory(community=member.community,
                     owner=member.member,
                     published=None)

        response = client.get(reverse("activities:private"))
        assert response.status_code == 200
        assert len(response.context["object_list"]) == 2
Example #20
0
    def test_exclude_blocked_tags(self, user):
        first_post = PostFactory()
        second_post = PostFactory()
        third_post = PostFactory()

        my_post = PostFactory(owner=user)

        first_post.tags.add("movies")
        second_post.tags.add("movies", "reviews")
        third_post.tags.add("reviews")

        user.blocked_tags.add(Tag.objects.get(name="movies"))
        posts = Post.objects.exclude_blocked_tags(user)

        assert posts.count() == 2
        assert my_post in posts
        assert third_post in posts
Example #21
0
 def test_get(self, client, moderator):
     post = PostFactory(community=moderator.community)
     FlagFactory(
         content_object=post,
         community=moderator.community,
     )
     response = client.get(reverse("flags:list"))
     assert response.status_code == 200
Example #22
0
    def test_get(self, client, member):
        PostFactory(community=member.community, owner=member.member)
        EventFactory(community=member.community, owner=member.member)

        response = client.get(reverse("activities:timeline"))
        assert response.status_code == 200
        assert len(response.context["object_list"]) == 2
        assert response.context["object_list"][0]["month"]
Example #23
0
 def test_search_mentions(self, member, transactional_db):
     PostFactory(
         community=member.community,
         title="test",
         owner=member.member,
         mentions="@danjac @tester",
     )
     results = Post.objects.search("@danjac")
     assert results.count() == 1
Example #24
0
    def test_get(self, client, member):
        PostFactory(
            community=member.community,
            owner=MembershipFactory(community=member.community).member,
        ).tags.add("movies")
        member.member.following_tags.add(Tag.objects.get(name="movies"))

        response = client.get(reverse("hashtags:following_list"))
        assert len(response.context["object_list"]) == 1
Example #25
0
 def test_get(self, client, member):
     post = PostFactory(community=member.community)
     parent = CommentFactory(
         content_object=post,
         community=member.community,
         owner=MembershipFactory(community=member.community).member,
     )
     response = client.get(reverse("comments:reply", args=[parent.id]))
     assert response.status_code == http.HTTPStatus.OK
Example #26
0
 def test_get(self, client, member):
     post = PostFactory(community=member.community)
     comment = CommentFactory(
         owner=member.member,
         content_object=post,
         community=member.community,
     )
     response = client.get(reverse("comments:update", args=[comment.id]))
     assert response.status_code == http.HTTPStatus.OK
Example #27
0
 def test_get_hashtag(self, client, member, transactional_db):
     member = MembershipFactory(community=member.community)
     PostFactory(
         community=member.community,
         description="#testme",
         owner=member.member,
     )
     response = client.get(reverse("activities:search"), {"q": "#testme"})
     assert response.status_code == 200
     assert len(response.context["object_list"]) == 1
Example #28
0
 def test_get_if_own_mention(self, client, member, transactional_db):
     PostFactory(
         community=member.community,
         owner=member.member,
         mentions=f"@{member.member.username}",
     )
     response = client.get(
         reverse("users:activity_mentions", args=[member.member.username])
     )
     assert response.status_code == http.HTTPStatus.OK
     assert len(response.context["object_list"]) == 0
Example #29
0
 def test_get_pinned_activity_if_is_pinned_post(self, member):
     post = PostFactory(
         community=member.community,
         owner=member.member,
         is_pinned=True,
         published=timezone.now(),
     )
     pinned = get_pinned_activity(member.member, member.community)
     assert pinned["pk"] == post.id
     assert pinned["object_type"] == "post"
     assert pinned["object"] == post
Example #30
0
 def test_post(self, client, member, send_webpush_mock):
     post = PostFactory(community=member.community)
     comment = CommentFactory(
         content_object=post,
         community=member.community,
         owner=MembershipFactory(community=member.community).member,
     )
     response = client.post(reverse("comments:like", args=[comment.id]))
     assert response.url == comment.get_absolute_url()
     like = Like.objects.get()
     assert like.user == member.member