/**
 * Tests for components/context-overflow-shared.js
 *
 * Pure HTML renderer for the truncation status badge shown in
 * context-overflow details. The single branch (count > 0 vs not) drives
 * which CSS variable the badge uses, so a regression here would change
 * the surfaced color and wording.
 */

import '@js/components/context-overflow-shared.js';

const { renderTruncationBadge } = window.contextOverflowShared;

describe('renderTruncationBadge', () => {
    it('returns the "No truncation" badge when count is 0', () => {
        const html = renderTruncationBadge(0);
        expect(html).toContain('--success-color');
        expect(html).toContain('No truncation');
        expect(html).not.toContain('--error-color');
    });

    it('returns the "Yes" badge with the count when count > 0', () => {
        const html = renderTruncationBadge(5);
        expect(html).toContain('--error-color');
        expect(html).toContain('Yes (5 requests)');
    });

    it('treats null as 0 (no truncation)', () => {
        expect(renderTruncationBadge(null)).toContain('No truncation');
    });

    it('treats undefined as 0 (no truncation)', () => {
        expect(renderTruncationBadge(undefined)).toContain('No truncation');
    });

    it('treats a non-numeric string as 0 (no truncation)', () => {
        // Number('foo') => NaN => falsy => || 0
        expect(renderTruncationBadge('foo')).toContain('No truncation');
    });

    it('coerces a numeric string into a number for the count', () => {
        const html = renderTruncationBadge('42');
        expect(html).toContain('--error-color');
        expect(html).toContain('Yes (42 requests)');
    });

    it('treats negative numbers as no truncation (-3 is truthy but > 0 fails)', () => {
        // Number(-3) === -3 (truthy, so || 0 keeps -3), but the > 0 branch fails => returns success.
        expect(renderTruncationBadge(-3)).toContain('No truncation');
    });
});
