import {initializeOrg} from 'sentry-test/initializeOrg';
import {
render,
renderGlobalModal,
screen,
userEvent,
} from 'sentry-test/reactTestingLibrary';
import TeamNotificationSettings from 'sentry/views/settings/organizationTeams/teamNotifications';
const EXTERNAL_NAME = 'marcos';
const EXAMPLE_EXTERNAL_TEAM = {
externalName: EXTERNAL_NAME,
id: '1',
integrationId: '1',
provider: 'slack',
};
const EXAMPLE_INTEGRATION = {
id: '1',
provider: {
key: 'slack',
},
};
describe('TeamNotificationSettings', () => {
const {organization, routerContext, routerProps} = initializeOrg();
const team = TestStubs.Team();
beforeEach(() => {
MockApiClient.clearMockResponses();
});
it('should render empty message when there are no integrations', () => {
MockApiClient.addMockResponse({
url: `/teams/${organization.slug}/${team.slug}/`,
body: {
externalTeams: [EXAMPLE_EXTERNAL_TEAM],
},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/integrations/`,
body: [],
});
render(
,
{context: routerContext}
);
expect(
screen.getByText('No Notification Integrations have been installed yet.')
).toBeInTheDocument();
});
it('should render empty message when there are no externalTeams', () => {
MockApiClient.addMockResponse({
url: `/teams/${organization.slug}/${team.slug}/`,
body: {
externalTeams: [],
},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/integrations/`,
body: [EXAMPLE_INTEGRATION],
});
render(
,
{
context: routerContext,
}
);
expect(screen.getByText('No teams have been linked yet.')).toBeInTheDocument();
});
it('should render each externalTeam', () => {
MockApiClient.addMockResponse({
url: `/teams/${organization.slug}/${team.slug}/`,
body: {
externalTeams: [EXAMPLE_EXTERNAL_TEAM],
},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/integrations/`,
body: [EXAMPLE_INTEGRATION],
});
render(
,
{
context: routerContext,
}
);
const input = screen.getByRole('textbox', {
name: 'Unlink this channel in slack with `/slack unlink team`',
});
expect(input).toBeDisabled();
expect(input).toHaveValue(EXTERNAL_NAME);
expect(screen.getByRole('button', {name: 'delete'})).toBeInTheDocument();
});
it('should delete be able to delete the externalTeam', async () => {
MockApiClient.addMockResponse({
url: `/teams/${organization.slug}/${team.slug}/`,
body: {
externalTeams: [EXAMPLE_EXTERNAL_TEAM],
},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/integrations/`,
body: [EXAMPLE_INTEGRATION],
});
const deleteMock = MockApiClient.addMockResponse({
url: `/teams/${organization.slug}/${team.slug}/external-teams/${EXAMPLE_EXTERNAL_TEAM.id}/`,
status: 204,
method: 'DELETE',
});
render(
,
{
context: routerContext,
}
);
await userEvent.click(screen.getByRole('button', {name: 'delete'}));
renderGlobalModal();
await userEvent.click(screen.getByTestId('confirm-button'));
expect(deleteMock).toHaveBeenCalled();
});
});