subscriptionCard.spec.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import moment from 'moment-timezone';
  2. import {OrganizationFixture} from 'sentry-fixture/organization';
  3. import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription';
  4. import {render, screen} from 'sentry-test/reactTestingLibrary';
  5. import {SubscriptionCard} from './subscriptionCard';
  6. describe('SubscriptionCard', () => {
  7. const organization = OrganizationFixture({access: ['org:billing']});
  8. it('should render plan name, next renewal date, card info', () => {
  9. const subscription = SubscriptionFixture({
  10. organization,
  11. planTier: 'am2',
  12. plan: 'am2_team',
  13. contractPeriodEnd: moment().add(1, 'month').toISOString(),
  14. });
  15. render(<SubscriptionCard organization={organization} subscription={subscription} />);
  16. expect(screen.getByRole('img', {name: 'Team logo'})).toBeInTheDocument();
  17. expect(screen.getByText('Team Plan')).toBeInTheDocument();
  18. expect(screen.getByText('($29/mo)')).toBeInTheDocument();
  19. // Renews in xyz days, changes based on the frozen test date
  20. expect(screen.getByText(/Renews on:/)).toBeInTheDocument();
  21. // Card info
  22. expect(screen.getByText('CC: **** 4242')).toBeInTheDocument();
  23. expect(screen.getByText('Exp: 12/77')).toBeInTheDocument();
  24. });
  25. it('should render past due', () => {
  26. const subscription = SubscriptionFixture({
  27. organization,
  28. planTier: 'am2',
  29. plan: 'am2_team',
  30. // Indicates an issue with payment
  31. isPastDue: true,
  32. });
  33. render(<SubscriptionCard organization={organization} subscription={subscription} />);
  34. expect(screen.getByText('Payment Failed')).toBeInTheDocument();
  35. expect(
  36. screen.getByRole('button', {name: 'Manage Billing Details'})
  37. ).toBeInTheDocument();
  38. });
  39. it('should render no credit card', () => {
  40. const subscription = SubscriptionFixture({
  41. organization,
  42. planTier: 'am2',
  43. plan: 'am2_team',
  44. paymentSource: null,
  45. });
  46. render(<SubscriptionCard organization={organization} subscription={subscription} />);
  47. expect(screen.getByText(/No Card on File/)).toBeInTheDocument();
  48. });
  49. it('should not show No Card on File for VC partner accounts', () => {
  50. const subscription = SubscriptionFixture({
  51. organization,
  52. planTier: 'am3',
  53. plan: 'am3_team',
  54. paymentSource: null,
  55. partner: {
  56. externalId: 'x123x',
  57. name: 'Org',
  58. partnership: {
  59. id: 'VC',
  60. displayName: 'XX',
  61. supportNote: '',
  62. },
  63. isActive: true,
  64. },
  65. });
  66. render(<SubscriptionCard organization={organization} subscription={subscription} />);
  67. expect(screen.queryByText(/No Card on File/)).not.toBeInTheDocument();
  68. });
  69. it('should render annual subscription', () => {
  70. const subscription = SubscriptionFixture({
  71. organization,
  72. planTier: 'am2',
  73. // Is an annual plan
  74. plan: 'am2_team_auf',
  75. });
  76. render(<SubscriptionCard organization={organization} subscription={subscription} />);
  77. expect(screen.getByText('($312/yr)')).toBeInTheDocument();
  78. });
  79. it('should render developer plan', () => {
  80. const subscription = SubscriptionFixture({
  81. organization,
  82. planTier: 'am2',
  83. plan: 'am2_f',
  84. });
  85. render(<SubscriptionCard organization={organization} subscription={subscription} />);
  86. expect(screen.queryByRole('img')).not.toBeInTheDocument();
  87. expect(screen.getByText('($0)')).toBeInTheDocument();
  88. });
  89. it('hides credit card info if user does not have billing access', () => {
  90. const subscription = SubscriptionFixture({
  91. organization,
  92. planTier: 'am2',
  93. plan: 'am2_team',
  94. });
  95. render(
  96. <SubscriptionCard
  97. organization={{...organization, access: []}}
  98. subscription={subscription}
  99. />
  100. );
  101. expect(screen.getByRole('img', {name: 'Team logo'})).toBeInTheDocument();
  102. expect(screen.queryByText(/4242/)).not.toBeInTheDocument();
  103. });
  104. });