test_organization_integration_detail_view.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. from exam import mock
  2. from sentry import features
  3. from sentry.features import OrganizationFeature
  4. from sentry.models import Integration
  5. from sentry.testutils import AcceptanceTestCase
  6. from tests.acceptance.page_objects.organization_integration_settings import (
  7. ExampleIntegrationSetupWindowElement,
  8. OrganizationIntegrationDetailViewPage,
  9. )
  10. class OrganizationIntegrationDetailView(AcceptanceTestCase):
  11. """
  12. As a developer, I can create an integration, install it, and uninstall it
  13. """
  14. def setUp(self):
  15. super().setUp()
  16. features.add("organizations:integrations-feature-flag-integration", OrganizationFeature)
  17. self.login_as(self.user)
  18. def load_page(self, slug, configuration_tab=False):
  19. url = f"/settings/{self.organization.slug}/integrations/{slug}/"
  20. if configuration_tab:
  21. url += "?tab=configurations"
  22. self.browser.get(url)
  23. self.browser.wait_until_not(".loading-indicator")
  24. def test_example_installation(self):
  25. self.provider = mock.Mock()
  26. self.provider.key = "alert_rule_integration"
  27. self.provider.name = "Example Installation"
  28. self.load_page("alert_rule_integration")
  29. self.browser.snapshot("integrations - integration detail overview")
  30. detail_view_page = OrganizationIntegrationDetailViewPage(browser=self.browser)
  31. detail_view_page.click_install_button()
  32. detail_view_page.click_through_integration_setup(
  33. ExampleIntegrationSetupWindowElement, {"name": self.provider.name}
  34. )
  35. integration = Integration.objects.filter(
  36. provider=self.provider.key, external_id=self.provider.name
  37. ).first()
  38. assert integration
  39. assert (
  40. f"/settings/{self.organization.slug}/integrations/{self.provider.key}/{integration.id}/"
  41. in self.browser.driver.current_url
  42. )
  43. def test_uninstallation(self):
  44. model = Integration.objects.create(
  45. provider="slack",
  46. external_id="some_slack",
  47. name="Test Slack",
  48. metadata={
  49. "domain_name": "slack-test.slack.com",
  50. "installation_type": "born_as_bot",
  51. "access_token": "xoxp-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxx",
  52. },
  53. )
  54. model.add_organization(self.organization, self.user)
  55. self.load_page("slack", configuration_tab=True)
  56. self.browser.snapshot(name="integrations - integration detail one configuration")
  57. detail_view_page = OrganizationIntegrationDetailViewPage(browser=self.browser)
  58. assert self.browser.element_exists('[aria-label="Configure"]')
  59. detail_view_page.uninstall()
  60. assert (
  61. self.browser.element('[data-test-id="integration-status"]').text == "Pending Deletion"
  62. )
  63. self.browser.snapshot(name="integrations - integration detail no configurations")