Skip to content

Commit 8799c00

Browse files
committed
fixes
1 parent c9e6807 commit 8799c00

File tree

9 files changed

+254
-93
lines changed

9 files changed

+254
-93
lines changed

src/sentry/integrations/gitlab/issues.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ def get_projects_and_default(self, group: Group | None, params: Mapping[str, Any
4747
# expects the param to be called 'repo', so we need to rename it here.
4848
# Django QueryDicts are immutable, so we need to copy it first.
4949
params_mut = dict(params)
50-
params_mut["repo"] = params.get("project") or defaults.get("project")
50+
repo = params.get("project") or defaults.get("project")
51+
params_mut["repo"] = str(repo) if repo is not None else None
5152

5253
default_project, project_choices = self.get_repository_choices(group, params_mut)
5354
return default_project, project_choices
@@ -59,7 +60,7 @@ def create_default_repo_choice(self, default_repo):
5960
project = client.get_project(default_repo)
6061
except (ApiError, ApiUnauthorized):
6162
return ("", "")
62-
return (project["id"], project["name_with_namespace"])
63+
return (str(project["id"]), project["name_with_namespace"])
6364

6465
@all_silo_function
6566
def get_create_issue_config(

src/sentry/integrations/perforce/integration.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ def __init__(
187187
super().__init__(model=model, organization_id=organization_id)
188188
self._client: PerforceClient | None = None
189189

190+
def get_repo_external_id(self, repo: Mapping[str, Any]) -> str:
191+
raise NotImplementedError(
192+
"Perforce external_id is derived from the depot path, not the API response"
193+
)
194+
190195
def get_client(self) -> PerforceClient:
191196
"""Get the Perforce client instance."""
192197
if self._client is not None:
@@ -384,7 +389,7 @@ def get_repositories(
384389
{
385390
"name": depot_name,
386391
"identifier": depot_path,
387-
"external_id": self.get_repo_external_id(depot),
392+
"default_branch": None, # Perforce uses depot paths, not branch refs
388393
}
389394
)
390395

tests/sentry/integrations/bitbucket/test_integration.py

Lines changed: 144 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,21 @@ def test_get_repositories_with_uuid(self) -> None:
4747
responses.add(
4848
responses.GET,
4949
url,
50-
json={"values": [{"full_name": "sentryuser/stuf"}]},
50+
json={"values": [{"full_name": "sentryuser/stuf", "uuid": "{abc-001}"}]},
5151
)
5252
installation = self.integration.get_installation(self.organization.id)
5353
result = installation.get_repositories()
54-
assert result == [{"identifier": "sentryuser/stuf", "name": "sentryuser/stuf"}]
54+
assert result == [
55+
{"identifier": "sentryuser/stuf", "name": "sentryuser/stuf", "external_id": "{abc-001}"}
56+
]
5557

5658
@responses.activate
5759
def test_get_repositories_exact_match(self) -> None:
5860
querystring = urlencode({"q": 'name="stuf"'})
5961
responses.add(
6062
responses.GET,
6163
f"https://api.bitbucket.org/2.0/repositories/sentryuser?{querystring}",
62-
json={"values": [{"full_name": "sentryuser/stuf"}]},
64+
json={"values": [{"full_name": "sentryuser/stuf", "uuid": "{abc-001}"}]},
6365
)
6466

6567
querystring = urlencode({"q": 'name~"stuf"'})
@@ -68,37 +70,85 @@ def test_get_repositories_exact_match(self) -> None:
6870
f"https://api.bitbucket.org/2.0/repositories/sentryuser?{querystring}",
6971
json={
7072
"values": [
71-
{"full_name": "sentryuser/stuff"},
72-
{"full_name": "sentryuser/stuff-2010"},
73-
{"full_name": "sentryuser/stuff-2011"},
74-
{"full_name": "sentryuser/stuff-2012"},
75-
{"full_name": "sentryuser/stuff-2013"},
76-
{"full_name": "sentryuser/stuff-2014"},
77-
{"full_name": "sentryuser/stuff-2015"},
78-
{"full_name": "sentryuser/stuff-2016"},
79-
{"full_name": "sentryuser/stuff-2016"},
80-
{"full_name": "sentryuser/stuff-2017"},
81-
{"full_name": "sentryuser/stuff-2018"},
82-
{"full_name": "sentryuser/stuff-2019"},
73+
{"full_name": "sentryuser/stuff", "uuid": "{abc-002}"},
74+
{"full_name": "sentryuser/stuff-2010", "uuid": "{abc-003}"},
75+
{"full_name": "sentryuser/stuff-2011", "uuid": "{abc-004}"},
76+
{"full_name": "sentryuser/stuff-2012", "uuid": "{abc-005}"},
77+
{"full_name": "sentryuser/stuff-2013", "uuid": "{abc-006}"},
78+
{"full_name": "sentryuser/stuff-2014", "uuid": "{abc-007}"},
79+
{"full_name": "sentryuser/stuff-2015", "uuid": "{abc-008}"},
80+
{"full_name": "sentryuser/stuff-2016", "uuid": "{abc-009}"},
81+
{"full_name": "sentryuser/stuff-2016", "uuid": "{abc-009}"},
82+
{"full_name": "sentryuser/stuff-2017", "uuid": "{abc-010}"},
83+
{"full_name": "sentryuser/stuff-2018", "uuid": "{abc-011}"},
84+
{"full_name": "sentryuser/stuff-2019", "uuid": "{abc-012}"},
8385
]
8486
},
8587
)
8688

8789
installation = self.integration.get_installation(self.organization.id)
8890
result = installation.get_repositories("stuf")
8991
assert result == [
90-
{"identifier": "sentryuser/stuf", "name": "sentryuser/stuf"},
91-
{"identifier": "sentryuser/stuff", "name": "sentryuser/stuff"},
92-
{"identifier": "sentryuser/stuff-2010", "name": "sentryuser/stuff-2010"},
93-
{"identifier": "sentryuser/stuff-2011", "name": "sentryuser/stuff-2011"},
94-
{"identifier": "sentryuser/stuff-2012", "name": "sentryuser/stuff-2012"},
95-
{"identifier": "sentryuser/stuff-2013", "name": "sentryuser/stuff-2013"},
96-
{"identifier": "sentryuser/stuff-2014", "name": "sentryuser/stuff-2014"},
97-
{"identifier": "sentryuser/stuff-2015", "name": "sentryuser/stuff-2015"},
98-
{"identifier": "sentryuser/stuff-2016", "name": "sentryuser/stuff-2016"},
99-
{"identifier": "sentryuser/stuff-2017", "name": "sentryuser/stuff-2017"},
100-
{"identifier": "sentryuser/stuff-2018", "name": "sentryuser/stuff-2018"},
101-
{"identifier": "sentryuser/stuff-2019", "name": "sentryuser/stuff-2019"},
92+
{
93+
"identifier": "sentryuser/stuf",
94+
"name": "sentryuser/stuf",
95+
"external_id": "{abc-001}",
96+
},
97+
{
98+
"identifier": "sentryuser/stuff",
99+
"name": "sentryuser/stuff",
100+
"external_id": "{abc-002}",
101+
},
102+
{
103+
"identifier": "sentryuser/stuff-2010",
104+
"name": "sentryuser/stuff-2010",
105+
"external_id": "{abc-003}",
106+
},
107+
{
108+
"identifier": "sentryuser/stuff-2011",
109+
"name": "sentryuser/stuff-2011",
110+
"external_id": "{abc-004}",
111+
},
112+
{
113+
"identifier": "sentryuser/stuff-2012",
114+
"name": "sentryuser/stuff-2012",
115+
"external_id": "{abc-005}",
116+
},
117+
{
118+
"identifier": "sentryuser/stuff-2013",
119+
"name": "sentryuser/stuff-2013",
120+
"external_id": "{abc-006}",
121+
},
122+
{
123+
"identifier": "sentryuser/stuff-2014",
124+
"name": "sentryuser/stuff-2014",
125+
"external_id": "{abc-007}",
126+
},
127+
{
128+
"identifier": "sentryuser/stuff-2015",
129+
"name": "sentryuser/stuff-2015",
130+
"external_id": "{abc-008}",
131+
},
132+
{
133+
"identifier": "sentryuser/stuff-2016",
134+
"name": "sentryuser/stuff-2016",
135+
"external_id": "{abc-009}",
136+
},
137+
{
138+
"identifier": "sentryuser/stuff-2017",
139+
"name": "sentryuser/stuff-2017",
140+
"external_id": "{abc-010}",
141+
},
142+
{
143+
"identifier": "sentryuser/stuff-2018",
144+
"name": "sentryuser/stuff-2018",
145+
"external_id": "{abc-011}",
146+
},
147+
{
148+
"identifier": "sentryuser/stuff-2019",
149+
"name": "sentryuser/stuff-2019",
150+
"external_id": "{abc-012}",
151+
},
102152
]
103153

104154
@responses.activate
@@ -109,18 +159,18 @@ def test_get_repositories_no_exact_match(self) -> None:
109159
f"https://api.bitbucket.org/2.0/repositories/sentryuser?{querystring}",
110160
json={
111161
"values": [
112-
{"full_name": "sentryuser/stuff"},
113-
{"full_name": "sentryuser/stuff-2010"},
114-
{"full_name": "sentryuser/stuff-2011"},
115-
{"full_name": "sentryuser/stuff-2012"},
116-
{"full_name": "sentryuser/stuff-2013"},
117-
{"full_name": "sentryuser/stuff-2014"},
118-
{"full_name": "sentryuser/stuff-2015"},
119-
{"full_name": "sentryuser/stuff-2016"},
120-
{"full_name": "sentryuser/stuff-2016"},
121-
{"full_name": "sentryuser/stuff-2017"},
122-
{"full_name": "sentryuser/stuff-2018"},
123-
{"full_name": "sentryuser/stuff-2019"},
162+
{"full_name": "sentryuser/stuff", "uuid": "{abc-002}"},
163+
{"full_name": "sentryuser/stuff-2010", "uuid": "{abc-003}"},
164+
{"full_name": "sentryuser/stuff-2011", "uuid": "{abc-004}"},
165+
{"full_name": "sentryuser/stuff-2012", "uuid": "{abc-005}"},
166+
{"full_name": "sentryuser/stuff-2013", "uuid": "{abc-006}"},
167+
{"full_name": "sentryuser/stuff-2014", "uuid": "{abc-007}"},
168+
{"full_name": "sentryuser/stuff-2015", "uuid": "{abc-008}"},
169+
{"full_name": "sentryuser/stuff-2016", "uuid": "{abc-009}"},
170+
{"full_name": "sentryuser/stuff-2016", "uuid": "{abc-009}"},
171+
{"full_name": "sentryuser/stuff-2017", "uuid": "{abc-010}"},
172+
{"full_name": "sentryuser/stuff-2018", "uuid": "{abc-011}"},
173+
{"full_name": "sentryuser/stuff-2019", "uuid": "{abc-012}"},
124174
]
125175
},
126176
)
@@ -135,17 +185,61 @@ def test_get_repositories_no_exact_match(self) -> None:
135185
installation = self.integration.get_installation(self.organization.id)
136186
result = installation.get_repositories("stu")
137187
assert result == [
138-
{"identifier": "sentryuser/stuff", "name": "sentryuser/stuff"},
139-
{"identifier": "sentryuser/stuff-2010", "name": "sentryuser/stuff-2010"},
140-
{"identifier": "sentryuser/stuff-2011", "name": "sentryuser/stuff-2011"},
141-
{"identifier": "sentryuser/stuff-2012", "name": "sentryuser/stuff-2012"},
142-
{"identifier": "sentryuser/stuff-2013", "name": "sentryuser/stuff-2013"},
143-
{"identifier": "sentryuser/stuff-2014", "name": "sentryuser/stuff-2014"},
144-
{"identifier": "sentryuser/stuff-2015", "name": "sentryuser/stuff-2015"},
145-
{"identifier": "sentryuser/stuff-2016", "name": "sentryuser/stuff-2016"},
146-
{"identifier": "sentryuser/stuff-2017", "name": "sentryuser/stuff-2017"},
147-
{"identifier": "sentryuser/stuff-2018", "name": "sentryuser/stuff-2018"},
148-
{"identifier": "sentryuser/stuff-2019", "name": "sentryuser/stuff-2019"},
188+
{
189+
"identifier": "sentryuser/stuff",
190+
"name": "sentryuser/stuff",
191+
"external_id": "{abc-002}",
192+
},
193+
{
194+
"identifier": "sentryuser/stuff-2010",
195+
"name": "sentryuser/stuff-2010",
196+
"external_id": "{abc-003}",
197+
},
198+
{
199+
"identifier": "sentryuser/stuff-2011",
200+
"name": "sentryuser/stuff-2011",
201+
"external_id": "{abc-004}",
202+
},
203+
{
204+
"identifier": "sentryuser/stuff-2012",
205+
"name": "sentryuser/stuff-2012",
206+
"external_id": "{abc-005}",
207+
},
208+
{
209+
"identifier": "sentryuser/stuff-2013",
210+
"name": "sentryuser/stuff-2013",
211+
"external_id": "{abc-006}",
212+
},
213+
{
214+
"identifier": "sentryuser/stuff-2014",
215+
"name": "sentryuser/stuff-2014",
216+
"external_id": "{abc-007}",
217+
},
218+
{
219+
"identifier": "sentryuser/stuff-2015",
220+
"name": "sentryuser/stuff-2015",
221+
"external_id": "{abc-008}",
222+
},
223+
{
224+
"identifier": "sentryuser/stuff-2016",
225+
"name": "sentryuser/stuff-2016",
226+
"external_id": "{abc-009}",
227+
},
228+
{
229+
"identifier": "sentryuser/stuff-2017",
230+
"name": "sentryuser/stuff-2017",
231+
"external_id": "{abc-010}",
232+
},
233+
{
234+
"identifier": "sentryuser/stuff-2018",
235+
"name": "sentryuser/stuff-2018",
236+
"external_id": "{abc-011}",
237+
},
238+
{
239+
"identifier": "sentryuser/stuff-2019",
240+
"name": "sentryuser/stuff-2019",
241+
"external_id": "{abc-012}",
242+
},
149243
]
150244

151245
@responses.activate

tests/sentry/integrations/bitbucket/test_issues.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ def test_default_repo_link_fields(self) -> None:
108108
"https://api.bitbucket.org/2.0/repositories/myaccount",
109109
body=b"""{
110110
"values": [
111-
{"full_name": "myaccount/repo1"},
112-
{"full_name": "myaccount/repo2"}
111+
{"full_name": "myaccount/repo1", "uuid": "{repo-1}"},
112+
{"full_name": "myaccount/repo2", "uuid": "{repo-2}"}
113113
]
114114
}""",
115115
content_type="application/json",
@@ -132,8 +132,8 @@ def test_default_repo_create_fields(self) -> None:
132132
"https://api.bitbucket.org/2.0/repositories/myaccount",
133133
body=b"""{
134134
"values": [
135-
{"full_name": "myaccount/repo1"},
136-
{"full_name": "myaccount/repo2"}
135+
{"full_name": "myaccount/repo1", "uuid": "{repo-1}"},
136+
{"full_name": "myaccount/repo2", "uuid": "{repo-2}"}
137137
]
138138
}""",
139139
content_type="application/json",
@@ -191,7 +191,12 @@ def test_get_create_issue_config(self) -> None:
191191
responses.add(
192192
responses.GET,
193193
"https://api.bitbucket.org/2.0/repositories/myaccount",
194-
json={"values": [{"full_name": "myaccount/repo1"}, {"full_name": "myaccount/repo2"}]},
194+
json={
195+
"values": [
196+
{"full_name": "myaccount/repo1", "uuid": "{repo-1}"},
197+
{"full_name": "myaccount/repo2", "uuid": "{repo-2}"},
198+
]
199+
},
195200
)
196201

197202
installation = self.integration.get_installation(self.organization.id)
@@ -244,7 +249,12 @@ def test_get_create_issue_config_with_long_title(self) -> None:
244249
responses.add(
245250
responses.GET,
246251
"https://api.bitbucket.org/2.0/repositories/myaccount",
247-
json={"values": [{"full_name": "myaccount/repo1"}, {"full_name": "myaccount/repo2"}]},
252+
json={
253+
"values": [
254+
{"full_name": "myaccount/repo1", "uuid": "{repo-1}"},
255+
{"full_name": "myaccount/repo2", "uuid": "{repo-2}"},
256+
]
257+
},
248258
)
249259
installation = self.integration.get_installation(self.organization.id)
250260
event = self.store_event(
@@ -268,8 +278,8 @@ def test_get_create_issue_config_without_group(self) -> None:
268278
"https://api.bitbucket.org/2.0/repositories/myaccount",
269279
json={
270280
"values": [
271-
{"full_name": "myaccount/repo1"},
272-
{"full_name": "myaccount/repo2"},
281+
{"full_name": "myaccount/repo1", "uuid": "{repo-1}"},
282+
{"full_name": "myaccount/repo2", "uuid": "{repo-2}"},
273283
],
274284
},
275285
)
@@ -298,7 +308,12 @@ def test_get_link_issue_config(self) -> None:
298308
responses.add(
299309
responses.GET,
300310
"https://api.bitbucket.org/2.0/repositories/myaccount",
301-
json={"values": [{"full_name": "myaccount/repo1"}, {"full_name": "myaccount/repo2"}]},
311+
json={
312+
"values": [
313+
{"full_name": "myaccount/repo1", "uuid": "{repo-1}"},
314+
{"full_name": "myaccount/repo2", "uuid": "{repo-2}"},
315+
]
316+
},
302317
)
303318
installation = self.integration.get_installation(self.organization.id)
304319
assert installation.get_link_issue_config(self.group) == [

0 commit comments

Comments
 (0)