import {SecretFixture} from 'sentry-fixture/secret';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import * as indicators from 'sentry/actionCreators/indicator';
import OrganizationsStore from 'sentry/stores/organizationsStore';
import OrganizationFeatureFlagsNewSecet from 'sentry/views/settings/featureFlags/organizationFeatureFlagsNewSecret';
describe('OrganizationFeatureFlagsNewSecret', function () {
const ENDPOINT = '/organizations/org-slug/flags/signing-secrets/';
const {organization} = initializeOrg();
beforeEach(function () {
OrganizationsStore.addOrReplace(organization);
});
afterEach(function () {
MockApiClient.clearMockResponses();
});
it('can create secret', async function () {
render();
const mock = MockApiClient.addMockResponse({
url: ENDPOINT,
method: 'POST',
});
await userEvent.type(screen.getByLabelText('Secret'), SecretFixture().secret);
const providerDropdown = screen.getByRole('textbox', {
name: 'Provider',
});
await userEvent.click(providerDropdown);
await userEvent.click(screen.getByRole('menuitemradio', {name: 'LaunchDarkly'}));
await userEvent.click(screen.getByRole('button', {name: 'Add Provider'}));
expect(screen.getByRole('textbox', {name: 'Secret'})).toHaveValue(
SecretFixture().secret
);
expect(mock).toHaveBeenCalledWith(
ENDPOINT,
expect.objectContaining({
data: {
provider: 'launchdarkly',
secret: SecretFixture().secret,
},
})
);
});
it('handles API errors when creating secret', async function () {
jest.spyOn(indicators, 'addErrorMessage');
render();
const mock = MockApiClient.addMockResponse({
url: ENDPOINT,
method: 'POST',
body: {
detail: 'Test API error occurred.',
},
statusCode: 403,
});
await userEvent.type(screen.getByLabelText('Secret'), SecretFixture().secret);
const providerDropdown = screen.getByRole('textbox', {
name: 'Provider',
});
await userEvent.click(providerDropdown);
await userEvent.click(screen.getByRole('menuitemradio', {name: 'LaunchDarkly'}));
await userEvent.click(screen.getByRole('button', {name: 'Add Provider'}));
expect(indicators.addErrorMessage).toHaveBeenCalledWith(
'Failed to add provider or secret.'
);
expect(mock).toHaveBeenCalledWith(
ENDPOINT,
expect.objectContaining({
data: {
provider: 'launchdarkly',
secret: SecretFixture().secret,
},
})
);
});
});