organizationFeatureFlagsNewSecret.spec.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import {SecretFixture} from 'sentry-fixture/secret';
  2. import {initializeOrg} from 'sentry-test/initializeOrg';
  3. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  4. import * as indicators from 'sentry/actionCreators/indicator';
  5. import OrganizationsStore from 'sentry/stores/organizationsStore';
  6. import OrganizationFeatureFlagsNewSecet from 'sentry/views/settings/featureFlags/organizationFeatureFlagsNewSecret';
  7. describe('OrganizationFeatureFlagsNewSecret', function () {
  8. const ENDPOINT = '/organizations/org-slug/flags/signing-secrets/';
  9. const {organization} = initializeOrg();
  10. beforeEach(function () {
  11. OrganizationsStore.addOrReplace(organization);
  12. });
  13. afterEach(function () {
  14. MockApiClient.clearMockResponses();
  15. });
  16. it('can create secret', async function () {
  17. render(<OrganizationFeatureFlagsNewSecet />);
  18. const mock = MockApiClient.addMockResponse({
  19. url: ENDPOINT,
  20. method: 'POST',
  21. });
  22. await userEvent.type(screen.getByLabelText('Secret'), SecretFixture().secret);
  23. const providerDropdown = screen.getByRole('textbox', {
  24. name: 'Provider',
  25. });
  26. await userEvent.click(providerDropdown);
  27. await userEvent.click(screen.getByRole('menuitemradio', {name: 'LaunchDarkly'}));
  28. await userEvent.click(screen.getByRole('button', {name: 'Add Provider'}));
  29. expect(screen.getByRole('textbox', {name: 'Secret'})).toHaveValue(
  30. SecretFixture().secret
  31. );
  32. expect(mock).toHaveBeenCalledWith(
  33. ENDPOINT,
  34. expect.objectContaining({
  35. data: {
  36. provider: 'launchdarkly',
  37. secret: SecretFixture().secret,
  38. },
  39. })
  40. );
  41. });
  42. it('handles API errors when creating secret', async function () {
  43. jest.spyOn(indicators, 'addErrorMessage');
  44. render(<OrganizationFeatureFlagsNewSecet />);
  45. const mock = MockApiClient.addMockResponse({
  46. url: ENDPOINT,
  47. method: 'POST',
  48. body: {
  49. detail: 'Test API error occurred.',
  50. },
  51. statusCode: 403,
  52. });
  53. await userEvent.type(screen.getByLabelText('Secret'), SecretFixture().secret);
  54. const providerDropdown = screen.getByRole('textbox', {
  55. name: 'Provider',
  56. });
  57. await userEvent.click(providerDropdown);
  58. await userEvent.click(screen.getByRole('menuitemradio', {name: 'LaunchDarkly'}));
  59. await userEvent.click(screen.getByRole('button', {name: 'Add Provider'}));
  60. expect(indicators.addErrorMessage).toHaveBeenCalledWith(
  61. 'Failed to add provider or secret.'
  62. );
  63. expect(mock).toHaveBeenCalledWith(
  64. ENDPOINT,
  65. expect.objectContaining({
  66. data: {
  67. provider: 'launchdarkly',
  68. secret: SecretFixture().secret,
  69. },
  70. })
  71. );
  72. });
  73. });