Browse Source

test: Prefer factory to create Integration objects in setup (#62874)

Introduce `create_provider_integration` as a test case factory method.
Globally find and replace instances of `Integration.objects.create`. The
purpose is to wrap them in `assume_test_silo_mode(SiloMode.CONTROL)` so
that we can expand the number of test cases run in region mode by
default.

Fix some incidental type-checking failures that the change exposed.
Ryan Skonnord 1 year ago
parent
commit
c011434a64

+ 2 - 0
src/sentry/incidents/endpoints/organization_alert_rule_available_action_index.py

@@ -23,8 +23,10 @@ from sentry.incidents.serializers import ACTION_TARGET_TYPE_TO_STRING
 from sentry.models.organization import Organization
 from sentry.services.hybrid_cloud.app import RpcSentryAppInstallation, app_service
 from sentry.services.hybrid_cloud.integration import RpcIntegration
+from sentry.services.hybrid_cloud.util import region_silo_function
 
 
+@region_silo_function
 def build_action_response(
     registered_type,
     integration: RpcIntegration | None = None,

+ 5 - 0
src/sentry/testutils/factories.py

@@ -1505,6 +1505,11 @@ class Factories:
         integration.add_organization(organization)
         return integration
 
+    @staticmethod
+    @assume_test_silo_mode(SiloMode.CONTROL)
+    def create_provider_integration(**integration_params: Any) -> Integration:
+        return Integration.objects.create(**integration_params)
+
     @staticmethod
     @assume_test_silo_mode(SiloMode.CONTROL)
     def create_integration(

+ 5 - 0
src/sentry/testutils/fixtures.py

@@ -443,6 +443,10 @@ class Fixtures:
 
         return integration
 
+    def create_provider_integration(self, **integration_params: Any) -> Integration:
+        """Create an integration tied to a provider but no particular organization."""
+        return Factories.create_provider_integration(**integration_params)
+
     def create_integration(
         self,
         organization: Organization,
@@ -450,6 +454,7 @@ class Fixtures:
         oi_params: Mapping[str, Any] | None = None,
         **kwargs: Any,
     ) -> Integration:
+        """Create an integration and add an organization."""
         return Factories.create_integration(organization, external_id, oi_params, **kwargs)
 
     def create_identity(self, *args, **kwargs):

+ 1 - 2
tests/acceptance/test_link_team.py

@@ -5,7 +5,6 @@ from selenium.webdriver.common.by import By
 from sentry.integrations.slack.views.link_team import build_team_linking_url
 from sentry.models.identity import Identity, IdentityProvider, IdentityStatus
 from sentry.models.integrations.external_actor import ExternalActor
-from sentry.models.integrations.integration import Integration
 from sentry.testutils.cases import AcceptanceTestCase
 from sentry.testutils.silo import no_silo_test
 from sentry.types.integrations import ExternalProviders
@@ -34,7 +33,7 @@ class SlackLinkTeamTest(AcceptanceTestCase):
             role="member",
         )
 
-        self.integration = Integration.objects.create(
+        self.integration = self.create_provider_integration(
             provider="slack",
             name="Team A",
             external_id="TXXXXXXX1",

+ 1 - 2
tests/acceptance/test_organization_integration_configuration_tabs.py

@@ -1,6 +1,5 @@
 from selenium.webdriver.common.by import By
 
-from sentry.models.integrations.integration import Integration
 from sentry.testutils.cases import AcceptanceTestCase
 from sentry.testutils.silo import no_silo_test
 
@@ -11,7 +10,7 @@ class OrganizationIntegrationConfigurationTabs(AcceptanceTestCase):
         super().setUp()
         self.login_as(self.user)
         self.provider = "github"
-        self.integration = Integration.objects.create(
+        self.integration = self.create_provider_integration(
             provider=self.provider,
             external_id="some_github",
             name="Github",

+ 1 - 1
tests/acceptance/test_organization_integration_detail_view.py

@@ -52,7 +52,7 @@ class OrganizationIntegrationDetailView(AcceptanceTestCase):
         )
 
     def test_uninstallation(self):
-        model = Integration.objects.create(
+        model = self.create_provider_integration(
             provider="slack",
             external_id="some_slack",
             name="Test Slack",

+ 1 - 2
tests/sentry/api/endpoints/test_external_user.py

@@ -1,4 +1,3 @@
-from sentry.models.integrations.integration import Integration
 from sentry.silo import SiloMode
 from sentry.testutils.cases import APITestCase
 from sentry.testutils.silo import assume_test_silo_mode, region_silo_test
@@ -15,7 +14,7 @@ class ExternalUserTest(APITestCase):
 
         self.org_slug = self.organization.slug  # force creation
         with assume_test_silo_mode(SiloMode.CONTROL):
-            self.integration = Integration.objects.create(
+            self.integration = self.create_provider_integration(
                 provider="github", name="GitHub", external_id="github:1"
             )
 

+ 1 - 2
tests/sentry/api/endpoints/test_group_notes_details.py

@@ -8,7 +8,6 @@ from sentry.models.group import Group
 from sentry.models.grouplink import GroupLink
 from sentry.models.groupsubscription import GroupSubscription
 from sentry.models.integrations.external_issue import ExternalIssue
-from sentry.models.integrations.integration import Integration
 from sentry.notifications.types import GroupSubscriptionReason
 from sentry.silo import SiloMode
 from sentry.testutils.cases import APITestCase
@@ -24,7 +23,7 @@ class GroupNotesDetailsTest(APITestCase):
         self.activity.save()
 
         with assume_test_silo_mode(SiloMode.CONTROL):
-            self.integration = Integration.objects.create(
+            self.integration = self.create_provider_integration(
                 provider="example", external_id="example12345", name="Example 12345"
             )
             org_integration = self.integration.add_organization(self.organization)

+ 1 - 2
tests/sentry/api/endpoints/test_organization_code_mapping_details.py

@@ -1,7 +1,6 @@
 from django.urls import reverse
 
 from sentry.api.serializers import serialize
-from sentry.models.integrations.integration import Integration
 from sentry.models.integrations.repository_project_path_config import RepositoryProjectPathConfig
 from sentry.models.repository import Repository
 from sentry.silo import SiloMode
@@ -32,7 +31,7 @@ class OrganizationCodeMappingDetailsTest(APITestCase):
         )
         self.project = self.create_project(organization=self.org, teams=[self.team], name="Bengal")
         with assume_test_silo_mode(SiloMode.CONTROL):
-            self.integration = Integration.objects.create(
+            self.integration = self.create_provider_integration(
                 provider="github", name="Example", external_id="abcd"
             )
             self.org_integration = self.integration.add_organization(self.org, self.user)

+ 1 - 2
tests/sentry/api/endpoints/test_organization_codeowners_associations.py

@@ -1,7 +1,6 @@
 from rest_framework import status
 
 from sentry.api.validators.project_codeowners import validate_codeowners_associations
-from sentry.models.integrations.integration import Integration
 from sentry.silo import SiloMode
 from sentry.testutils.cases import APITestCase
 from sentry.testutils.silo import assume_test_silo_mode, region_silo_test
@@ -134,7 +133,7 @@ class OrganizationCodeOwnersAssociationsEndpointTest(APITestCase):
 
         # Create a codeowners under the "life" provider, and check the query parameter again
         with assume_test_silo_mode(SiloMode.CONTROL):
-            integration = Integration.objects.create(provider="life", name="Life")
+            integration = self.create_provider_integration(provider="life", name="Life")
             organization_integration = integration.add_organization(self.organization, self.user)
         project_3 = self.create_project(
             organization=self.organization, teams=[self.team_1, self.team_2]

Some files were not shown because too many files changed in this diff