1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- from selenium.common.exceptions import TimeoutException
- from selenium.webdriver.common.by import By
- from sentry.testutils.cases import AcceptanceTestCase, SnubaTestCase
- from sentry.testutils.silo import no_silo_test
- from sentry.utils.retries import TimedRetryPolicy
- @no_silo_test(stable=True)
- class OrganizationSwitchTest(AcceptanceTestCase, SnubaTestCase):
- def setUp(self):
- super().setUp()
- self.primary_projects = [
- self.create_project(organization=self.organization, teams=[self.team], name=name)
- for name in ["Bengal", "Sumatra", "Siberian"]
- ]
- self.secondary_organization = self.create_organization(owner=self.user, name="Banana Duck")
- self.secondary_team = self.create_team(
- organization=self.secondary_organization, name="Second", members=[self.user]
- )
- self.secondary_projects = [
- self.create_project(
- organization=self.secondary_organization, teams=[self.secondary_team], name=name
- )
- for name in ["Gone Goose", "Peaceful Platypus"]
- ]
- self.login_as(self.user)
- def test_organization_switches(self):
- def navigate_to_issues_page(org_slug):
- issues_url = OrganizationSwitchTest.url_creator("issues", org_slug)
- self.browser.get(issues_url)
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- @TimedRetryPolicy.wrap(timeout=20, exceptions=(TimeoutException,))
- def open_project_selector():
- self.browser.click_when_visible(
- selector='[data-test-id="page-filter-project-selector"]'
- )
- # Check if the automplete-list has shown up, if that fails we
- # want to retry this step.
- self.browser.wait_until('[data-test-id="autocomplete-list"]')
- def get_project_elements_from_project_selector_dropdown():
- selector = '[data-test-id="autocomplete-list"] [data-test-id="badge-display-name"]'
- self.browser.wait_until(selector)
- return self.browser.find_elements(by=By.CSS_SELECTOR, value=selector)
- transition_urls = [
- OrganizationSwitchTest.url_creator(page, self.organization.slug)
- for page in ["issues", "releases", "discover", "user-feedback"]
- ]
- with self.settings(SENTRY_SINGLE_ORGANIZATION=False), self.feature(
- "organizations:discover"
- ):
- for transition_url in transition_urls:
- navigate_to_issues_page(self.organization.slug)
- open_project_selector()
- primary_projects_elements = get_project_elements_from_project_selector_dropdown()
- OrganizationSwitchTest.expect_projects_element_text_to_match_projects_slug(
- primary_projects_elements, self.primary_projects
- )
- self.browser.get(transition_url)
- self.browser.wait_until_not('[data-test-id="loading-indicator"]')
- navigate_to_issues_page(self.secondary_organization.slug)
- open_project_selector()
- secondary_projects_elements = get_project_elements_from_project_selector_dropdown()
- OrganizationSwitchTest.expect_projects_element_text_to_match_projects_slug(
- secondary_projects_elements, self.secondary_projects
- )
- @staticmethod
- def expect_projects_element_text_to_match_projects_slug(elements, projects):
- assert len(elements) == len(projects)
- assert {e.text for e in elements} == {p.slug for p in projects}
- @staticmethod
- def url_creator(page_path, org_slug):
- return f"organizations/{org_slug}/{page_path}/"
|