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()
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()
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])
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)
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)
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)
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)