import {
render,
renderGlobalModal,
screen,
userEvent,
} from 'sentry-test/reactTestingLibrary';
import {fetchPlugins} from 'sentry/actionCreators/plugins';
import ProjectReleaseTrackingContainer, {
ProjectReleaseTracking,
} from 'sentry/views/settings/project/projectReleaseTracking';
jest.mock('sentry/actionCreators/plugins', () => ({
fetchPlugins: jest.fn().mockResolvedValue([]),
}));
describe('ProjectReleaseTracking', function () {
const org = TestStubs.Organization();
const project = TestStubs.Project();
const url = `/projects/${org.slug}/${project.slug}/releases/token/`;
beforeEach(function () {
MockApiClient.clearMockResponses();
MockApiClient.addMockResponse({
url: `/projects/${org.slug}/${project.slug}/plugins/`,
method: 'GET',
body: TestStubs.Plugins(),
});
MockApiClient.addMockResponse({
url,
method: 'GET',
body: {
webhookUrl: 'webhook-url',
token: 'token token token',
},
});
});
it('renders with token', function () {
render(
);
expect(screen.getByRole('textbox')).toHaveValue('token token token');
});
it('can regenerate token', function () {
render(
);
const mock = MockApiClient.addMockResponse({
url,
method: 'POST',
body: {
webhookUrl: 'webhook-url',
token: 'token token token',
},
});
// Click Regenerate Token
userEvent.click(screen.getByRole('button', {name: 'Regenerate Token'}));
renderGlobalModal();
expect(screen.getByRole('dialog')).toBeInTheDocument();
expect(mock).not.toHaveBeenCalled();
userEvent.click(screen.getByRole('button', {name: 'Confirm'}));
expect(mock).toHaveBeenCalledWith(
url,
expect.objectContaining({
method: 'POST',
data: {
project: project.slug,
},
})
);
});
it('fetches new plugins when project changes', function () {
const {rerender} = render(
);
expect(fetchPlugins).toHaveBeenCalled();
fetchPlugins.mockClear();
// For example, this happens when we switch to a new project using settings breadcrumb
rerender(
);
expect(fetchPlugins).toHaveBeenCalledWith(
expect.objectContaining({
projectId: 'new-project',
})
);
fetchPlugins.mockClear();
// Does not call fetchPlugins if slug is the same
rerender(
);
expect(fetchPlugins).not.toHaveBeenCalled();
});
});