import {MemberFixture} from 'sentry-fixture/member'; import {OrganizationFixture} from 'sentry-fixture/organization'; import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import {resetMockDate, setMockDate} from 'sentry-test/utils'; import TrialEndingModal from 'getsentry/components/trialEndingModal'; import SubscriptionStore from 'getsentry/stores/subscriptionStore'; describe('TrialEndingModal', function () { beforeEach(() => { setMockDate(new Date('2021-03-03')); MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: `/organizations/org-slug/members/`, method: 'GET', body: [ MemberFixture({ email: 'admin@example.com', }), ], }); }); afterEach(() => { resetMockDate(); }); it('shows request upgrade when user does not have billing permissions', function () { const org = OrganizationFixture({access: []}); const sub = SubscriptionFixture({organization: org}); SubscriptionStore.set(org.slug, sub); render(); expect(screen.getByTestId('trial-ending-modal')).toBeInTheDocument(); expect(screen.getByLabelText('Request Upgrade')).toBeInTheDocument(); }); it('shows an upgrade button with billing permission', function () { const org = OrganizationFixture({access: ['org:billing']}); const sub = SubscriptionFixture({organization: org}); SubscriptionStore.set(org.slug, sub); render(); expect(screen.getByTestId('trial-ending-modal')).toBeInTheDocument(); expect(screen.getByLabelText('Upgrade Now')).toBeInTheDocument(); }); it('displays 3 days left', function () { const org = OrganizationFixture({access: ['org:billing']}); const sub = SubscriptionFixture({organization: org, trialEnd: '2021-03-06'}); SubscriptionStore.set(org.slug, sub); render(); expect(screen.getByTestId('trial-ending-modal')).toBeInTheDocument(); expect(screen.getByText('Trial Ends in 3 Days')).toBeInTheDocument(); expect(screen.getByText(/Developer Plan in 3 days/)).toBeInTheDocument(); }); it('displays 1 day left', function () { const org = OrganizationFixture({access: ['org:billing']}); const sub = SubscriptionFixture({organization: org, trialEnd: '2021-03-04'}); SubscriptionStore.set(org.slug, sub); render(); expect(screen.getByText('Trial Ends in 1 Day')).toBeInTheDocument(); expect(screen.getByText(/Developer Plan in 1 day/)).toBeInTheDocument(); }); it('does not display negative days left', function () { const org = OrganizationFixture({access: ['org:billing']}); const sub = SubscriptionFixture({organization: org, trialEnd: '2021-03-01'}); SubscriptionStore.set(org.slug, sub); render(); expect(screen.queryByTestId('trial-ending-modal')).not.toBeInTheDocument(); }); });