utils.spec.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import {OrganizationFixture} from 'sentry-fixture/organization';
  2. import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription';
  3. import {calculateTotalSpend} from './utils';
  4. describe('calculateTotalSpend', () => {
  5. const organization = OrganizationFixture({features: ['ondemand-budgets']});
  6. it('should calculate reserved usage based on total price', () => {
  7. const subscription = SubscriptionFixture({
  8. organization,
  9. planTier: 'am2',
  10. plan: 'am2_f',
  11. onDemandSpendUsed: 0,
  12. });
  13. subscription.categories.errors!.onDemandSpendUsed = 0;
  14. subscription.planDetails.planCategories.errors = [
  15. {events: 100_000, price: 10000, unitPrice: 0.1, onDemandPrice: 0.2},
  16. ];
  17. subscription.categories.errors!.reserved = 100_000;
  18. subscription.categories.errors!.usage = 50_000;
  19. expect(calculateTotalSpend(subscription)).toEqual({
  20. prepaidTotalSpent: 5000,
  21. prepaidTotalPrice: 10000,
  22. onDemandTotalSpent: 0,
  23. });
  24. });
  25. it('should calculate on demand usage', () => {
  26. const subscription = SubscriptionFixture({
  27. organization,
  28. planTier: 'am2',
  29. plan: 'am2_f',
  30. });
  31. subscription.categories.errors!.onDemandSpendUsed = 10_000;
  32. subscription.planDetails.planCategories.errors = [
  33. {events: 100_000, price: 10000, unitPrice: 0.1, onDemandPrice: 0.2},
  34. ];
  35. subscription.categories.errors!.reserved = 100_000;
  36. // Usage exceeds reserved
  37. subscription.categories.errors!.usage = 150_000;
  38. expect(calculateTotalSpend(subscription)).toEqual({
  39. prepaidTotalSpent: 10_000,
  40. prepaidTotalPrice: 10_000,
  41. // Directly from onDemandSpendUsed
  42. onDemandTotalSpent: 10_000,
  43. });
  44. });
  45. it('should convert annual prepaid price to monthly', () => {
  46. const subscription = SubscriptionFixture({
  47. organization,
  48. planTier: 'am2',
  49. plan: 'am2_f',
  50. });
  51. subscription.planDetails.billingInterval = 'annual';
  52. const monthlyPrice = 10000;
  53. subscription.planDetails.planCategories.errors = [
  54. {events: 100_000, price: monthlyPrice * 12, unitPrice: 0.1, onDemandPrice: 0.2},
  55. ];
  56. expect(calculateTotalSpend(subscription)).toEqual({
  57. prepaidTotalSpent: 0,
  58. prepaidTotalPrice: monthlyPrice,
  59. onDemandTotalSpent: 0,
  60. });
  61. });
  62. });