storj/web/satellite/tests/unit/utils/strings.spec.ts
Jeremy Wharton 4dbf26e153 web/satellite/vuetify-poc: shorten project ID in URLs
This change shortens the project ID path segment in Vuetify URLs in
order to make the URLs more aesthetically pleasing and allow users to
see more of the URL in the address bar. The ID path segment is now 11
characters long instead of the previous 36, but in rare cases where a
user is a member of multiple projects with the same ID prefix, it
expands to preserve uniqueness.

Resolves #6308

Change-Id: I25a51d05b72d2cc701c0aa2cd3a6d070080c4b1e
2023-09-29 16:11:21 +00:00

90 lines
2.9 KiB
TypeScript

// 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==');
});
});