import {OrganizationFixture} from 'sentry-fixture/organization';
import {ProjectFixture} from 'sentry-fixture/project';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import {openModal} from 'sentry/actionCreators/modal';
import SetupAlertIntegrationButton from 'sentry/views/alerts/rules/issue/setupAlertIntegrationButton';
jest.mock('sentry/actionCreators/modal');
describe('SetupAlertIntegrationButton', function () {
const organization = OrganizationFixture();
const featureOrg = OrganizationFixture({
features: ['messaging-integration-onboarding'],
});
const project = ProjectFixture();
it('renders slack button if no alert integrations when feature flag is off', function () {
MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/?expand=hasAlertIntegration`,
body: {
...project,
hasAlertIntegrationInstalled: false,
},
});
const {container} = render(
);
expect(container).toHaveTextContent('Set Up Slack Now');
});
it('does not render button if alert integration installed when feature flag is off', function () {
MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/?expand=hasAlertIntegration`,
body: {
...project,
hasAlertIntegrationInstalled: true,
},
});
const {container} = render(
);
expect(container).not.toHaveTextContent('Set Up Slack Now');
});
it('renders connect to messaging button when feature flag is on', function () {
MockApiClient.addMockResponse({
url: `/projects/${featureOrg.slug}/${project.slug}/?expand=hasAlertIntegration`,
body: {
...project,
hasAlertIntegrationInstalled: false,
},
});
const {container} = render(
);
expect(container).toHaveTextContent('Connect to messaging');
});
it('does not render button if alert integration installed when feature flag is on', function () {
MockApiClient.addMockResponse({
url: `/projects/${featureOrg.slug}/${project.slug}/?expand=hasAlertIntegration`,
body: {
...project,
hasAlertIntegrationInstalled: true,
},
});
const {container} = render(
);
expect(container).not.toHaveTextContent('Connect to messaging');
});
it('opens modal when clicked', async () => {
MockApiClient.addMockResponse({
url: `/projects/${featureOrg.slug}/${project.slug}/?expand=hasAlertIntegration`,
body: {
...project,
hasAlertIntegrationInstalled: false,
},
});
render(
);
await userEvent.click(screen.getByLabelText('Connect to messaging'));
expect(openModal).toHaveBeenCalled();
});
});