4dbf26e153
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
90 lines
2.9 KiB
TypeScript
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==');
|
|
});
|
|
});
|