Skip to content

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

tests/sentry/issues/auto_source_code_config/test_process_event.py

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,23 @@ def _process_and_assert_code_mapping(
6565
platform: str,
6666
expected_stack_root: str,
6767
expected_source_root: str,
68+
expected_num_code_mappings: int = 1,
6869
) -> None:
6970
with (
7071
patch(f"{CLIENT}.get_tree", return_value=self._repo_tree_files(repo_files)),
7172
patch(f"{CLIENT}.get_remaining_api_requests", return_value=500),
7273
patch(REPO_TREES_GET_REPOS, return_value=[self._repo_info()]),
7374
patch("sentry.utils.metrics.incr") as mock_incr,
7475
):
76+
existing_repositories = Repository.objects.all()
7577
event = self.create_event(frames, platform)
7678
process_event(self.project.id, event.group_id, event.event_id)
7779
code_mappings = RepositoryProjectPathConfig.objects.all()
78-
assert len(code_mappings) == 1
79-
code_mapping = code_mappings[0]
80-
assert code_mapping.stack_root == expected_stack_root
80+
assert len(code_mappings) == expected_num_code_mappings
81+
code_mapping = code_mappings.filter(
82+
project=self.project, stack_root=expected_stack_root
83+
).first()
84+
assert code_mapping is not None
8185
assert code_mapping.source_root == expected_source_root
8286
platform_config = PlatformConfig(platform)
8387
dry_run = platform_config.is_dry_run_platform()
@@ -87,11 +91,12 @@ def _process_and_assert_code_mapping(
8791
tags={"dry_run": dry_run, "platform": event.platform},
8892
sample_rate=1.0,
8993
)
90-
mock_incr.assert_any_call(
91-
key=f"{METRIC_PREFIX}.repository.created",
92-
tags={"dry_run": dry_run, "platform": event.platform},
93-
sample_rate=1.0,
94-
)
94+
if existing_repositories == 0:
95+
mock_incr.assert_any_call(
96+
key=f"{METRIC_PREFIX}.repository.created",
97+
tags={"dry_run": dry_run, "platform": event.platform},
98+
sample_rate=1.0,
99+
)
95100

96101
def _process_and_assert_no_code_mapping(
97102
self,
@@ -248,6 +253,31 @@ def test_extension_is_not_included(self) -> None:
248253
expected_source_root="src/foo/",
249254
)
250255

256+
def test_multiple_calls(self) -> None:
257+
platform = "other"
258+
with (
259+
patch(f"{CODE_ROOT}.utils.get_platform_config", return_value={}),
260+
patch(f"{CODE_ROOT}.utils.PlatformConfig.is_supported", return_value=True),
261+
):
262+
# XXX: We need a test for when repo_files changes over time
263+
repo_files = ["src/foo/bar.py", "src/baz/qux.py"]
264+
self._process_and_assert_code_mapping(
265+
repo_files=repo_files,
266+
frames=[self.frame("foo/bar.py", True)],
267+
platform=platform,
268+
expected_stack_root="foo/",
269+
expected_source_root="src/foo/",
270+
expected_num_code_mappings=1,
271+
)
272+
self._process_and_assert_code_mapping(
273+
repo_files=repo_files,
274+
frames=[self.frame("baz/qux.py", True)],
275+
platform=platform,
276+
expected_stack_root="baz/",
277+
expected_source_root="src/baz/",
278+
expected_num_code_mappings=2,
279+
)
280+
251281

252282
class LanguageSpecificDeriveCodeMappings(BaseDeriveCodeMappings):
253283
@property

0 commit comments

Comments
 (0)