organizationFeatureFlagsProviderRow.spec.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import {SecretFixture} from 'sentry-fixture/secret';
  2. import {initializeOrg} from 'sentry-test/initializeOrg';
  3. import {
  4. render,
  5. renderGlobalModal,
  6. screen,
  7. userEvent,
  8. } from 'sentry-test/reactTestingLibrary';
  9. import OrganizationsStore from 'sentry/stores/organizationsStore';
  10. import type {Secret} from 'sentry/views/settings/featureFlags';
  11. import {OrganizationFeatureFlagsProviderRow} from 'sentry/views/settings/featureFlags/organizationFeatureFlagsProviderRow';
  12. describe('OrganizationFeatureFlagsProviderRow', function () {
  13. const {organization, router} = initializeOrg();
  14. const removeSecret = jest.fn();
  15. const secret: Secret = SecretFixture();
  16. const defaultProps = {
  17. organization,
  18. isRemoving: false,
  19. secret,
  20. removeSecret,
  21. router,
  22. location: router.location,
  23. params: {orgId: organization.slug},
  24. routes: router.routes,
  25. route: {},
  26. routeParams: router.params,
  27. };
  28. beforeEach(function () {
  29. MockApiClient.addMockResponse({
  30. url: '/organizations/org-slug/users/1234/',
  31. body: {},
  32. });
  33. OrganizationsStore.addOrReplace(organization);
  34. });
  35. afterEach(function () {
  36. MockApiClient.clearMockResponses();
  37. });
  38. it('shows secret and provider name', function () {
  39. render(<OrganizationFeatureFlagsProviderRow {...defaultProps} />);
  40. expect(screen.getByLabelText('Secret preview')).toHaveTextContent('123abc*****');
  41. expect(screen.getByText('launchdarkly')).toBeInTheDocument();
  42. });
  43. describe('removing', function () {
  44. it('does not allow to remove without access', function () {
  45. const props = {
  46. ...defaultProps,
  47. removeSecret: undefined,
  48. };
  49. render(<OrganizationFeatureFlagsProviderRow {...props} />);
  50. expect(
  51. screen.getByRole('button', {name: 'Remove secret for launchdarkly provider'})
  52. ).toBeDisabled();
  53. });
  54. it('allows to remove', async function () {
  55. render(<OrganizationFeatureFlagsProviderRow {...defaultProps} />);
  56. renderGlobalModal();
  57. expect(
  58. screen.getByRole('button', {name: 'Remove secret for launchdarkly provider'})
  59. ).toBeEnabled();
  60. await userEvent.click(
  61. screen.getByRole('button', {name: 'Remove secret for launchdarkly provider'})
  62. );
  63. // Confirm modal
  64. await userEvent.click(screen.getByRole('button', {name: 'Confirm'}));
  65. expect(removeSecret).toHaveBeenCalledWith(1); // the id of the secret
  66. });
  67. it('does not allow to remove while removing in progress', function () {
  68. const props = {
  69. ...defaultProps,
  70. isRemoving: true,
  71. };
  72. render(<OrganizationFeatureFlagsProviderRow {...props} />);
  73. expect(
  74. screen.getByRole('button', {name: 'Remove secret for launchdarkly provider'})
  75. ).toBeDisabled();
  76. });
  77. });
  78. });