client-traffic-display.test.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { describe, it, expect } from 'vitest';
  2. import { computeTrafficDisplay } from '@/lib/clients/traffic-display';
  3. describe('computeTrafficDisplay', () => {
  4. const gb = 1024 * 1024 * 1024;
  5. it('returns 50% for half-used limited quota', () => {
  6. const d = computeTrafficDisplay(
  7. { up: 0.25 * gb, down: 0.25 * gb, total: gb, enabled: true, trafficDiff: 0 },
  8. false,
  9. );
  10. expect(d.percent).toBe(50);
  11. expect(d.isUnlimited).toBe(false);
  12. expect(d.remaining).toBe(0.5 * gb);
  13. });
  14. it('returns 100% bar for unlimited clients', () => {
  15. const d = computeTrafficDisplay(
  16. { up: 5 * gb, down: 2 * gb, total: 0, enabled: true, trafficDiff: 0 },
  17. false,
  18. );
  19. expect(d.percent).toBe(100);
  20. expect(d.isUnlimited).toBe(true);
  21. expect(d.strokeColor).toBe('#722ed1');
  22. });
  23. it('marks depleted clients with exception status', () => {
  24. const d = computeTrafficDisplay(
  25. { up: gb, down: 0, total: gb, enabled: true, trafficDiff: 0 },
  26. false,
  27. );
  28. expect(d.isDepleted).toBe(true);
  29. expect(d.status).toBe('exception');
  30. expect(d.percent).toBe(100);
  31. });
  32. it('uses gray stroke when client is disabled', () => {
  33. const d = computeTrafficDisplay(
  34. { up: 0.5 * gb, down: 0, total: gb, enabled: false, trafficDiff: 0 },
  35. false,
  36. );
  37. expect(d.strokeColor).toBe('#bcbcbc');
  38. expect(d.status).toBeUndefined();
  39. });
  40. it('uses warning color near traffic limit', () => {
  41. const diff = 0.1 * gb;
  42. const d = computeTrafficDisplay(
  43. { up: 0.95 * gb, down: 0, total: gb, enabled: true, trafficDiff: diff },
  44. false,
  45. );
  46. expect(d.strokeColor).toBe('#faad14');
  47. });
  48. });