2025-04-01 10:38:02 +09:00

78 lines
3.4 KiB
TypeScript

import 'core-js/stable/structured-clone';
import { Route, Routes } from 'react-router-dom-v5-compat';
import { clickSelectOption } from 'test/helpers/selectOptionInTest';
import { render, screen } from 'test/test-utils';
import EditContactPoint from 'app/features/alerting/unified/components/contact-points/EditContactPoint';
import { AccessControlAction } from 'app/types';
import { setupMswServer } from '../../mockApi';
import { grantUserPermissions } from '../../mocks';
setupMswServer();
const Index = () => {
return <div>redirected</div>;
};
const renderEditContactPoint = (contactPointUid: string) =>
render(
<Routes>
<Route path="/alerting/notifications" element={<Index />} />
<Route path="/alerting/notifications/receivers/:name/edit" element={<EditContactPoint />} />
</Routes>,
{
historyOptions: { initialEntries: [`/alerting/notifications/receivers/${contactPointUid}/edit`] },
}
);
beforeEach(() => {
grantUserPermissions([AccessControlAction.AlertingNotificationsRead, AccessControlAction.AlertingNotificationsWrite]);
});
const getTemplatePreviewContent = async () =>
await screen.findByRole('presentation', { description: /Preview with the default payload/i });
const templatesSelectorTestId = 'existing-templates-selector';
describe('Edit contact point', () => {
jest.retryTimes(2);
it('can edit a contact point with existing template field values', async () => {
const { user } = renderEditContactPoint('lotsa-emails');
// Expand settings and open "edit message template" drawer
await user.click(await screen.findByText(/optional email settings/i));
await user.click(await screen.findByRole('button', { name: /edit message/i }));
expect(await screen.findByRole('dialog', { name: /edit message/i })).toBeInTheDocument();
expect(await getTemplatePreviewContent()).toHaveTextContent(/some example preview for slack-template/i);
// Change the preset template and check that the preview updates correctly
await clickSelectOption(screen.getByTestId(templatesSelectorTestId), 'custom-email');
expect(await getTemplatePreviewContent()).toHaveTextContent(/some example preview for custom-email/i);
// Close the drawer
await user.click(screen.getByRole('button', { name: /^save$/i }));
// Check a setting that has an existing custom value, and change it to a preset template
await user.click(await screen.findByRole('button', { name: /edit subject/i }));
expect(await screen.findByRole('dialog', { name: /edit subject/i })).toBeInTheDocument();
// If this isn't correct, then we haven't set the correct initial state for the radio buttons/tabs
expect(await screen.findByLabelText(/custom template value/i)).toHaveValue('some custom value');
await user.click(screen.getByRole('radio', { name: /select notification template/i }));
await clickSelectOption(screen.getByTestId(templatesSelectorTestId), 'slack-template');
expect(await getTemplatePreviewContent()).toHaveTextContent(/some example preview for slack-template/i);
// Close the drawer
await user.click(screen.getByRole('button', { name: /^save$/i }));
expect(await screen.findByText(/template: custom-email/i)).toBeInTheDocument();
expect(await screen.findByText(/template: slack-template/i)).toBeInTheDocument();
await user.click(screen.getByRole('button', { name: /save contact point/i }));
expect(await screen.findByText(/redirected/i)).toBeInTheDocument();
}, 600000);
});