Skip to content

Commit 6e4c21a

Browse files
authored
🔧 chore(integration slo): cleaning up tests and use util method (#81936)
cleaning up tests and using a util method i defined in an earlier pr
1 parent a3abebb commit 6e4c21a

File tree

8 files changed

+41
-127
lines changed

8 files changed

+41
-127
lines changed

Diff for: src/sentry/integrations/slack/utils/notifications.py

+2-12
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,10 @@
3131
SLACK_LINK_IDENTITY_MSG_SUCCESS_DATADOG_METRIC,
3232
SLACK_METRIC_ALERT_FAILURE_DATADOG_METRIC,
3333
SLACK_METRIC_ALERT_SUCCESS_DATADOG_METRIC,
34+
record_lifecycle_termination_level,
3435
)
3536
from sentry.integrations.slack.sdk_client import SlackSdkClient
3637
from sentry.integrations.slack.spec import SlackMessagingSpec
37-
from sentry.integrations.slack.utils.errors import (
38-
SLACK_SDK_HALT_ERROR_CATEGORIES,
39-
unpack_slack_api_error,
40-
)
4138
from sentry.models.options.organization_option import OrganizationOption
4239
from sentry.utils import metrics
4340

@@ -176,14 +173,7 @@ def send_incident_alert_notification(
176173
lifecycle.add_extras(log_params)
177174
# If the error is a channel not found or archived, we can halt the flow
178175
# This means that the channel was deleted or archived after the alert rule was created
179-
if (
180-
(reason := unpack_slack_api_error(e))
181-
and reason is not None
182-
and reason in SLACK_SDK_HALT_ERROR_CATEGORIES
183-
):
184-
lifecycle.record_halt(reason.message)
185-
else:
186-
lifecycle.record_failure(e)
176+
record_lifecycle_termination_level(lifecycle, e)
187177

188178
else:
189179
success = True

Diff for: tests/sentry/identity/test_oauth2.py

+3-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from sentry.identity.pipeline import IdentityProviderPipeline
1313
from sentry.identity.providers.dummy import DummyProvider
1414
from sentry.integrations.types import EventLifecycleOutcome
15-
from sentry.testutils.asserts import assert_failure_metric
15+
from sentry.testutils.asserts import assert_failure_metric, assert_slo_metric
1616
from sentry.testutils.cases import TestCase
1717
from sentry.testutils.silo import control_silo_test
1818

@@ -68,10 +68,7 @@ def test_exchange_token_success(
6868
"redirect_uri": "http://testserver/extensions/default/setup/",
6969
}
7070

71-
assert len(mock_record.mock_calls) == 2
72-
start, success = mock_record.mock_calls
73-
assert start.args[0] == EventLifecycleOutcome.STARTED
74-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
71+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
7572

7673
@responses.activate
7774
def test_exchange_token_success_customer_domains(self, mock_record, mock_integration_const):
@@ -96,10 +93,7 @@ def test_exchange_token_success_customer_domains(self, mock_record, mock_integra
9693
"redirect_uri": "http://testserver/extensions/default/setup/",
9794
}
9895

99-
assert len(mock_record.mock_calls) == 2
100-
start, success = mock_record.mock_calls
101-
assert start.args[0] == EventLifecycleOutcome.STARTED
102-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
96+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
10397

10498
@responses.activate
10599
def test_exchange_token_ssl_error(self, mock_record, mock_integration_const):

Diff for: tests/sentry/integrations/discord/webhooks/test_command.py

+7-20
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from sentry.integrations.discord.webhooks.types import DiscordResponseTypes
77
from sentry.integrations.messaging.metrics import MessageCommandFailureReason
88
from sentry.integrations.types import EventLifecycleOutcome
9-
from sentry.testutils.asserts import assert_failure_metric
9+
from sentry.testutils.asserts import assert_failure_metric, assert_slo_metric
1010
from sentry.testutils.cases import APITestCase
1111

1212
WEBHOOK_URL = "/extensions/discord/interactions/"
@@ -118,9 +118,7 @@ def test_link_guild(self, mock_record):
118118
assert data["data"]["flags"] == EPHEMERAL_FLAG
119119
assert response.status_code == 200
120120

121-
start, success = mock_record.mock_calls
122-
assert start.args[0] == EventLifecycleOutcome.STARTED
123-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
121+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
124122

125123
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
126124
def test_link_dm(self, mock_record):
@@ -156,9 +154,7 @@ def test_link_dm(self, mock_record):
156154
assert data["data"]["flags"] == EPHEMERAL_FLAG
157155
assert response.status_code == 200
158156

159-
start, success = mock_record.mock_calls
160-
assert start.args[0] == EventLifecycleOutcome.STARTED
161-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
157+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
162158

163159
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
164160
def test_link_already_linked(self, mock_record):
@@ -205,9 +201,7 @@ def test_link_already_linked(self, mock_record):
205201
assert data["data"]["flags"] == EPHEMERAL_FLAG
206202
assert response.status_code == 200
207203

208-
start, success = mock_record.mock_calls
209-
assert start.args[0] == EventLifecycleOutcome.STARTED
210-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
204+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
211205

212206
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
213207
def test_unlink_no_identity(self, mock_record):
@@ -232,9 +226,7 @@ def test_unlink_no_identity(self, mock_record):
232226
assert data["data"]["flags"] == EPHEMERAL_FLAG
233227
assert response.status_code == 200
234228

235-
start, success = mock_record.mock_calls
236-
assert start.args[0] == EventLifecycleOutcome.STARTED
237-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
229+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
238230

239231
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
240232
def test_unlink(self, mock_record):
@@ -282,9 +274,7 @@ def test_unlink(self, mock_record):
282274
assert data["data"]["flags"] == EPHEMERAL_FLAG
283275
assert response.status_code == 200
284276

285-
start, success = mock_record.mock_calls
286-
assert start.args[0] == EventLifecycleOutcome.STARTED
287-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
277+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
288278

289279
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
290280
def test_help(self, mock_record):
@@ -309,7 +299,4 @@ def test_help(self, mock_record):
309299
assert data["data"]["flags"] == EPHEMERAL_FLAG
310300
assert response.status_code == 200
311301

312-
assert len(mock_record.mock_calls) == 2
313-
start, success = mock_record.mock_calls
314-
assert start.args[0] == EventLifecycleOutcome.STARTED
315-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
302+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)

Diff for: tests/sentry/integrations/msteams/test_webhook.py

+5-13
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from sentry.integrations.msteams.utils import ACTION_TYPE
1313
from sentry.integrations.types import EventLifecycleOutcome
1414
from sentry.silo.base import SiloMode
15+
from sentry.testutils.asserts import assert_slo_metric
1516
from sentry.testutils.cases import APITestCase
1617
from sentry.testutils.silo import assume_test_silo_mode
1718
from sentry.users.models.identity import Identity
@@ -397,9 +398,7 @@ def test_unlink_user(self, mock_time, mock_decode, mock_record):
397398
)
398399
assert "Bearer my_token" in responses.calls[3].request.headers["Authorization"]
399400

400-
start, success = mock_record.mock_calls
401-
assert start.args[0] == EventLifecycleOutcome.STARTED
402-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
401+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
403402

404403
@responses.activate
405404
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -435,10 +434,7 @@ def test_help_command(self, mock_time, mock_decode, mock_record):
435434
].request.body.decode("utf-8")
436435
assert "Bearer my_token" in responses.calls[3].request.headers["Authorization"]
437436

438-
assert len(mock_record.mock_calls) == 2
439-
start, success = mock_record.mock_calls
440-
assert start.args[0] == EventLifecycleOutcome.STARTED
441-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
437+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
442438

443439
@responses.activate
444440
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -500,9 +496,7 @@ def test_link_command(self, mock_time, mock_decode, mock_record):
500496
]
501497
assert self.metrics.incr.mock_calls == calls
502498

503-
start, success = mock_record.mock_calls
504-
assert start.args[0] == EventLifecycleOutcome.STARTED
505-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
499+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
506500

507501
@responses.activate
508502
@mock.patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -544,9 +538,7 @@ def test_link_command_already_linked(self, mock_time, mock_decode, mock_record):
544538
)
545539
assert "Bearer my_token" in responses.calls[3].request.headers["Authorization"]
546540

547-
start, success = mock_record.mock_calls
548-
assert start.args[0] == EventLifecycleOutcome.STARTED
549-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
541+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
550542

551543
@responses.activate
552544
@mock.patch("sentry.utils.jwt.decode")

Diff for: tests/sentry/integrations/slack/webhooks/commands/test_link_team.py

+11-32
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
)
1414
from sentry.integrations.types import EventLifecycleOutcome
1515
from sentry.silo.base import SiloMode
16+
from sentry.testutils.asserts import assert_slo_metric
1617
from sentry.testutils.helpers import get_response_text, link_user
1718
from sentry.testutils.helpers.features import with_feature
1819
from sentry.testutils.silo import assume_test_silo_mode
@@ -64,10 +65,7 @@ def test_link_another_team_to_channel(self, mock_record):
6465
data = orjson.loads(response.content)
6566
assert CHANNEL_ALREADY_LINKED_MESSAGE in get_response_text(data)
6667

67-
assert len(mock_record.mock_calls) == 2
68-
start, success = mock_record.mock_calls
69-
assert start.args[0] == EventLifecycleOutcome.STARTED
70-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
68+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
7169

7270
@with_feature("organizations:slack-multiple-team-single-channel-linking")
7371
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -91,10 +89,7 @@ def test_link_another_team_to_channel_with_flag(self, mock_record):
9189
data = orjson.loads(response.content)
9290
assert "Link your Sentry team to this Slack channel!" in get_response_text(data)
9391

94-
assert len(mock_record.mock_calls) == 2
95-
start, success = mock_record.mock_calls
96-
assert start.args[0] == EventLifecycleOutcome.STARTED
97-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
92+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
9893

9994
@responses.activate
10095
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -114,9 +109,7 @@ def test_link_team_from_dm(self, mock_record):
114109
data = orjson.loads(response.content)
115110
assert LINK_FROM_CHANNEL_MESSAGE in get_response_text(data)
116111

117-
start, success = mock_record.mock_calls
118-
assert start.args[0] == EventLifecycleOutcome.STARTED
119-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
112+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
120113

121114
@responses.activate
122115
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -130,9 +123,7 @@ def test_link_team_identity_does_not_exist(self, mock_record):
130123
data = self.send_slack_message("link team", user_id=OTHER_SLACK_ID)
131124
assert LINK_USER_FIRST_MESSAGE in get_response_text(data)
132125

133-
start, success = mock_record.mock_calls
134-
assert start.args[0] == EventLifecycleOutcome.STARTED
135-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
126+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
136127

137128
@responses.activate
138129
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -151,9 +142,7 @@ def test_link_team_insufficient_role(self, mock_record):
151142
data = self.send_slack_message("link team", user_id=OTHER_SLACK_ID)
152143
assert INSUFFICIENT_ROLE_MESSAGE in get_response_text(data)
153144

154-
start, success = mock_record.mock_calls
155-
assert start.args[0] == EventLifecycleOutcome.STARTED
156-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
145+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
157146

158147
@responses.activate
159148
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -167,9 +156,7 @@ def test_link_team_as_team_admin(self, mock_record):
167156
data = self.send_slack_message("link team", user_id=OTHER_SLACK_ID)
168157
assert "Link your Sentry team to this Slack channel!" in get_response_text(data)
169158

170-
start, success = mock_record.mock_calls
171-
assert start.args[0] == EventLifecycleOutcome.STARTED
172-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
159+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
173160

174161

175162
class SlackCommandsUnlinkTeamTest(SlackCommandsLinkTeamTestBase):
@@ -187,9 +174,7 @@ def test_unlink_team(self, mock_record):
187174
)
188175
assert "Click here to unlink your team from this channel" in get_response_text(data)
189176

190-
start, success = mock_record.mock_calls
191-
assert start.args[0] == EventLifecycleOutcome.STARTED
192-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
177+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
193178

194179
@responses.activate
195180
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -207,9 +192,7 @@ def test_unlink_team_as_team_admin(self, mock_record):
207192
)
208193
assert "Click here to unlink your team from this channel" in get_response_text(data)
209194

210-
start, success = mock_record.mock_calls
211-
assert start.args[0] == EventLifecycleOutcome.STARTED
212-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
195+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
213196

214197
@responses.activate
215198
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -225,9 +208,7 @@ def test_unlink_no_team(self, mock_record):
225208
)
226209
assert TEAM_NOT_LINKED_MESSAGE in get_response_text(data)
227210

228-
start, success = mock_record.mock_calls
229-
assert start.args[0] == EventLifecycleOutcome.STARTED
230-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
211+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
231212

232213
@responses.activate
233214
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
@@ -248,6 +229,4 @@ def test_unlink_multiple_orgs(self, mock_record):
248229
)
249230
assert "Click here to unlink your team from this channel" in get_response_text(data)
250231

251-
start, success = mock_record.mock_calls
252-
assert start.args[0] == EventLifecycleOutcome.STARTED
253-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
232+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)

Diff for: tests/sentry/integrations/slack/webhooks/commands/test_link_user.py

+5-13
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
)
99
from sentry.integrations.slack.webhooks.base import NOT_LINKED_MESSAGE
1010
from sentry.integrations.types import EventLifecycleOutcome
11+
from sentry.testutils.asserts import assert_slo_metric
1112
from sentry.testutils.helpers import get_response_text
1213
from sentry.testutils.silo import control_silo_test
1314
from sentry.users.models.identity import Identity
@@ -39,19 +40,15 @@ def test_link_command(self, mock_record):
3940
data = self.send_slack_message("link")
4041
assert "Link your Slack identity" in get_response_text(data)
4142

42-
start, success = mock_record.mock_calls
43-
assert start.args[0] == EventLifecycleOutcome.STARTED
44-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
43+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
4544

4645
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
4746
def test_link_command_already_linked(self, mock_record):
4847
self.link_user()
4948
data = self.send_slack_message("link")
5049
assert "You are already linked as" in get_response_text(data)
5150

52-
start, success = mock_record.mock_calls
53-
assert start.args[0] == EventLifecycleOutcome.STARTED
54-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
51+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
5552

5653

5754
@control_silo_test
@@ -121,16 +118,11 @@ def test_unlink_command(self, mock_record):
121118
data = self.send_slack_message("unlink")
122119
assert "to unlink your identity" in get_response_text(data)
123120

124-
assert len(mock_record.mock_calls) == 2
125-
start, success = mock_record.mock_calls
126-
assert start.args[0] == EventLifecycleOutcome.STARTED
127-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
121+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
128122

129123
@patch("sentry.integrations.utils.metrics.EventLifecycle.record_event")
130124
def test_unlink_command_already_unlinked(self, mock_record):
131125
data = self.send_slack_message("unlink")
132126
assert NOT_LINKED_MESSAGE in get_response_text(data)
133127

134-
start, success = mock_record.mock_calls
135-
assert start.args[0] == EventLifecycleOutcome.STARTED
136-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
128+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)

Diff for: tests/sentry/integrations/slack/webhooks/events/test_message_im.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from sentry.integrations.types import EventLifecycleOutcome
88
from sentry.silo.base import SiloMode
9+
from sentry.testutils.asserts import assert_slo_metric
910
from sentry.testutils.cases import IntegratedApiTestCase
1011
from sentry.testutils.helpers import get_response_text
1112
from sentry.testutils.silo import assume_test_silo_mode
@@ -107,10 +108,7 @@ def test_user_message_link(self, mock_record):
107108
data = self.mock_post.call_args[1]
108109
assert "Link your Slack identity" in get_response_text(data)
109110

110-
assert len(mock_record.mock_calls) == 2
111-
start, success = mock_record.mock_calls
112-
assert start.args[0] == EventLifecycleOutcome.STARTED
113-
assert success.args[0] == EventLifecycleOutcome.SUCCESS
111+
assert_slo_metric(mock_record, EventLifecycleOutcome.SUCCESS)
114112

115113
def test_user_message_already_linked_sdk(self):
116114
"""

0 commit comments

Comments
 (0)