import {OrganizationFixture} from 'sentry-fixture/organization';
import {PlanMigrationFixture} from 'getsentry-test/fixtures/planMigration';
import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription';
import {
cleanup,
render,
screen,
waitForElementToBeRemoved,
} from 'sentry-test/reactTestingLibrary';
import SubscriptionStore from 'getsentry/stores/subscriptionStore';
import {CohortId} from 'getsentry/types';
import LegacyPlanToggle from 'getsentry/views/amCheckout/legacyPlanToggle';
describe('LegacyPlanToggle', function () {
const organization = OrganizationFixture();
beforeEach(function () {
MockApiClient.addMockResponse({
url: `/customers/${organization.slug}/plan-migrations/?applied=0`,
body: [],
});
});
afterEach(function () {
cleanup();
SubscriptionStore.set(organization.slug, {});
MockApiClient.clearMockResponses();
});
describe('AMCheckout', function () {
it('renders for am1 paid plan', async function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am1',
plan: 'am1_team',
});
SubscriptionStore.set(org.slug, subscription);
render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(
await screen.findByRole('button', {name: 'Show previous plans'})
).toBeInTheDocument();
});
it('renders for am1 paid plan in previous checkout', async function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am1',
plan: 'am1_team',
});
SubscriptionStore.set(org.slug, subscription);
render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(screen.getByRole('button', {name: 'Show latest plans'})).toBeInTheDocument();
});
it('does not render for am1 free plan', async function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am1',
plan: 'am1_f',
});
SubscriptionStore.set(org.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render for am2 free plan', async function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am2',
plan: 'am2_f',
});
SubscriptionStore.set(org.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render for am2 paid plan', async function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am2',
plan: 'am2_team',
});
SubscriptionStore.set(org.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render for am3 free plan', function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am3',
plan: 'am3_f',
});
SubscriptionStore.set(org.slug, subscription);
const {container} = render(
);
expect(container).toBeEmptyDOMElement();
});
it('does not render for am3 paid plan', function () {
const org = OrganizationFixture();
const subscription = SubscriptionFixture({
organization: org,
planTier: 'am3',
plan: 'am3_team',
});
SubscriptionStore.set(org.slug, subscription);
const {container} = render(
);
expect(container).toBeEmptyDOMElement();
});
it('does not render with mm2 paid plan', async function () {
const subscription = SubscriptionFixture({
organization,
planTier: 'mm2',
plan: 'mm2_b_100k',
});
SubscriptionStore.set(organization.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render with mm2 paid plan and pending plan migration', async function () {
MockApiClient.addMockResponse({
url: `/customers/${organization.slug}/plan-migrations/?applied=0`,
body: PlanMigrationFixture({cohortId: CohortId.SECOND}),
});
const subscription = SubscriptionFixture({
organization,
planTier: 'mm2',
plan: 'mm2_b_100k',
});
SubscriptionStore.set(organization.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render with mm2 free plan', async function () {
const subscription = SubscriptionFixture({
organization,
planTier: 'mm2',
plan: 'mm2_f',
});
SubscriptionStore.set(organization.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render with mm1 free plan', async function () {
const subscription = SubscriptionFixture({
organization,
planTier: 'mm1',
plan: 'f1',
});
SubscriptionStore.set(organization.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
it('does not render with mm1 paid plan', async function () {
const subscription = SubscriptionFixture({
organization,
planTier: 'mm1',
plan: 'm1',
});
SubscriptionStore.set(organization.slug, subscription);
const {container} = render(
);
await waitForElementToBeRemoved(screen.queryByTestId('loading-indicator'));
expect(container).toBeEmptyDOMElement();
});
});
});