Files
tnsu-approval-route/frontend/src/webparts/approvalAdmin/utils/sla.test.ts
T
2026-08-12 15:12:11 +05:00

87 lines
3.0 KiB
TypeScript

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