Files
2024-02-15 17:01:50 +00:00

108 lines
3.9 KiB
Python

from urllib.parse import urlparse
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, IdentityStatus
from sentry.models.integrations.external_actor import ExternalActor
from sentry.testutils.cases import AcceptanceTestCase
from sentry.testutils.silo import no_silo_test
from sentry.types.integrations import ExternalProviders
@no_silo_test
class SlackLinkTeamTest(AcceptanceTestCase):
def setUp(self):
super().setUp()
self.user = self.create_user("[email protected]")
self.org = self.create_organization(name="Rowdy Tiger", owner=self.user)
self.team = self.create_team(organization=self.org, name="Team One")
self.create_member(
user=None,
email="[email protected]",
organization=self.org,
role="owner",
teams=[self.team],
)
self.create_team_membership(user=self.user, team=self.team)
self.team_admin_user = self.create_user()
self.create_member(
user=self.team_admin_user,
team_roles=[(self.team, "admin")],
organization=self.org,
role="member",
)
self.integration = self.create_provider_integration(
provider="slack",
name="Team A",
external_id="TXXXXXXX1",
metadata={
"access_token": "xoxp-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx",
"installation_type": "born_as_bot",
},
)
self.integration.add_organization(self.org, self.user)
self.idp = self.create_identity_provider(type="slack", external_id="TXXXXXXX1")
self.identity = Identity.objects.create(
external_id="UXXXXXXX1",
idp=self.idp,
user=self.user,
status=IdentityStatus.VALID,
scopes=[],
)
linking_url = urlparse(
build_team_linking_url(
self.integration,
"UXXXXXXX1",
"CXXXXXXX9",
"general",
"http://example.slack.com/response_url",
)
)
self.path = linking_url.path
def test_link_team(self):
self.login_as(self.user)
self.browser.get(self.path)
self.browser.wait_until_not(".loading")
self.browser.click('[name="team"]')
self.browser.click(f'[value="{self.team.id}"]')
self.browser.click('[type="submit"]')
self.browser.wait_until_not(".loading")
assert ExternalActor.objects.filter(
team_id=self.team.id,
organization=self.org,
integration_id=self.integration.id,
provider=ExternalProviders.SLACK.value,
external_name="general",
external_id="CXXXXXXX9",
).exists()
def test_link_team_as_team_admin(self):
self.create_team(organization=self.org, name="Team Two")
self.create_team(organization=self.org, name="Team Three")
self.login_as(self.team_admin_user)
self.browser.get(self.path)
self.browser.wait_until_not(".loading")
self.browser.click('[name="team"]')
select_element = self.browser.find_element(by=By.ID, value="id_team")
option_elements = select_element.find_elements(by=By.TAG_NAME, value="option")
# Ensure only the team the user is team admin is on is shown
assert len(option_elements) == 1
self.browser.click(f'[value="{self.team.id}"]')
self.browser.click('[type="submit"]')
self.browser.wait_until_not(".loading")
assert ExternalActor.objects.filter(
team_id=self.team.id,
organization=self.org,
integration_id=self.integration.id,
provider=ExternalProviders.SLACK.value,
external_name="general",
external_id="CXXXXXXX9",
).exists()