import {OrganizationFixture} from 'sentry-fixture/organization'; import {MetricHistoryFixture} from 'getsentry-test/fixtures/metricHistory'; import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import {OnDemandBudgetMode} from 'getsentry/types'; import {UsageCard} from './usageCard'; describe('UsageCard', () => { const organization = OrganizationFixture({features: ['ondemand-budgets']}); it('should render amount used and max available', () => { const subscription = SubscriptionFixture({ organization, planTier: 'am2', plan: 'am2_team', }); const prepaid = 100_000; subscription.categories.errors = MetricHistoryFixture({ prepaid, reserved: prepaid, }); render(); expect(screen.getByText('Included in Subscription').parentElement).toHaveTextContent( '0% of $15' ); expect(screen.getByTestId('current-monthly-spend')).toHaveTextContent('$44'); }); it('should render on demand max spend and prepaid', () => { const subscription = SubscriptionFixture({ organization, planTier: 'am2', plan: 'am2_team', onDemandMaxSpend: 1000, }); const prepaid = 100_000; subscription.categories.errors = MetricHistoryFixture({ prepaid, reserved: prepaid, }); render(); expect(screen.getByText('Included in Subscription').parentElement).toHaveTextContent( '0% of $15' ); expect(screen.getByText('On-Demand').parentElement).toHaveTextContent('$0 of $10'); expect(screen.getByText('On-Demand Spent')).toBeInTheDocument(); expect(screen.getByTestId('current-monthly-spend')).toHaveTextContent('$44'); }); it('should render PAYG spend for am3', () => { const subscription = SubscriptionFixture({ organization, planTier: 'am3', plan: 'am3_team', onDemandMaxSpend: 1000, onDemandBudgets: { budgetMode: OnDemandBudgetMode.SHARED, enabled: true, sharedMaxBudget: 1000, onDemandSpendUsed: 0, }, }); render(); expect(screen.getByText('Pay-as-you-go Spent')).toBeInTheDocument(); expect(screen.getByTestId('current-monthly-spend')).toHaveTextContent('$29'); }); it('should not render prepaid usage if org has no reserved spend', () => { const subscription = SubscriptionFixture({ organization, planTier: 'am2', plan: 'am2_business_auf', onDemandMaxSpend: 1000, }); render(); expect(screen.queryByText('Reserved')).not.toBeInTheDocument(); expect(screen.getByText('On-Demand')).toBeInTheDocument(); expect(screen.queryByText('Included In Subscription')).not.toBeInTheDocument(); expect(screen.getByTestId('current-monthly-spend')).toHaveTextContent('$960'); }); it('should not render anything for orgs with no spend', () => { const subscription = SubscriptionFixture({ organization, planTier: 'am2', plan: 'am2_team', }); const {container} = render( ); expect(container).toBeEmptyDOMElement(); }); it('should not render anything for free orgs', () => { const subscription = SubscriptionFixture({ organization, planTier: 'am2', plan: 'am2_f', }); const {container} = render( ); expect(container).toBeEmptyDOMElement(); }); });