/** * 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(); }); });