Esempio n. 1
0
    def test_users(self):
        actor = Actor(self.user.id, User)
        result = extract_user_ids_from_mentions(self.organization.id, [actor])
        assert result['users'] == set([self.user.id])
        assert result['team_users'] == set()

        other_user = self.create_user()
        result = extract_user_ids_from_mentions(
            self.organization.id, [actor, Actor(other_user.id, User)])
        assert result['users'] == set([self.user.id, other_user.id])
        assert result['team_users'] == set()
Esempio n. 2
0
    def test_users(self):
        actor = ActorTuple(self.user.id, User)
        result = extract_user_ids_from_mentions(self.organization.id, [actor])
        assert result["users"] == {self.user.id}
        assert result["team_users"] == set()

        other_user = self.create_user()
        result = extract_user_ids_from_mentions(
            self.organization.id,
            [actor, ActorTuple(other_user.id, User)])
        assert result["users"] == {self.user.id, other_user.id}
        assert result["team_users"] == set()
Esempio n. 3
0
    def test_teams(self):
        member_user = self.create_user()
        self.create_member(user=member_user,
                           organization=self.organization,
                           role="member",
                           teams=[self.team])
        actor = Actor(self.team.id, Team)
        result = extract_user_ids_from_mentions(self.organization.id, [actor])
        assert result["users"] == set()
        assert result["team_users"] == set([self.user.id, member_user.id])

        # Explicitly mentioned users shouldn't be included in team_users
        result = extract_user_ids_from_mentions(
            self.organization.id, [Actor(member_user.id, User), actor])
        assert result["users"] == set([member_user.id])
        assert result["team_users"] == set([self.user.id])
Esempio n. 4
0
    def post(self, request, group):
        serializer = NoteSerializer(
            data=request.data,
            context={
                'organization_id': group.organization.id,
                'projects': [group.project],
            },
        )

        if not serializer.is_valid():
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)

        data = dict(serializer.validated_data)

        mentions = data.pop('mentions', [])

        if Activity.objects.filter(group=group,
                                   type=Activity.NOTE,
                                   user=request.user,
                                   data=data,
                                   datetime__gte=timezone.now() -
                                   timedelta(hours=1)).exists():
            return Response(
                '{"detail": "You have already posted that comment."}',
                status=status.HTTP_400_BAD_REQUEST)

        GroupSubscription.objects.subscribe(
            group=group,
            user=request.user,
            reason=GroupSubscriptionReason.comment,
        )

        mentioned_users = extract_user_ids_from_mentions(
            group.organization.id, mentions)
        GroupSubscription.objects.bulk_subscribe(
            group=group,
            user_ids=mentioned_users['users'],
            reason=GroupSubscriptionReason.mentioned,
        )

        GroupSubscription.objects.bulk_subscribe(
            group=group,
            user_ids=mentioned_users['team_users'],
            reason=GroupSubscriptionReason.team_mentioned,
        )

        activity = Activity.objects.create(
            group=group,
            project=group.project,
            type=Activity.NOTE,
            user=extract_lazy_object(request.user),
            data=data,
        )

        activity.send_notification()

        self.create_external_comment(request, group, activity)
        return Response(serialize(activity, request.user), status=201)
Esempio n. 5
0
    def post(self, request: Request, group) -> Response:
        serializer = NoteSerializer(
            data=request.data,
            context={
                "organization": group.organization,
                "organization_id": group.organization.id,
                "projects": [group.project],
            },
        )

        if not serializer.is_valid():
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)

        data = dict(serializer.validated_data)

        mentions = data.pop("mentions", [])

        if Activity.objects.filter(
                group=group,
                type=Activity.NOTE,
                user=request.user,
                data=data,
                datetime__gte=timezone.now() - timedelta(hours=1),
        ).exists():
            return Response(
                '{"detail": "You have already posted that comment."}',
                status=status.HTTP_400_BAD_REQUEST,
            )

        GroupSubscription.objects.subscribe(
            group=group,
            user=request.user,
            reason=GroupSubscriptionReason.comment)

        mentioned_users = extract_user_ids_from_mentions(
            group.organization.id, mentions)
        GroupSubscription.objects.bulk_subscribe(
            group=group,
            user_ids=mentioned_users["users"],
            reason=GroupSubscriptionReason.mentioned)

        GroupSubscription.objects.bulk_subscribe(
            group=group,
            user_ids=mentioned_users["team_users"],
            reason=GroupSubscriptionReason.team_mentioned,
        )

        activity = Activity.objects.create_group_activity(
            group,
            ActivityType.NOTE,
            user=extract_lazy_object(request.user),
            data=data)

        self.create_external_comment(request, group, activity)
        return Response(serialize(activity, request.user), status=201)
Esempio n. 6
0
 def post(self, request, organization, incident):
     serializer = CommentSerializer(
         data=request.data,
         context={"projects": incident.projects.all(), "organization_id": organization.id},
     )
     if serializer.is_valid():
         mentions = extract_user_ids_from_mentions(
             organization.id, serializer.validated_data.get("mentions", [])
         )
         mentioned_user_ids = mentions["users"] | mentions["team_users"]
         activity = create_incident_activity(
             incident,
             IncidentActivityType.COMMENT,
             user=request.user,
             comment=serializer.validated_data["comment"],
             mentioned_user_ids=mentioned_user_ids,
         )
         return Response(serialize(activity, request.user), status=201)
     return Response(serializer.errors, status=400)
Esempio n. 7
0
 def post(self, request, organization, incident):
     serializer = CommentSerializer(
         data=request.DATA,
         context={
             'projects': incident.projects.all(),
             'organization_id': organization.id
         },
     )
     if serializer.is_valid():
         mentions = extract_user_ids_from_mentions(
             organization.id,
             serializer.object.get('mentions', []),
         )
         mentioned_user_ids = mentions['users'] | mentions['team_users']
         activity = create_incident_activity(
             incident,
             IncidentActivityType.COMMENT,
             user=request.user,
             comment=serializer.object['comment'],
             mentioned_user_ids=mentioned_user_ids,
         )
         return Response(serialize(activity, request.user), status=201)
     return Response(serializer.errors, status=400)