|
8 | 8 | from sentry.integrations.types import ExternalProviders
|
9 | 9 | from sentry.integrations.utils.providers import get_provider_name
|
10 | 10 | from sentry.testutils.cases import TestCase
|
| 11 | +from sentry.testutils.helpers.features import with_feature |
11 | 12 |
|
12 | 13 |
|
13 | 14 | class ExternalActorSerializerTest(TestCase):
|
@@ -145,3 +146,70 @@ def test_avoid_strict_external_name(self) -> None:
|
145 | 146 | context={"organization": self.organization},
|
146 | 147 | )
|
147 | 148 | assert serializer.is_valid() is True
|
| 149 | + |
| 150 | + @with_feature("organizations:use-case-insensitive-codeowners") |
| 151 | + def test_create_case_insensitive_team(self) -> None: |
| 152 | + sentry_team = self.create_team(organization=self.organization, members=[self.user]) |
| 153 | + |
| 154 | + external_actor_team_data = { |
| 155 | + "provider": get_provider_name(ExternalProviders.GITHUB.value), |
| 156 | + "external_name": "@getsentry/example-team", |
| 157 | + "integrationId": self.integration.id, |
| 158 | + "team_id": sentry_team.id, |
| 159 | + } |
| 160 | + |
| 161 | + serializer = ExternalTeamSerializer( |
| 162 | + data=external_actor_team_data, |
| 163 | + context={"organization": self.organization}, |
| 164 | + ) |
| 165 | + assert serializer.is_valid() is True |
| 166 | + external_actor1, created1 = serializer.create(serializer.validated_data) |
| 167 | + assert created1 is True |
| 168 | + assert external_actor1.external_name == "@getsentry/example-team" |
| 169 | + |
| 170 | + # Try to create another with different case but different team - should match existing one |
| 171 | + external_actor_team_data["external_name"] = "@GETSENTRY/EXAMPLE-TEAM" |
| 172 | + external_actor_team_data["team_id"] = sentry_team.id |
| 173 | + |
| 174 | + serializer = ExternalTeamSerializer( |
| 175 | + data=external_actor_team_data, |
| 176 | + context={"organization": self.organization}, |
| 177 | + ) |
| 178 | + assert serializer.is_valid() is True |
| 179 | + external_actor2, created2 = serializer.create(serializer.validated_data) |
| 180 | + |
| 181 | + # We should not have created a new external actor - we should have returned the existing one |
| 182 | + assert created2 is False |
| 183 | + assert external_actor2.id == external_actor1.id |
| 184 | + assert external_actor2.external_name == "@getsentry/example-team" |
| 185 | + |
| 186 | + def test_create_case_sensitive_team(self) -> None: |
| 187 | + sentry_team = self.create_team(organization=self.organization, members=[self.user]) |
| 188 | + |
| 189 | + external_actor_team_data = { |
| 190 | + "provider": get_provider_name(ExternalProviders.GITHUB.value), |
| 191 | + "external_name": "@getsentry/example-team", |
| 192 | + "integrationId": self.integration.id, |
| 193 | + "team_id": sentry_team.id, |
| 194 | + } |
| 195 | + |
| 196 | + serializer = ExternalTeamSerializer( |
| 197 | + data=external_actor_team_data, |
| 198 | + context={"organization": self.organization}, |
| 199 | + ) |
| 200 | + assert serializer.is_valid() is True |
| 201 | + external_actor1, created1 = serializer.create(serializer.validated_data) |
| 202 | + assert created1 is True |
| 203 | + assert external_actor1.external_name == "@getsentry/example-team" |
| 204 | + |
| 205 | + external_actor_team_data["external_name"] = "@GETSENTRY/EXAMPLE-TEAM" |
| 206 | + external_actor_team_data["team_id"] = sentry_team.id |
| 207 | + |
| 208 | + serializer = ExternalTeamSerializer( |
| 209 | + data=external_actor_team_data, |
| 210 | + context={"organization": self.organization}, |
| 211 | + ) |
| 212 | + assert serializer.is_valid() is True |
| 213 | + external_actor2, created2 = serializer.create(serializer.validated_data) |
| 214 | + assert created2 is True |
| 215 | + assert external_actor2.external_name == "@GETSENTRY/EXAMPLE-TEAM" |
0 commit comments