import { boolToTriState, formatSlaHours, isValidSlaHours, parseSlaHours, slaHoursToInput, triStateToBool } from './sla'; // Смысл всех этих проверок один: «не задано» и «ноль/нет» — РАЗНЫЕ состояния. // Если они где-то схлопнутся, шаг с настройкой «напоминать сразу» станет // неотличим от шага без настройки, и напоминания по нему просто не придут. describe('parseSlaHours', () => { it('пустая строка — «не задано», а не ноль', () => { expect(parseSlaHours('')).toBeNull(); expect(parseSlaHours(' ')).toBeNull(); }); it('ноль остаётся нулём', () => { expect(parseSlaHours('0')).toBe(0); }); it('число разбирается', () => { expect(parseSlaHours('24')).toBe(24); expect(parseSlaHours(' 48 ')).toBe(48); }); it('мусор не превращается в ноль', () => { expect(parseSlaHours('abc')).toBeNull(); expect(parseSlaHours('-5')).toBeNull(); expect(parseSlaHours('1.5')).toBeNull(); }); }); describe('isValidSlaHours', () => { it('пусто — допустимо, это «не задано»', () => { expect(isValidSlaHours('')).toBe(true); }); it('ноль и целые положительные — допустимы', () => { expect(isValidSlaHours('0')).toBe(true); expect(isValidSlaHours('24')).toBe(true); }); it('отрицательное, дробное и нечисловое — недопустимы', () => { expect(isValidSlaHours('-1')).toBe(false); expect(isValidSlaHours('1.5')).toBe(false); expect(isValidSlaHours('abc')).toBe(false); }); }); describe('slaHoursToInput', () => { it('ноль показывается нулём, а не пустотой', () => { expect(slaHoursToInput(0)).toBe('0'); }); it('«не задано» показывается пустым полем', () => { expect(slaHoursToInput(null)).toBe(''); expect(slaHoursToInput(undefined)).toBe(''); }); }); describe('formatSlaHours', () => { it('ноль часов остаётся нулём, а не прочерком', () => { expect(formatSlaHours(0)).toBe('0 ч'); }); it('не задано — прочерк', () => { expect(formatSlaHours(null)).toBe('—'); }); }); describe('triState', () => { it('false и «не задано» — разные значения', () => { expect(triStateToBool('no')).toBe(false); expect(triStateToBool('')).toBeNull(); }); it('преобразование в обе стороны сохраняет все три состояния', () => { expect(boolToTriState(true)).toBe('yes'); expect(boolToTriState(false)).toBe('no'); expect(boolToTriState(null)).toBe(''); expect(triStateToBool(boolToTriState(false))).toBe(false); expect(triStateToBool(boolToTriState(null))).toBeNull(); }); });