import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import { NotificationSettingsObject, SELF_NOTIFICATION_SETTINGS_TYPES, } from 'sentry/views/settings/account/notifications/constants'; import {NOTIFICATION_SETTING_FIELDS} from 'sentry/views/settings/account/notifications/fields2'; import NotificationSettings from 'sentry/views/settings/account/notifications/notificationSettings'; function renderMockRequests({ notificationSettings, }: { notificationSettings: NotificationSettingsObject; }) { MockApiClient.addMockResponse({ url: '/users/me/notification-settings/', method: 'GET', body: notificationSettings, }); MockApiClient.addMockResponse({ url: '/users/me/notifications/', method: 'GET', body: { personalActivityNotifications: true, selfAssignOnResolve: true, weeklyReports: true, }, }); } describe('NotificationSettings', function () { it('should render', function () { const {routerContext, organization} = initializeOrg(); renderMockRequests({ notificationSettings: { alerts: {user: {me: {email: 'never', slack: 'never'}}}, deploy: {user: {me: {email: 'never', slack: 'never'}}}, workflow: {user: {me: {email: 'never', slack: 'never'}}}, }, }); render(, { context: routerContext, }); // There are 8 notification setting Selects/Toggles. [ 'alerts', 'workflow', 'deploy', 'approval', 'reports', 'email', ...SELF_NOTIFICATION_SETTINGS_TYPES, ].forEach(field => { expect( screen.getByText(String(NOTIFICATION_SETTING_FIELDS[field].label)) ).toBeInTheDocument(); }); expect(screen.getByText('Issue Alerts')).toBeInTheDocument(); }); it('renders quota section with feature flag', function () { const {routerContext, organization} = initializeOrg({ ...initializeOrg(), organization: { ...initializeOrg().organization, features: ['slack-overage-notifications'], }, }); renderMockRequests({ notificationSettings: { alerts: {user: {me: {email: 'never', slack: 'never'}}}, deploy: {user: {me: {email: 'never', slack: 'never'}}}, workflow: {user: {me: {email: 'never', slack: 'never'}}}, }, }); render(, { context: routerContext, }); // There are 9 notification setting Selects/Toggles. [ 'alerts', 'workflow', 'deploy', 'approval', 'quota', 'reports', 'email', ...SELF_NOTIFICATION_SETTINGS_TYPES, ].forEach(field => { expect( screen.getByText(String(NOTIFICATION_SETTING_FIELDS[field].label)) ).toBeInTheDocument(); }); }); it('renders active release monitor', function () { const {routerContext, organization} = initializeOrg({ ...initializeOrg(), organization: { ...initializeOrg().organization, features: ['active-release-monitor-alpha'], }, }); renderMockRequests({ notificationSettings: { alerts: {user: {me: {email: 'never', slack: 'never'}}}, deploy: {user: {me: {email: 'never', slack: 'never'}}}, workflow: {user: {me: {email: 'never', slack: 'never'}}}, }, }); render(, { context: routerContext, }); // There are 9 notification setting Selects/Toggles. [ 'alerts', 'activeRelease', 'workflow', 'deploy', 'approval', 'reports', 'email', ...SELF_NOTIFICATION_SETTINGS_TYPES, ].forEach(field => { if (field === 'activeRelease') { expect(screen.getByText('Release Issues')).toBeInTheDocument(); return; } expect( screen.getByText(String(NOTIFICATION_SETTING_FIELDS[field].label)) ).toBeInTheDocument(); }); }); });