| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /**
- * Pure-function tests for the Telegram bots formatters.
- * No React, no network.
- */
- import { describe, expect, it } from 'vitest';
- import {
- formatDate,
- formatDateTime,
- statusLabel,
- statusVariant,
- tokenSetLabel,
- tokenSetVariant,
- truncate,
- } from '@/features/telegram/format';
- import type { TelegramBotStatus } from '@/features/telegram/types';
- describe('statusLabel', () => {
- it('humanizes the status values', () => {
- expect(statusLabel('active')).toBe('Active');
- expect(statusLabel('paused')).toBe('Paused');
- });
- it('returns the input when unknown', () => {
- expect(statusLabel('weird' as TelegramBotStatus)).toBe('weird');
- });
- });
- describe('statusVariant', () => {
- it('maps active to success and paused to warning', () => {
- expect(statusVariant('active')).toBe('success');
- expect(statusVariant('paused')).toBe('warning');
- });
- });
- describe('tokenSetLabel', () => {
- it('renders Configured when set and Not set when unset', () => {
- expect(tokenSetLabel(true)).toBe('Configured');
- expect(tokenSetLabel(false)).toBe('Not set');
- });
- });
- describe('tokenSetVariant', () => {
- it('maps set to success and unset to warning', () => {
- expect(tokenSetVariant(true)).toBe('success');
- expect(tokenSetVariant(false)).toBe('warning');
- });
- });
- 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');
- expect(out).not.toMatch(/Invalid/);
- expect(out.length).toBeGreaterThan(0);
- });
- });
- describe('formatDateTime', () => {
- it('returns em-dash for null/undefined/empty', () => {
- expect(formatDateTime(null)).toBe('\u2014');
- expect(formatDateTime(undefined)).toBe('\u2014');
- expect(formatDateTime('')).toBe('\u2014');
- });
- it('formats a valid ISO date with a time component', () => {
- const out = formatDateTime('2026-06-18T12:34:00Z');
- expect(out).not.toMatch(/Invalid/);
- expect(out.length).toBeGreaterThan(0);
- });
- });
- describe('truncate', () => {
- it('returns em-dash for null/undefined/empty', () => {
- expect(truncate(null)).toBe('\u2014');
- expect(truncate(undefined)).toBe('\u2014');
- expect(truncate('')).toBe('\u2014');
- });
- it('returns the input when shorter than the cap', () => {
- expect(truncate('hello', 10)).toBe('hello');
- });
- it('truncates and adds an ellipsis when over the cap', () => {
- const out = truncate('this is a long string that will be cut off', 10);
- expect(out.endsWith('\u2026')).toBe(true);
- expect(out.length).toBe(10);
- });
- it('uses a default cap of 60', () => {
- const out = truncate('a'.repeat(80));
- expect(out.length).toBe(60);
- expect(out.endsWith('\u2026')).toBe(true);
- });
- });
|