|
@@ -367,3 +367,48 @@ class TestPythonDeriveCodeMappings(BaseDeriveCodeMappings):
|
|
|
|
|
|
# We should not create the code mapping for dry runs
|
|
|
assert not RepositoryProjectPathConfig.objects.filter(project_id=self.project.id).exists()
|
|
|
+
|
|
|
+ @responses.activate
|
|
|
+ @with_feature("organizations:derive-code-mappings")
|
|
|
+ def test_derive_code_mappings_stack_and_source_root_do_not_match(self):
|
|
|
+ self.create_integration(
|
|
|
+ organization=self.organization,
|
|
|
+ provider="github",
|
|
|
+ external_id=self.organization.id,
|
|
|
+ metadata={"domain_name": "github.com/Test-Org"},
|
|
|
+ )
|
|
|
+ repo_name = "foo/bar"
|
|
|
+ with patch(
|
|
|
+ "sentry.integrations.github.client.GitHubClientMixin.get_trees_for_org"
|
|
|
+ ) as mock_get_trees_for_org:
|
|
|
+ mock_get_trees_for_org.return_value = {
|
|
|
+ repo_name: RepoTree(Repo(repo_name, "master"), ["src/sentry/models/release.py"])
|
|
|
+ }
|
|
|
+ derive_code_mappings(self.project.id, self.test_data)
|
|
|
+ code_mapping = RepositoryProjectPathConfig.objects.all().first()
|
|
|
+ # sentry/models/release.py -> models/release.py -> src/sentry/models/release.py
|
|
|
+ assert code_mapping.stack_root == "sentry/"
|
|
|
+ assert code_mapping.source_root == "src/sentry/"
|
|
|
+
|
|
|
+ @responses.activate
|
|
|
+ @with_feature("organizations:derive-code-mappings")
|
|
|
+ def test_derive_code_mappings_no_normalization(self):
|
|
|
+ self.create_integration(
|
|
|
+ organization=self.organization,
|
|
|
+ provider="github",
|
|
|
+ external_id=self.organization.id,
|
|
|
+ metadata={"domain_name": "github.com/Test-Org"},
|
|
|
+ )
|
|
|
+ repo_name = "foo/bar"
|
|
|
+ with patch(
|
|
|
+ "sentry.integrations.github.client.GitHubClientMixin.get_trees_for_org"
|
|
|
+ ) as mock_get_trees_for_org:
|
|
|
+ mock_get_trees_for_org.return_value = {
|
|
|
+ repo_name: RepoTree(Repo(repo_name, "master"), ["sentry/models/release.py"])
|
|
|
+ }
|
|
|
+ derive_code_mappings(self.project.id, self.test_data)
|
|
|
+ code_mapping = RepositoryProjectPathConfig.objects.all().first()
|
|
|
+ # sentry/models/release.py -> models/release.py -> sentry/models/release.py
|
|
|
+ # If the normalization code was used these would be the empty stack root
|
|
|
+ assert code_mapping.stack_root == "sentry/"
|
|
|
+ assert code_mapping.source_root == "sentry/"
|