import {OrganizationFixture} from 'sentry-fixture/organization'; import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription'; import {renderGlobalModal, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import {DataCategory} from 'sentry/types/core'; import AddGiftEventsAction from 'admin/components/addGiftEventsAction'; import {openAdminConfirmModal} from 'admin/components/adminConfirmationModal'; import {MAX_ADMIN_CATEGORY_GIFTS} from 'getsentry/constants'; describe('Gift', function () { const mockOrg = OrganizationFixture(); const mockSub = SubscriptionFixture({organization: mockOrg}); describe('Errors', function () { const triggerGiftModal = () => { openAdminConfirmModal({ renderModalSpecificContent: deps => ( ), }); }; function getErrorInput() { return screen.getByRole('textbox', { name: 'How many errors in multiples of 1,000s? (50 is 50,000 errors)', }); } async function setNumEvents(numEvents: string) { await userEvent.clear(getErrorInput()); await userEvent.type(getErrorInput(), numEvents); } it('has valid event volume', async function () { const maxValue = MAX_ADMIN_CATEGORY_GIFTS[DataCategory.ERRORS] / 1000; triggerGiftModal(); renderGlobalModal(); const errorInput = getErrorInput(); await setNumEvents('1'); expect(errorInput).toHaveValue('1'); expect(errorInput).toHaveAccessibleDescription('Total: 1,000'); await setNumEvents('-50'); expect(errorInput).toHaveValue('50'); expect(errorInput).toHaveAccessibleDescription('Total: 50,000'); await setNumEvents(`${maxValue + 5}`); expect(errorInput).toHaveValue('10000'); expect(errorInput).toHaveAccessibleDescription('Total: 10,000,000'); await setNumEvents('10,'); expect(errorInput).toHaveValue('10'); expect(errorInput).toHaveAccessibleDescription('Total: 10,000'); await setNumEvents('5.'); expect(errorInput).toHaveValue('5'); expect(errorInput).toHaveAccessibleDescription('Total: 5,000'); }); it('disables confirm button when no number is entered', function () { triggerGiftModal(); renderGlobalModal(); expect(screen.getByTestId('confirm-button')).toBeDisabled(); }); }); describe('Attachments', function () { const triggerGiftModal = () => { openAdminConfirmModal({ renderModalSpecificContent: deps => ( ), }); }; function getAttachmentsInput() { return screen.getByRole('textbox', { name: 'How many attachments in GB?', }); } async function setNumAttachments(numAttachments: string) { await userEvent.clear(getAttachmentsInput()); await userEvent.type(getAttachmentsInput(), numAttachments); } it('has valid event volume', async function () { const maxValue = MAX_ADMIN_CATEGORY_GIFTS[DataCategory.ATTACHMENTS]; triggerGiftModal(); renderGlobalModal(); const attachmentsInput = getAttachmentsInput(); await setNumAttachments('1'); expect(attachmentsInput).toHaveValue('1'); expect(attachmentsInput).toHaveAccessibleDescription('Total: 1 GB'); await setNumAttachments('-50'); expect(attachmentsInput).toHaveValue('50'); expect(attachmentsInput).toHaveAccessibleDescription('Total: 50 GB'); await setNumAttachments(`${maxValue + 5}`); expect(attachmentsInput).toHaveValue('10000'); expect(attachmentsInput).toHaveAccessibleDescription('Total: 10,000 GB'); await setNumAttachments('10,'); expect(attachmentsInput).toHaveValue('10'); expect(attachmentsInput).toHaveAccessibleDescription('Total: 10 GB'); await setNumAttachments('5.'); expect(attachmentsInput).toHaveValue('5'); expect(attachmentsInput).toHaveAccessibleDescription('Total: 5 GB'); }); it('disables confirm button when no number is entered', function () { triggerGiftModal(); renderGlobalModal(); expect(screen.getByTestId('confirm-button')).toBeDisabled(); }); }); describe('Profile Duration', function () { const triggerGiftModal = () => { openAdminConfirmModal({ renderModalSpecificContent: deps => ( ), }); }; function getProfileDurationInput() { return screen.getByRole('textbox', { name: 'How many profile hours?', }); } async function setProfileDuration(duration: string) { await userEvent.clear(getProfileDurationInput()); await userEvent.type(getProfileDurationInput(), duration); } it('has valid profile duration input', async function () { const maxValue = MAX_ADMIN_CATEGORY_GIFTS[DataCategory.PROFILE_DURATION]; triggerGiftModal(); renderGlobalModal(); const profileDurationInput = getProfileDurationInput(); await setProfileDuration('1'); expect(profileDurationInput).toHaveValue('1'); expect(profileDurationInput).toHaveAccessibleDescription('Total: 1 hour'); await setProfileDuration('-50'); expect(profileDurationInput).toHaveValue('50'); expect(profileDurationInput).toHaveAccessibleDescription('Total: 50 hours'); await setProfileDuration(`${maxValue + 5}`); expect(profileDurationInput).toHaveValue('10000'); expect(profileDurationInput).toHaveAccessibleDescription('Total: 10,000 hours'); await setProfileDuration('10,'); expect(profileDurationInput).toHaveValue('10'); expect(profileDurationInput).toHaveAccessibleDescription('Total: 10 hours'); await setProfileDuration('5.'); expect(profileDurationInput).toHaveValue('5'); expect(profileDurationInput).toHaveAccessibleDescription('Total: 5 hours'); }); it('disables confirm button when no number is entered', function () { triggerGiftModal(); renderGlobalModal(); expect(screen.getByTestId('confirm-button')).toBeDisabled(); }); }); describe('Replays', function () { const triggerGiftModal = () => { openAdminConfirmModal({ renderModalSpecificContent: deps => ( ), }); }; function getReplayInput() { return screen.getByRole('textbox', { name: 'How many replays? (50 is 50 replays)', }); } async function setNumReplays(numReplays: string) { await userEvent.clear(getReplayInput()); await userEvent.type(getReplayInput(), numReplays); } it('has valid replay input', async function () { const maxValue = MAX_ADMIN_CATEGORY_GIFTS[DataCategory.REPLAYS]; triggerGiftModal(); renderGlobalModal(); const replayInput = getReplayInput(); await setNumReplays('1'); expect(replayInput).toHaveValue('1'); expect(replayInput).toHaveAccessibleDescription('Total: 1'); await setNumReplays('-50'); expect(replayInput).toHaveValue('50'); expect(replayInput).toHaveAccessibleDescription('Total: 50'); await setNumReplays(`${maxValue + 5}`); expect(replayInput).toHaveValue('1000000'); expect(replayInput).toHaveAccessibleDescription('Total: 1,000,000'); await setNumReplays('10,'); expect(replayInput).toHaveValue('10'); expect(replayInput).toHaveAccessibleDescription('Total: 10'); await setNumReplays('5.'); expect(replayInput).toHaveValue('5'); expect(replayInput).toHaveAccessibleDescription('Total: 5'); }); it('disables confirm button when no number is entered', function () { triggerGiftModal(); renderGlobalModal(); expect(screen.getByTestId('confirm-button')).toBeDisabled(); }); }); describe('Monitors', function () { const triggerGiftModal = () => { openAdminConfirmModal({ renderModalSpecificContent: deps => ( ), }); }; function getMonitorInput() { return screen.getByRole('textbox', { name: 'How many cron monitors? (50 is 50 cron monitors)', }); } async function setNumMonitors(numMonitors: string) { await userEvent.clear(getMonitorInput()); await userEvent.type(getMonitorInput(), numMonitors); } it('has valid monitor input', async function () { const maxValue = MAX_ADMIN_CATEGORY_GIFTS[DataCategory.MONITOR_SEATS]; triggerGiftModal(); renderGlobalModal(); const monitorInput = getMonitorInput(); await setNumMonitors('1'); expect(monitorInput).toHaveValue('1'); expect(monitorInput).toHaveAccessibleDescription('Total: 1'); await setNumMonitors('-50'); expect(monitorInput).toHaveValue('50'); expect(monitorInput).toHaveAccessibleDescription('Total: 50'); await setNumMonitors(`${maxValue + 5}`); expect(monitorInput).toHaveValue('10000'); expect(monitorInput).toHaveAccessibleDescription('Total: 10,000'); await setNumMonitors('10,'); expect(monitorInput).toHaveValue('10'); expect(monitorInput).toHaveAccessibleDescription('Total: 10'); await setNumMonitors('5.'); expect(monitorInput).toHaveValue('5'); expect(monitorInput).toHaveAccessibleDescription('Total: 5'); }); it('disables confirm button when no number is entered', function () { triggerGiftModal(); renderGlobalModal(); expect(screen.getByTestId('confirm-button')).toBeDisabled(); }); }); describe('Uptime Monitors', function () { const triggerGiftModal = () => { openAdminConfirmModal({ renderModalSpecificContent: deps => ( ), }); }; function getMonitorInput() { return screen.getByRole('textbox', { name: 'How many uptime monitors? (50 is 50 uptime monitors)', }); } async function setNumMonitors(numMonitors: string) { await userEvent.clear(getMonitorInput()); await userEvent.type(getMonitorInput(), numMonitors); } it('has valid monitor input', async function () { const maxValue = MAX_ADMIN_CATEGORY_GIFTS[DataCategory.UPTIME]; triggerGiftModal(); renderGlobalModal(); const monitorInput = getMonitorInput(); await setNumMonitors('1'); expect(monitorInput).toHaveValue('1'); expect(monitorInput).toHaveAccessibleDescription('Total: 1'); await setNumMonitors('-50'); expect(monitorInput).toHaveValue('50'); expect(monitorInput).toHaveAccessibleDescription('Total: 50'); await setNumMonitors(`${maxValue + 5}`); expect(monitorInput).toHaveValue('10000'); expect(monitorInput).toHaveAccessibleDescription('Total: 10,000'); await setNumMonitors('10,'); expect(monitorInput).toHaveValue('10'); expect(monitorInput).toHaveAccessibleDescription('Total: 10'); await setNumMonitors('5.'); expect(monitorInput).toHaveValue('5'); expect(monitorInput).toHaveAccessibleDescription('Total: 5'); }); it('disables confirm button when no number is entered', function () { triggerGiftModal(); renderGlobalModal(); expect(screen.getByTestId('confirm-button')).toBeDisabled(); }); }); });