storj/web/satellite/tests/unit/utils/strings.spec.ts

90 lines
2.9 KiB
TypeScript
Raw Normal View History

// Copyright (C) 2023 Storj Labs, Inc.
// See LICENSE for copying information.
import { describe, beforeEach, it, expect, vi } from 'vitest';
import { decimalShift, formatPrice, hexToBase64 } from '@/utils/strings';
describe('decimalShift', (): void => {
it('handles empty strings', (): void => {
expect(decimalShift('', 0)).toBe('0');
expect(decimalShift('', 2)).toBe('0');
expect(decimalShift('', -2)).toBe('0');
});
it('shifts integers correctly', (): void => {
['', '-'].forEach(sign => {
const decimal = sign+'123';
expect(decimalShift(decimal, 0)).toBe(sign+'123');
expect(decimalShift(decimal, 2)).toBe(sign+'1.23');
expect(decimalShift(decimal, 5)).toBe(sign+'0.00123');
expect(decimalShift(decimal, -2)).toBe(sign+'12300');
});
});
it('shifts decimals correctly', (): void => {
['', '-'].forEach(sign => {
const decimal = sign+'1.23';
expect(decimalShift(decimal, 0)).toBe(sign+'1.23');
expect(decimalShift(decimal, -2)).toBe(sign+'123');
expect(decimalShift(decimal, 3)).toBe(sign+'0.00123');
expect(decimalShift(decimal, -4)).toBe(sign+'12300');
});
});
it('trims unnecessary characters', (): void => {
['', '-'].forEach(sign => {
expect(decimalShift(sign+'0.0012300', -2)).toBe(sign+'0.123');
expect(decimalShift(sign+'12300', 2)).toBe(sign+'123');
expect(decimalShift(sign+'000.000', 1)).toBe('0');
});
});
});
describe('formatPrice', (): void => {
it('handles empty strings', (): void => {
expect(formatPrice('')).toBe('$0');
});
it('formats correctly', (): void => {
['', '-'].forEach(sign => {
expect(formatPrice(sign+'123')).toBe(sign+'$123');
expect(formatPrice(sign+'1.002')).toBe(sign+'$1.002');
});
});
it('adds zeros when necessary', (): void => {
['', '-'].forEach(sign => {
expect(formatPrice(sign+'12.3')).toBe(sign+'$12.30');
expect(formatPrice(sign+'.123')).toBe(sign+'$0.123');
});
});
it('trims unnecessary characters', (): void => {
['', '-'].forEach(sign => {
expect(formatPrice(sign+'0.0')).toBe('$0');
expect(formatPrice(sign+'00123.00')).toBe(sign+'$123');
});
});
});
describe('hexToBase64', () => {
it('rejects non-hex strings', () => {
expect(() => hexToBase64('foobar')).toThrowError();
});
it('rejects short strings', () => {
expect(() => hexToBase64('abc')).toThrowError();
});
it('handles empty strings', () => {
expect(hexToBase64('')).toBe('');
});
it('encodes properly', () => {
expect(hexToBase64('14fb9c03d97e')).toBe('FPucA9l-');
expect(hexToBase64('14fb9c03d9')).toBe('FPucA9k=');
expect(hexToBase64('14fb9c03')).toBe('FPucAw==');
});
});