Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions src/sentry/api/helpers/group_index/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from sentry.db.models.query import create_or_update
from sentry.hybridcloud.rpc import coerce_id_from
from sentry.integrations.tasks.kick_off_status_syncs import kick_off_status_syncs
from sentry.issues.grouptype import GroupCategory, get_group_type_by_type_id
from sentry.issues.grouptype import GroupCategory
from sentry.issues.ignored import handle_archived_until_escalating, handle_ignored
from sentry.issues.merge import MergedGroup, handle_merge
from sentry.issues.priority import update_priority
Expand Down Expand Up @@ -206,12 +206,9 @@ def update_groups(
status = result.get("status")
res_type = None
if "priority" in result:
if any(
not get_group_type_by_type_id(group.type).enable_user_priority_changes
for group in groups
):
if any(not group.issue_type.enable_user_status_and_priority_changes for group in groups):
return Response(
{"detail": "Cannot manually set priority of a metric issue."},
{"detail": "Cannot manually set priority of one or more issues."},
status=HTTPStatus.BAD_REQUEST,
)

Expand All @@ -222,6 +219,12 @@ def update_groups(
project_lookup=project_lookup,
)
if status in ("resolved", "resolvedInNextRelease"):
if any(not group.issue_type.enable_user_status_and_priority_changes for group in groups):
return Response(
{"detail": "Cannot manually resolve one or more issues."},
status=HTTPStatus.BAD_REQUEST,
)

try:
result, res_type = handle_resolve_in_release(
status,
Expand Down
2 changes: 1 addition & 1 deletion src/sentry/incidents/grouptype.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ class MetricIssue(GroupType):
enable_escalation_detection = False
enable_status_change_workflow_notifications = False
enable_workflow_notifications = False
enable_user_priority_changes = False
enable_user_status_and_priority_changes = False
detector_settings = DetectorSettings(
handler=MetricIssueDetectorHandler,
validator=MetricIssueDetectorValidator,
Expand Down
2 changes: 1 addition & 1 deletion src/sentry/issues/grouptype.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ class GroupType:
enable_workflow_notifications = True

# Controls whether users are able to manually update the group's priority.
enable_user_priority_changes = True
enable_user_status_and_priority_changes = True

# Controls whether Seer automation is always triggered for this group type.
always_trigger_seer_automation = False
Expand Down
2 changes: 1 addition & 1 deletion src/sentry/workflow_engine/typings/grouptype.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ class IssueStreamGroupType(GroupType):
enable_escalation_detection = False
enable_status_change_workflow_notifications = False
enable_workflow_notifications = False
enable_user_priority_changes = False
enable_user_status_and_priority_changes = False
Original file line number Diff line number Diff line change
Expand Up @@ -4230,7 +4230,7 @@ def test_cannot_update_metric_issue_priority(self) -> None:
qs_params={"id": [group.id]}, priority=PriorityLevel.MEDIUM.to_str()
)
assert response.status_code == 400
assert response.data["detail"] == "Cannot manually set priority of a metric issue."
assert response.data["detail"] == "Cannot manually set priority of one or more issues."


class GroupDeleteTest(APITestCase, SnubaTestCase):
Expand Down
15 changes: 15 additions & 0 deletions tests/snuba/api/endpoints/test_project_group_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from django.conf import settings
from django.utils import timezone

from sentry.incidents.grouptype import MetricIssue
from sentry.integrations.models.external_issue import ExternalIssue
from sentry.integrations.models.organization_integration import OrganizationIntegration
from sentry.issues.grouptype import PerformanceSlowDBQueryGroupType
Expand Down Expand Up @@ -486,6 +487,20 @@ def test_bulk_resolve(self) -> None:

assert len(response.data) == 0

def test_exclude_metric_issue(self) -> None:
self.login_as(user=self.user)

self.create_group()
self.create_group(type=MetricIssue.type_id)

response = self.client.put(
f"{self.path}?status=unresolved&query=is:unresolved",
data={"status": "resolved"},
format="json",
)
assert response.status_code == 400, response.data
assert response.data["detail"] == "Cannot manually resolve one or more issues."

@patch("sentry.integrations.example.integration.ExampleIntegration.sync_status_outbound")
def test_resolve_with_integration(self, mock_sync_status_outbound: MagicMock) -> None:
self.login_as(user=self.user)
Expand Down
Loading