123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- from selenium.webdriver.common.by import By
- from sentry.models import Integration
- from sentry.testutils import AcceptanceTestCase
- from sentry.testutils.silo import region_silo_test
- @region_silo_test
- class OrganizationIntegrationConfigurationTabs(AcceptanceTestCase):
- def setUp(self):
- super().setUp()
- self.login_as(self.user)
- self.provider = "github"
- self.integration = Integration.objects.create(
- provider=self.provider,
- external_id="some_github",
- name="Github",
- metadata={
- "access_token": "some_access_token",
- "expires_at": "2021-04-16T01:08:42",
- "icon": "https://avatars.githubusercontent.com/u/10491134?v=4",
- "domain_name": "github.com/getsentry",
- "account_type": "User",
- },
- )
- self.integration.add_organization(self.organization, self.user)
- self.create_repo(
- name="getsentry/sentry",
- provider="integrations:github",
- integration_id=self.integration.id,
- project=self.project,
- url="https://github.com/getsentry/sentry",
- )
- def load_page(self, slug, configuration_tab=False):
- url = f"/settings/{self.organization.slug}/integrations/{slug}/"
- if configuration_tab:
- url += "?tab=configurations"
- self.browser.get(url)
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- def test_external_user_mappings(self):
- # create `auth_user` records to differentiate `user_id` and `organization_member_id`
- self.create_sentry_app()
- self.user2 = self.create_user("user2@example.com")
- self.user3 = self.create_user("user3@example.com")
- self.team = self.create_team(
- organization=self.organization, slug="tiger-team", members=[self.user]
- )
- self.team2 = self.create_team(
- organization=self.organization, slug="tiger-team2", members=[self.user2]
- )
- self.team3 = self.create_team(
- organization=self.organization, slug="tiger-team3", members=[self.user3]
- )
- self.project = self.create_project(
- organization=self.organization, teams=[self.team, self.team2, self.team3], slug="bengal"
- )
- with self.feature(
- {
- "organizations:integrations-codeowners": True,
- "organizations:integrations-stacktrace-link": True,
- }
- ):
- self.browser.get(
- f"/settings/{self.organization.slug}/integrations/{self.provider}/{self.integration.id}/"
- )
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- self.browser.click(".nav-tabs li:nth-child(3) a")
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- # Empty state
- self.browser.snapshot("integrations - empty external user mappings")
- # Create mapping
- self.browser.click('[data-test-id="add-mapping-button"]')
- self.browser.wait_until("[role='dialog']")
- # Add Mapping Modal
- externalName = self.browser.find_element(by=By.NAME, value="externalName")
- externalName.send_keys("@user2")
- self.browser.click("#userId:first-child div")
- self.browser.click('[id="react-select-2-option-1"]')
- self.browser.snapshot("integrations - save new external user mapping")
- # List View
- self.browser.click('[aria-label="Save Changes"]')
- self.browser.wait_until_not('[aria-label="Save Changes"]')
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- self.browser.snapshot("integrations - one external user mapping")
- def test_external_team_mappings(self):
- with self.feature(
- {
- "organizations:integrations-codeowners": True,
- "organizations:integrations-stacktrace-link": True,
- }
- ):
- self.browser.get(
- f"/settings/{self.organization.slug}/integrations/{self.provider}/{self.integration.id}/"
- )
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- self.browser.click(".nav-tabs li:nth-child(4) a")
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- # Empty state
- self.browser.snapshot("integrations - empty external team mappings")
- # Create mapping
- self.browser.click('[data-test-id="add-mapping-button"]')
- self.browser.wait_until("[role='dialog']")
- # Add Mapping Modal
- externalName = self.browser.find_element(by=By.NAME, value="externalName")
- externalName.send_keys("@getsentry/ecosystem")
- self.browser.click("#teamId:first-child div")
- self.browser.click('[id="react-select-2-option-0"]')
- self.browser.snapshot("integrations - save new external team mapping")
- # List View
- self.browser.click('[aria-label="Save Changes"]')
- self.browser.wait_until_not('[aria-label="Save Changes"]')
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- self.browser.snapshot("integrations - one external team mapping")
- def test_settings_tab(self):
- provider = "custom_scm"
- integration = Integration.objects.create(
- provider=provider,
- external_id="123456789",
- name="Some Org",
- metadata={
- "domain_name": "https://github.com/some-org/",
- },
- )
- integration.add_organization(self.organization, self.user)
- with self.feature(
- {
- "organizations:integrations-codeowners": True,
- "organizations:integrations-stacktrace-link": True,
- "organizations:integrations-custom-scm": True,
- }
- ):
- self.browser.get(
- f"/settings/{self.organization.slug}/integrations/{provider}/{integration.id}/"
- )
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- self.browser.click(".nav-tabs li:nth-child(1) a")
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- name = self.browser.find_element(by=By.NAME, value="name")
- name.clear()
- name.send_keys("New Name")
- self.browser.click('[aria-label="Save Settings"]')
- self.browser.wait_until('[data-test-id="toast-success"]')
- self.browser.snapshot("integrations - custom scm settings")
|