test(web): тесты форматтера сумм шахматки (ревью #158, AURORA-1538)
Сдвиг единиц, точное округление без float, большие суммы, «-0,00», пустые значения. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
0134120905
commit
718d83d6d1
50
web/src/utils/chessTableCellFormatValue.test.ts
Normal file
50
web/src/utils/chessTableCellFormatValue.test.ts
Normal file
@ -0,0 +1,50 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { chessTableCellFormatValue as fmt } from './chessTableCellFormatValue';
|
||||
|
||||
const NBSP = ' ';
|
||||
|
||||
describe('chessTableCellFormatValue', () => {
|
||||
it('руб.: разряды, запятая, заданное число знаков', () => {
|
||||
expect(fmt('4454151.93', 'rub', 2)).toBe(`4${NBSP}454${NBSP}151,93`);
|
||||
expect(fmt('100', 'rub', 2)).toBe('100,00');
|
||||
expect(fmt('123.456', 'rub', 0)).toBe('123');
|
||||
expect(fmt('123.4', 'rub', 3)).toBe('123,400');
|
||||
});
|
||||
|
||||
it('тыс./млн/млрд — сдвиг запятой в строке', () => {
|
||||
expect(fmt('2346459.05', 'thousand', 2)).toBe(`2${NBSP}346,46`);
|
||||
expect(fmt('2346459.05', 'million', 1)).toBe('2,3');
|
||||
expect(fmt('2346459.05', 'billion', 3)).toBe('0,002');
|
||||
expect(fmt('12', 'thousand', 3)).toBe('0,012');
|
||||
});
|
||||
|
||||
it('округление точное, без двоичной погрешности float', () => {
|
||||
// 1005 руб. = 1,005 тыс.: через Number(...).toFixed(2) вышло бы «1,00»
|
||||
expect(fmt('1005', 'thousand', 2)).toBe('1,01');
|
||||
expect(fmt('0.005', 'rub', 2)).toBe('0,01');
|
||||
});
|
||||
|
||||
it('большие суммы не теряют копейки', () => {
|
||||
expect(fmt('12345678901234567.89', 'rub', 2)).toBe(`12${NBSP}345${NBSP}678${NBSP}901${NBSP}234${NBSP}567,89`);
|
||||
});
|
||||
|
||||
it('отрицательные', () => {
|
||||
expect(fmt('-1234567.1', 'rub', 2)).toBe(`-1${NBSP}234${NBSP}567,10`);
|
||||
expect(fmt('-2346459.05', 'thousand', 2)).toBe(`-2${NBSP}346,46`);
|
||||
});
|
||||
|
||||
it('отрицательная сумма, округлённая до нуля, — без минуса', () => {
|
||||
expect(fmt('-4.00', 'thousand', 2)).toBe('0,00');
|
||||
expect(fmt('-0.001', 'rub', 0)).toBe('0');
|
||||
});
|
||||
|
||||
it('пустое значение — пустая строка', () => {
|
||||
expect(fmt(null, 'rub', 2)).toBe('');
|
||||
expect(fmt(undefined, 'thousand', 2)).toBe('');
|
||||
expect(fmt('', 'million', 2)).toBe('');
|
||||
});
|
||||
|
||||
it('нечисловое значение в руб. — как пришло', () => {
|
||||
expect(fmt('abc', 'rub', 2)).toBe('abc');
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user