integrationListDirectory.spec.tsx 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import {DocIntegration as DocIntegrationFixture} from 'sentry-fixture/docIntegration';
  2. import {
  3. BitbucketIntegrationConfig,
  4. OrgOwnedApps,
  5. PluginListConfig,
  6. ProviderList,
  7. PublishedApps,
  8. SentryAppInstalls,
  9. } from 'sentry-fixture/integrationListDirectory';
  10. import {initializeOrg} from 'sentry-test/initializeOrg';
  11. import {render, screen} from 'sentry-test/reactTestingLibrary';
  12. import IntegrationListDirectory from 'sentry/views/settings/organizationIntegrations/integrationListDirectory';
  13. const mockResponse = mocks => {
  14. mocks.forEach(([url, body]) => MockApiClient.addMockResponse({url, body}));
  15. };
  16. describe('IntegrationListDirectory', function () {
  17. beforeEach(function () {
  18. MockApiClient.clearMockResponses();
  19. });
  20. const {organization: org, routerContext, routerProps} = initializeOrg();
  21. describe('Renders view', function () {
  22. beforeEach(() => {
  23. mockResponse([
  24. [`/organizations/${org.slug}/config/integrations/`, ProviderList()],
  25. [`/organizations/${org.slug}/integrations/`, [BitbucketIntegrationConfig()]],
  26. [`/organizations/${org.slug}/sentry-apps/`, OrgOwnedApps()],
  27. ['/sentry-apps/', PublishedApps()],
  28. ['/doc-integrations/', [DocIntegrationFixture()]],
  29. [`/organizations/${org.slug}/sentry-app-installations/`, SentryAppInstalls()],
  30. [`/organizations/${org.slug}/plugins/configs/`, PluginListConfig()],
  31. [`/organizations/${org.slug}/repos/?status=unmigratable`, []],
  32. ]);
  33. });
  34. it('shows installed integrations at the top in order of weight', function () {
  35. render(
  36. <IntegrationListDirectory
  37. {...routerProps}
  38. params={{orgId: org.slug}}
  39. routeParams={{orgId: org.slug}}
  40. hideHeader={false}
  41. />,
  42. {
  43. context: routerContext,
  44. }
  45. );
  46. expect(screen.getByRole('textbox', {name: 'Filter'})).toBeInTheDocument();
  47. [
  48. 'bitbucket',
  49. 'pagerduty',
  50. 'my-headband-washer-289499',
  51. 'sample-doc',
  52. 'clickup',
  53. 'amazon-sqs',
  54. 'la-croix-monitor',
  55. ].map(testId => expect(screen.getByTestId(testId)).toBeInTheDocument());
  56. });
  57. it('does not show legacy plugin that has a First Party Integration if not installed', function () {
  58. render(
  59. <IntegrationListDirectory
  60. {...routerProps}
  61. params={{orgId: org.slug}}
  62. routeParams={{orgId: org.slug}}
  63. hideHeader={false}
  64. />,
  65. {context: routerContext}
  66. );
  67. expect(screen.queryByText('GitHub (Legacy)')).not.toBeInTheDocument();
  68. });
  69. it('shows legacy plugin that has a First Party Integration if installed', function () {
  70. render(
  71. <IntegrationListDirectory
  72. {...routerProps}
  73. params={{orgId: org.slug}}
  74. routeParams={{orgId: org.slug}}
  75. hideHeader={false}
  76. />,
  77. {context: routerContext}
  78. );
  79. expect(screen.getByText('PagerDuty (Legacy)')).toBeInTheDocument();
  80. });
  81. });
  82. });