| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /**
- * Pure-function tests for the Sources formatters.
- * No React, no network.
- */
- import { describe, expect, it } from 'vitest';
- import { formatDate, formatRateLimit, statusLabel, typeLabel } from '@/features/sources/format';
- import type { SourceStatus } from '@/features/sources/types';
- describe('formatRateLimit', () => {
- it('formats sub-1k as /s', () => {
- expect(formatRateLimit(0)).toBe('0/s');
- expect(formatRateLimit(1)).toBe('1/s');
- expect(formatRateLimit(999)).toBe('999/s');
- });
- it('formats 1k..999k as N.Nk/s', () => {
- expect(formatRateLimit(1_000)).toBe('1.0k/s');
- expect(formatRateLimit(2_500)).toBe('2.5k/s');
- expect(formatRateLimit(750_000)).toBe('750.0k/s');
- });
- it('formats >= 1M as N.NM/s', () => {
- expect(formatRateLimit(1_000_000)).toBe('1.0M/s');
- expect(formatRateLimit(2_500_000)).toBe('2.5M/s');
- });
- });
- describe('formatDate', () => {
- it('returns em-dash for null/undefined/empty', () => {
- expect(formatDate(null)).toBe('\u2014');
- expect(formatDate(undefined)).toBe('\u2014');
- expect(formatDate('')).toBe('\u2014');
- });
- it('returns the original string for unparseable input', () => {
- expect(formatDate('not-a-date')).toBe('not-a-date');
- });
- it('formats a valid ISO date', () => {
- const out = formatDate('2026-06-18T12:00:00Z');
- // Don't lock to a specific locale-dependent string; just
- // assert it does not contain 'Invalid'.
- expect(out).not.toMatch(/Invalid/);
- expect(out.length).toBeGreaterThan(0);
- });
- });
- describe('statusLabel', () => {
- it('humanizes the status values', () => {
- expect(statusLabel('active')).toBe('Active');
- expect(statusLabel('suspended')).toBe('Suspended');
- });
- it('returns the input when unknown', () => {
- expect(statusLabel('archived' as SourceStatus)).toBe('archived');
- });
- });
- describe('typeLabel', () => {
- it('humanizes the type values', () => {
- expect(typeLabel('http')).toBe('HTTP');
- expect(typeLabel('mqtt')).toBe('MQTT');
- expect(typeLabel('ws')).toBe('WebSocket');
- expect(typeLabel('grpc')).toBe('gRPC');
- });
- });
|