All checks were successful
CI Trade-In / changes (pull_request) Successful in 16s
CI / changes (pull_request) Successful in 16s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 2m8s
CI / openapi-codegen-check (pull_request) Successful in 3m32s
CI / backend-tests (pull_request) Successful in 16m23s
1. gazprom_grs_loader: канонизация output_name «(выход №N)» → «выход №N» (регех + группа номера) — разнобой пробелов/регистра иначе плодил бы дубли по ON CONFLICT (grs_name_norm, output_name) с двойным счётом SUM. Прод проверен: уже канонический (0 не-канона), вычистка не нужна. +регресс-тесты на реальных прод-строках «(выход №N) (M)». 2. formatThousandM3Hour: 0<|v|<0.05 → 2 знака («0,04»), не «0,0» — ГРС «открыта», но выглядела нулём. +формат-тесты (первые на форматтеры). 3. Росреестр приходит ПОКВАРТАЛЬНО (Anton 2026-07-03): убрано «устарел» из offer_only/source_stale — теперь «Сделки Росреестра — за I квартал 2026 (поставка поквартальная)». Хелперы квартала (римские I-IV) на фронте и бэке; статусы/логика не тронуты — только подписи.
45 lines
2.4 KiB
TypeScript
45 lines
2.4 KiB
TypeScript
/**
|
||
* 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();
|
||
});
|
||
});
|