Esempio n. 1
0
 def test_for_community_if_sender_not_member(self, community):
     MessageFactory(
         sender=MembershipFactory(community=CommunityFactory(),
                                  active=True).member,
         recipient=MembershipFactory(community=community).member,
     )
     assert not Message.objects.for_community(community).exists()
Esempio n. 2
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
Esempio n. 3
0
    def test_notify_on_update_moderator_edit(self, community, send_webpush_mock):

        owner = MembershipFactory(community=community).member

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

        moderator = MembershipFactory(
            community=community,
        ).member

        post = PostFactory(
            owner=owner,
            community=community,
            description="hello from @owner #movies #reviews",
        )

        post.description = "hello @danjac"
        post.editor = moderator
        post.save()

        notifications = post.notify_on_update()
        assert len(notifications) == 2

        assert notifications[0].recipient == member
        assert notifications[0].actor == post.owner
        assert notifications[0].verb == "mention"

        assert notifications[1].recipient == post.owner
        assert notifications[1].actor == moderator
        assert notifications[1].verb == "edit"
Esempio n. 4
0
    def test_authenticated(self, member):

        other = MembershipFactory(member=member.member).community

        post = PostFactory(
            community=other, owner=MembershipFactory(community=other).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_external_notification_count(member.member, member.community) == 1
        )
Esempio n. 5
0
    def test_member_cache(self):

        user = UserFactory()

        first = MembershipFactory(member=user,
                                  role=Membership.Role.ADMIN,
                                  active=True).community
        second = MembershipFactory(member=user,
                                   role=Membership.Role.MODERATOR,
                                   active=True).community
        third = MembershipFactory(member=user,
                                  role=Membership.Role.MEMBER,
                                  active=True).community
        fourth = MembershipFactory(member=user,
                                   role=Membership.Role.MEMBER,
                                   active=False).community
        fifth = CommunityFactory()

        assert user.member_cache.has_role(first.id, [Membership.Role.ADMIN])
        assert user.member_cache.has_role(second.id,
                                          [Membership.Role.MODERATOR])
        assert user.member_cache.has_role(third.id, [Membership.Role.MEMBER])

        assert user.member_cache.has_role(first.id)
        assert user.member_cache.has_role(second.id)
        assert user.member_cache.has_role(third.id)

        assert not user.member_cache.has_role(fourth.id)
        assert not user.member_cache.has_role(fifth.id)

        assert not user.member_cache.is_inactive(first.id)
        assert not user.member_cache.is_inactive(second.id)
        assert not user.member_cache.is_inactive(third.id)
        assert not user.member_cache.is_inactive(fifth.id)
        assert user.member_cache.is_inactive(fourth.id)
Esempio n. 6
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"
Esempio n. 7
0
 def test_get_if_neither_recipient_nor_sender(self, client, member):
     sender = MembershipFactory(community=member.community).member
     recipient = MembershipFactory(community=member.community).member
     message = MessageFactory(community=member.community,
                              sender=sender,
                              recipient=recipient)
     response = client.get(message.get_absolute_url())
     assert response.status_code == http.HTTPStatus.NOT_FOUND
Esempio n. 8
0
 def test_authenticated(self, member):
     other = MembershipFactory(member=member.member).community
     MessageFactory(
         community=other,
         recipient=member.member,
         sender=MembershipFactory(community=other).member,
     )
     assert get_unread_external_message_count(member.member,
                                              member.community) == 1
Esempio n. 9
0
 def test_for_community(self, community):
     comment = CommentFactory(
         community=community,
         owner=MembershipFactory(community=community).member,
     )
     CommentFactory(owner=MembershipFactory(community=community).member)
     CommentFactory(community=community)
     CommentFactory()
     assert Comment.objects.for_community(community).get() == comment
Esempio n. 10
0
    def test_notify_on_publish(self, community, send_webpush_mock):
        # owner should not receive any notifications from their own posts
        owner = MembershipFactory(
            community=community, role=Membership.Role.MODERATOR
        ).member

        mentioned = MembershipFactory(
            member=UserFactory(username="******"),
            community=community,
            role=Membership.Role.MEMBER,
        ).member

        # ensure we just have one notification for multiple tags

        movies = Tag.objects.create(name="movies")
        reviews = Tag.objects.create(name="reviews")

        post = PostFactory(
            owner=owner,
            community=community,
            description="hello @danjac from @owner #movies #reviews",
        )

        tag_follower = MembershipFactory(
            community=community,
            member=UserFactory(),
        ).member
        tag_follower.following_tags.add(movies, reviews)

        # owner should also follow tags to ensure they aren't notified
        owner.following_tags.add(movies, reviews)

        assert tag_follower.following_tags.count() == 2

        user_follower = MembershipFactory(
            community=community,
            member=UserFactory(),
        ).member
        user_follower.following.add(post.owner)

        notifications = post.notify_on_publish()
        assert len(notifications) == 3

        assert notifications[0].recipient == mentioned
        assert notifications[0].actor == post.owner
        assert notifications[0].verb == "mention"

        assert notifications[1].recipient == tag_follower
        assert notifications[1].actor == post.owner
        assert notifications[1].verb == "followed_tag"

        assert notifications[2].recipient == user_follower
        assert notifications[2].actor == post.owner
        assert notifications[2].verb == "followed_user"
Esempio n. 11
0
    def test_for_community(self, community):

        message = MessageFactory(
            community=community,
            sender=MembershipFactory(community=community).member,
            recipient=MembershipFactory(community=community).member,
        )

        qs = Message.objects.for_community(community)
        assert qs.count() == 1
        assert qs.first() == message
Esempio n. 12
0
 def test_notify_on_follow(self, member, send_webpush_mock):
     follower = MembershipFactory(
         community=member.community,
         member=UserFactory(),
     ).member
     notifications = follower.notify_on_follow(member.member,
                                               member.community)
     assert len(notifications) == 1
     assert notifications[0].recipient == member.member
     assert notifications[0].content_object == follower
     assert notifications[0].actor == follower
     assert notifications[0].community == member.community
     assert notifications[0].verb == "new_follower"
     assert send_webpush_mock.is_called()
Esempio n. 13
0
    def test_get(self, client, member, user):
        other = MembershipFactory(
            community=member.community, member=UserFactory(name="tester")
        ).member

        blocker = MembershipFactory(
            community=member.community, member=UserFactory(name="tester")
        ).member

        blocker.blocked.add(member.member)

        response = client.get(reverse("users:autocomplete_list"), {"q": "tester"})
        object_list = response.context["users"]
        assert other in object_list
        assert blocker not in object_list
Esempio n. 14
0
 def test_get_count_if_not_admin(self, member):
     membership = MembershipFactory(role=Membership.Role.MEMBER,
                                    member=member.member)
     JoinRequestFactory(community=membership.community)
     count = get_pending_external_join_request_count(
         member.member, member.community)
     assert count == 0
Esempio n. 15
0
    def test_get_if_anonymous(self, client, community):
        user = MembershipFactory(community=community).member
        response = client.get(reverse("users:member_list"))
        assert response.status_code == http.HTTPStatus.OK

        object_list = response.context["object_list"]
        assert user in object_list
Esempio n. 16
0
 def test_get(self, client, member):
     post = PostFactory(
         community=member.community,
         owner=MembershipFactory(community=member.community).member,
     )
     response = client.get(reverse("posts:flag", args=[post.id]))
     assert response.status_code == http.HTTPStatus.OK
Esempio n. 17
0
    def handle(self, *args, **options):

        num_users = options["num_users"]
        domain = options["domain"]

        try:
            community = Community.objects.get(domain__iexact=domain)
        except Community.DoesNotExist:
            raise CommandError(f"No community found for {domain}")

        if (input(
                f"This will create {num_users} new users for community {community.name}. Do you wish to continue ? (Y/n) "
        ).lower() != "y"):
            return

        password = getpass.getpass(
            "Password (leave empty for randomized password): ").strip()

        num_created = 0

        for _ in range(num_users):
            try:
                membership = MembershipFactory(community=community)
                if password:
                    membership.member.set_password(password)
                    membership.member.save()
                num_created += 1
                self.stdout.write(" | ".join(
                    (membership.member.username, membership.member.email)))
            except IntegrityError:
                ...

        self.stdout.write(
            self.style.SUCCESS(f"{num_created} new users created"))
Esempio n. 18
0
 def test_get(self, client, member):
     sender = MembershipFactory(community=member.community).member
     MessageFactory(community=member.community,
                    recipient=member.member,
                    sender=sender)
     response = client.get(reverse("private_messages:inbox"))
     assert len(response.context["object_list"]) == 1
Esempio n. 19
0
    def test_notify_on_publish_reshare(self, community, send_webpush_mock):

        mentioned = MembershipFactory(
            member=UserFactory(username="******"),
            community=community,
            role=Membership.Role.MEMBER,
        ).member

        # ensure we just have one notification for multiple tags

        movies = Tag.objects.create(name="movies")
        reviews = Tag.objects.create(name="reviews")

        tag_follower = MembershipFactory(
            community=community,
            member=UserFactory(),
        ).member
        tag_follower.following_tags.add(movies, reviews)

        assert tag_follower.following_tags.count() == 2

        owner = MembershipFactory(
            community=community,
        ).member

        post = PostFactory(
            owner=owner,
            community=community,
            description="hello @danjac from @owner #movies #reviews",
        )

        # reshare
        reshare = post.reshare(UserFactory())
        notifications = list(reshare.notify_on_publish())
        assert len(notifications) == 3

        assert notifications[0].recipient == post.owner
        assert notifications[0].actor == reshare.owner
        assert notifications[0].verb == "reshare"

        assert notifications[1].recipient == mentioned
        assert notifications[1].actor == reshare.owner
        assert notifications[1].verb == "mention"

        assert notifications[2].recipient == tag_follower
        assert notifications[2].actor == reshare.owner
        assert notifications[2].verb == "followed_tag"
Esempio n. 20
0
    def test_notify_on_create(self, community, mailoutbox, send_webpush_mock):

        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)

        other_comment = 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) == 4

        assert notifications[0].recipient == mentioned
        assert notifications[0].actor == comment.owner
        assert notifications[0].verb == "mention"

        assert notifications[1].recipient == post.owner
        assert notifications[1].actor == comment.owner
        assert notifications[1].verb == "new_comment"

        assert notifications[2].recipient == other_comment.owner
        assert notifications[2].actor == comment.owner
        assert notifications[2].verb == "new_sibling"

        assert notifications[3].recipient == follower
        assert notifications[3].actor == comment.owner
        assert notifications[3].verb == "followed_user"
Esempio n. 21
0
    def test_for_community(self, community: Community):

        post = PostFactory(
            community=community,
            owner=MembershipFactory(community=community).member,
        )
        PostFactory(owner=MembershipFactory(community=community).member)
        PostFactory(owner=MembershipFactory(community=community, active=False).member)
        PostFactory(
            owner=MembershipFactory(community=CommunityFactory(), active=True).member
        )
        PostFactory(community=community)
        PostFactory()

        qs = Post.objects.for_community(community)
        assert qs.count() == 1
        assert qs.first() == post
Esempio n. 22
0
def notification(post):
    return NotificationFactory(
        recipient=MembershipFactory(community=post.community).member,
        community=post.community,
        actor=post.owner,
        content_object=post,
        verb="mention",
    )
Esempio n. 23
0
 def test_get(self, client, member):
     sender = MembershipFactory(community=member.community).member
     parent = MessageFactory(sender=sender,
                             recipient=member.member,
                             community=member.community)
     response = client.get(
         reverse("private_messages:message_reply", args=[parent.id]))
     assert response.status_code == http.HTTPStatus.OK
Esempio n. 24
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
Esempio n. 25
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
Esempio n. 26
0
 def test_get(self, client, member):
     EventFactory.create_batch(
         3,
         community=member.community,
         owner=MembershipFactory(community=member.community).member,
     )
     response = client.get(reverse("events:list"))
     assert response.status_code == http.HTTPStatus.OK
     assert len(dict(response.context_data or {})["object_list"]) == 3
Esempio n. 27
0
    def test_get_anonymous(self, client, community, anonymous_user):

        user = MembershipFactory(
            community=community, member=UserFactory(name="tester")
        ).member

        response = client.get(reverse("users:autocomplete_list"), {"q": "tester"})
        object_list = response.context["users"]
        assert user in object_list
Esempio n. 28
0
 def test_post_user_blocking(self, client, member):
     user = MembershipFactory(
         community=member.community,
         member=UserFactory(),
     ).member
     member.member.blockers.add(user)
     response = client.post(reverse("users:follow", args=[user.username]))
     assert response.status_code == 404
     assert user not in member.member.following.all()
Esempio n. 29
0
    def test_with_is_parent_owner_member_true(self, community):
        parent = CommentFactory(
            community=community,
            owner=MembershipFactory(community=community).member,
        )

        comment = CommentFactory(
            community=community,
            parent=parent,
            owner=MembershipFactory(community=community).member,
        )

        assert (
            Comment.objects.with_is_parent_owner_member(community)
            .for_community(community)
            .get(pk=comment.id)
            .is_parent_owner_member
        )
Esempio n. 30
0
    def test_for_community(self, community: Community):

        notification = NotificationFactory(
            community=community,
            actor=MembershipFactory(community=community).member,
        )
        NotificationFactory(actor=MembershipFactory(
            community=community).member)
        NotificationFactory(
            actor=MembershipFactory(community=community, active=False).member)
        NotificationFactory(actor=MembershipFactory(
            community=CommunityFactory(), active=True).member)
        NotificationFactory(community=community)
        NotificationFactory()

        qs = Notification.objects.for_community(community)
        assert qs.count() == 1
        assert qs.first() == notification