/**
 * Unit tests for §3 «Сети» number formatters (connection-capacity.ts).
 *
 * Focus: honest near-zero rendering of ГРС free capacity. При 1 знаке после
 * запятой «0,044 тыс. м³/ч» округлялось бы в «0,0» — ГРС с крохотной, но
 * НЕнулевой свободной мощностью выглядела бы закрытой. Для 0 < |v| < 0,05
 * показываем 2 знака; настоящий 0 остаётся «0,0».
 */
import { describe, expect, it } from "vitest";

import { formatThousandM3Hour } from "../connection-capacity";

// toLocaleString("ru-RU") даёт запятую-десятичную и Unicode-минус (−) для
// отрицательных — сверяем именно на этих формах.
describe("formatThousandM3Hour — честность околонуля", () => {
  it("крохотная положительная мощность не схлопывается в 0,0", () => {
    expect(formatThousandM3Hour(0.044)).toBe("0,04 тыс. м³/ч");
    expect(formatThousandM3Hour("0.044")).toBe("0,04 тыс. м³/ч");
  });

  it("крохотная отрицательная мощность (дефицит) сохраняет знак и не нулится", () => {
    // toLocaleString даёт минус (ASCII «-» или Unicode «−» в зависимости от ICU
    // рантайма) + 2 знака — не «0,0». Сверяем знак + значимую часть, не глиф.
    const out = formatThousandM3Hour(-0.044);
    expect(out).not.toBeNull();
    expect(out).toMatch(/^[-−]0,04 тыс\. м³\/ч$/u);
  });

  it("настоящий ноль остаётся 0,0 (1 знак)", () => {
    expect(formatThousandM3Hour(0)).toBe("0,0 тыс. м³/ч");
    expect(formatThousandM3Hour("0")).toBe("0,0 тыс. м³/ч");
  });

  it("значения ≥ 0,05 — прежний 1 знак после запятой", () => {
    expect(formatThousandM3Hour(1.205)).toBe("1,2 тыс. м³/ч");
    expect(formatThousandM3Hour(0.05)).toBe("0,1 тыс. м³/ч");
    expect(formatThousandM3Hour(42.2)).toBe("42,2 тыс. м³/ч");
  });

  it("null/undefined/нечисло → null (поле скрывается, не «0»)", () => {
    expect(formatThousandM3Hour(null)).toBeNull();
    expect(formatThousandM3Hour(undefined)).toBeNull();
    expect(formatThousandM3Hour("н/д")).toBeNull();
  });
});
