@thorwallet/xchain-util
Version:
Helper utilities for XChain clients
434 lines • 23.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("./index");
const asset_1 = require("./asset");
const types_1 = require("./types");
describe('asset', () => {
describe('isBigNumberValue', () => {
it('return true for BigNumber.Value', () => {
expect(asset_1.isBigNumberValue(1)).toBeTruthy();
expect(asset_1.isBigNumberValue('1')).toBeTruthy();
expect(asset_1.isBigNumberValue(index_1.bn(1))).toBeTruthy();
});
it('return false for others', () => {
expect(asset_1.isBigNumberValue(asset_1.baseAmount(10))).toBeFalsy();
expect(asset_1.isBigNumberValue(asset_1.assetAmount(10))).toBeFalsy();
});
});
describe('assetAmount', () => {
it('should create asset amount by given value', () => {
const amount = asset_1.assetAmount(10);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('10'));
// default decimal == 8
expect(amount.decimal).toEqual(8);
});
it('should creates asset amount by given value and decimal', () => {
const amount = asset_1.assetAmount(10, 18);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('10'));
expect(amount.decimal).toEqual(18);
});
it('should be able to add a value', () => {
const amount = asset_1.assetAmount(10, 18).plus(100);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('110'));
});
it('should be able to sub a value', () => {
const amount = asset_1.assetAmount(10, 18).minus(5);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('5'));
});
it('should be able to mul a value', () => {
const amount = asset_1.assetAmount(10, 18).times(1e10);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('100000000000'));
});
it('should be able to div a value', () => {
const amount = asset_1.assetAmount(10, 18).div(5);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('2'));
});
it('should be able to add AssetAmount', () => {
const amount = asset_1.assetAmount(10, 18).plus(asset_1.assetAmount(10, 10));
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('20'));
expect(amount.decimal).toEqual(18);
});
it('should be able to set decimal', () => {
const amount = asset_1.assetAmount(10, 18).plus(asset_1.assetAmount(10, 10), 12);
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('20'));
expect(amount.decimal).toEqual(12);
});
it('should be able to check lt', () => {
expect(asset_1.assetAmount(10).lt(asset_1.assetAmount(11))).toBeTruthy();
expect(asset_1.assetAmount(10).lt(11)).toBeTruthy();
expect(asset_1.assetAmount(11).lt(10)).toBeFalsy();
expect(asset_1.assetAmount(11, 10).lt(asset_1.assetAmount(10, 8))).toBeFalsy();
});
it('should be able to check lte', () => {
expect(asset_1.assetAmount(10).lte(10)).toBeTruthy();
expect(asset_1.assetAmount(11).lte(10)).toBeFalsy();
expect(asset_1.assetAmount(10).lte(asset_1.assetAmount(10))).toBeTruthy();
expect(asset_1.assetAmount(11, 10).lte(asset_1.assetAmount(10, 8))).toBeFalsy();
});
it('should be able to check gt', () => {
expect(asset_1.assetAmount(10).gt(9)).toBeTruthy();
expect(asset_1.assetAmount(9).gt(10)).toBeFalsy();
expect(asset_1.assetAmount(10).gt(asset_1.assetAmount(9))).toBeTruthy();
expect(asset_1.assetAmount(9, 10).gt(asset_1.assetAmount(10, 8))).toBeFalsy();
});
it('should be able to check gte', () => {
expect(asset_1.assetAmount(10).gte(10)).toBeTruthy();
expect(asset_1.assetAmount(9).gte(10)).toBeFalsy();
expect(asset_1.assetAmount(10).gte(asset_1.assetAmount(10))).toBeTruthy();
expect(asset_1.assetAmount(9, 10).gte(asset_1.assetAmount(10, 8))).toBeFalsy();
});
it('should be able to check eq', () => {
expect(asset_1.assetAmount(10).eq(10)).toBeTruthy();
expect(asset_1.assetAmount(9).eq(10)).toBeFalsy();
expect(asset_1.assetAmount(10).eq(asset_1.assetAmount(10))).toBeTruthy();
expect(asset_1.assetAmount(9, 10).eq(asset_1.assetAmount(10, 8))).toBeFalsy();
});
});
describe('baseAmount', () => {
it('should create base amounts by given value', () => {
const amount = asset_1.baseAmount(10);
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('10'));
});
it('should be able to add a value', () => {
const amount = asset_1.baseAmount(10).plus(100);
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('110'));
});
it('should be able to sub a value', () => {
const amount = asset_1.baseAmount(10).minus(5);
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('5'));
});
it('should be able to mul a value', () => {
const amount = asset_1.baseAmount(10).times(5);
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('50'));
});
it('should be able to div a value', () => {
const amount = asset_1.baseAmount(10).div(5);
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('2'));
});
it('should be able to add BaseAmount', () => {
const amount = asset_1.baseAmount(10, 18).plus(asset_1.baseAmount(10, 10));
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('20'));
expect(amount.decimal).toEqual(18);
});
it('should be able to set decimal', () => {
const amount = asset_1.baseAmount(10, 18).plus(asset_1.baseAmount(10, 10), 12);
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.amount()).toEqual(index_1.bn('20'));
expect(amount.decimal).toEqual(12);
});
it('should be able to check lt', () => {
expect(asset_1.baseAmount(10).lt(11)).toBeTruthy();
expect(asset_1.baseAmount(10).lt(9)).toBeFalsy();
expect(asset_1.baseAmount(10).lt(asset_1.baseAmount(11))).toBeTruthy();
expect(asset_1.baseAmount(10, 10).lt(asset_1.baseAmount(9, 8))).toBeFalsy();
});
it('should be able to check lte', () => {
expect(asset_1.baseAmount(10).lte(10)).toBeTruthy();
expect(asset_1.baseAmount(10).lte(9)).toBeFalsy();
expect(asset_1.baseAmount(10).lte(asset_1.baseAmount(10))).toBeTruthy();
expect(asset_1.baseAmount(10, 10).lte(asset_1.baseAmount(9, 8))).toBeFalsy();
});
it('should be able to check gt', () => {
expect(asset_1.baseAmount(10).gt(9)).toBeTruthy();
expect(asset_1.baseAmount(9).gt(10)).toBeFalsy();
expect(asset_1.baseAmount(10).gt(asset_1.baseAmount(9))).toBeTruthy();
expect(asset_1.baseAmount(9, 10).gt(asset_1.baseAmount(10, 8))).toBeFalsy();
});
it('should be able to check gte', () => {
expect(asset_1.baseAmount(10).gte(10)).toBeTruthy();
expect(asset_1.baseAmount(9).gte(10)).toBeFalsy();
expect(asset_1.baseAmount(10).gte(asset_1.baseAmount(10))).toBeTruthy();
expect(asset_1.baseAmount(9, 10).gte(asset_1.baseAmount(10, 8))).toBeFalsy();
});
it('should be able to check eq', () => {
expect(asset_1.baseAmount(10).eq(10)).toBeTruthy();
expect(asset_1.baseAmount(9).eq(10)).toBeFalsy();
expect(asset_1.baseAmount(10).eq(asset_1.baseAmount(10))).toBeTruthy();
expect(asset_1.baseAmount(9, 10).eq(asset_1.baseAmount(10, 8))).toBeFalsy();
});
});
describe('baseToAsset', () => {
it('should return asset by given base amounts', () => {
const amount = asset_1.baseToAsset(asset_1.baseAmount(123));
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('0.00000123'));
// 8 decimal by default
expect(amount.decimal).toEqual(8);
});
it('should return asset by given base amounts and decimal', () => {
const amount = asset_1.baseToAsset(asset_1.baseAmount(123, 18));
expect(amount.type).toEqual(types_1.Denomination.ASSET);
expect(amount.amount()).toEqual(index_1.bn('0.000000000000000123'));
expect(amount.decimal).toEqual(18);
});
});
describe('assetToBase', () => {
it('should return base amounts by given asset amounts', () => {
const amount = asset_1.assetToBase(asset_1.assetAmount(22));
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.decimal).toEqual(8);
expect(amount.amount()).toEqual(index_1.bn('2200000000'));
});
it('should return base amounts by given asset amounts', () => {
const amount = asset_1.assetToBase(asset_1.assetAmount(22, 18));
expect(amount.type).toEqual(types_1.Denomination.BASE);
expect(amount.decimal).toEqual(18);
expect(amount.amount()).toEqual(index_1.bn('22000000000000000000'));
});
});
describe('isAssetAmount', () => {
it('should return `true`', () => {
const amount = asset_1.assetAmount(10);
expect(asset_1.isAssetAmount(amount)).toBeTruthy();
});
it('should return `false` for any other then AssetAmount', () => {
const amount = asset_1.baseAmount(0);
expect(asset_1.isAssetAmount(amount)).toBeFalsy();
});
});
describe('isBaseAmount', () => {
it('should return `true`', () => {
const amount = asset_1.baseAmount(10);
expect(asset_1.isBaseAmount(amount)).toBeTruthy();
});
it('should return `false` for any other then BaseAmount', () => {
const amount = asset_1.assetAmount(0);
expect(asset_1.isBaseAmount(amount)).toBeFalsy();
});
});
describe('formatAssetAmount', () => {
it('formats an `AssetAmount` with decimal of `AssetAmount` by default', () => {
const amount = asset_1.assetAmount(11.0001, 8);
expect(asset_1.formatAssetAmount({ amount })).toEqual('11.00010000');
});
it('formats a `AssetAmount` with 5 decimal', () => {
const amount = asset_1.assetAmount(11.001, 8);
expect(asset_1.formatAssetAmount({ amount, decimal: 5 })).toEqual('11.00100');
});
it('formats an `AssetAmount` with 5 decimal, but trims zeros', () => {
const amount = asset_1.assetAmount(11.001, 8);
expect(asset_1.formatAssetAmount({ amount, decimal: 5, trimZeros: true })).toEqual('11.001');
});
it('formats an `AssetAmount` with 0 decimal', () => {
const amount = asset_1.assetAmount(11.001, 5);
expect(asset_1.formatAssetAmount({ amount, decimal: 0 })).toEqual('11');
});
it('formats an `AssetAmount` with 5 decimal for formatAssetAmount', () => {
const amount = asset_1.assetAmount(11.001, 0);
expect(asset_1.formatAssetAmount({ amount, decimal: 5 })).toEqual('11.00000');
});
});
describe('formatBaseAmount', () => {
it('formats base amount', () => {
const amount = asset_1.baseAmount(100001);
expect(asset_1.formatBaseAmount(amount)).toEqual('100,001');
});
});
describe('assetFromString', () => {
it('returns RUNE asset with all values', () => {
const result = asset_1.assetFromString('BNB.RUNE-B1A');
expect(result).toEqual({
chain: 'BNB',
symbol: 'RUNE-B1A',
ticker: 'RUNE',
});
});
it('returns RUNE with all values, even if chain and symbol are provided only', () => {
const result = asset_1.assetFromString('BNB.RUNE');
expect(result).toEqual({ chain: 'BNB', symbol: 'RUNE', ticker: 'RUNE' });
});
it('returns a BTCB asset with all values, even if chain and symbol are provided only', () => {
const result = asset_1.assetFromString('BNB.BTCB-123');
expect(result).toEqual({ chain: 'BNB', symbol: 'BTCB-123', ticker: 'BTCB' });
});
it('returns a WBTC asset with all values, even if chain and symbol are provided only', () => {
const result = asset_1.assetFromString('ETH.WBTC');
expect(result).toEqual({ chain: 'ETH', symbol: 'WBTC', ticker: 'WBTC' });
});
it('returns a ETH asset with all values, even if chain and symbol are provided only', () => {
const result = asset_1.assetFromString('ETH.ETH');
expect(result).toEqual({ chain: 'ETH', symbol: 'ETH', ticker: 'ETH' });
});
it('returns null if the string includes a value for a chain only', () => {
const result = asset_1.assetFromString('BNB');
expect(result).toBeNull();
});
it('returns null by passing a value for a chain and a `.`', () => {
const result = asset_1.assetFromString('BNB.');
expect(result).toBeNull();
});
it('returns null by passing an empty string', () => {
const result = asset_1.assetFromString('');
expect(result).toBeNull();
});
it('returns null by passing `.` ', () => {
const result = asset_1.assetFromString('.');
expect(result).toBeNull();
});
it('returns null by passing an undefined chain', () => {
const result = asset_1.assetFromString('.BNB.BNB');
expect(result).toBeNull();
});
it('returns null by passing invalid chain', () => {
const result = asset_1.assetFromString('invalid.BNB.BNB');
expect(result).toBeNull();
});
});
describe('assetToString', () => {
it('returns a string for RUNE asset', () => {
const asset = { chain: 'BNB', symbol: 'RUNE-B1A', ticker: 'RUNE' };
expect(asset_1.assetToString(asset)).toEqual('BNB.RUNE-B1A');
});
it('returns a string for ETH asset', () => {
const asset = { chain: 'ETH', symbol: 'ETH', ticker: 'ETH' };
expect(asset_1.assetToString(asset)).toEqual('ETH.ETH');
});
});
describe('isValidAsset', () => {
it('returns false invalid asset data', () => {
expect(asset_1.isValidAsset({ chain: 'BNB', symbol: '', ticker: 'RUNE' })).toBeFalsy();
expect(asset_1.isValidAsset({ chain: 'BNB', symbol: 'RUNE-B1A', ticker: '' })).toBeFalsy();
});
it('returns true for valid `Asset` data', () => {
const asset = { chain: 'BNB', symbol: 'RUNE-B1A', ticker: 'RUNE' };
expect(asset_1.isValidAsset(asset)).toBeTruthy();
});
});
describe('currencySymbolByAsset', () => {
it('returns currency symbol for RUNE (mainnet)', () => {
expect(asset_1.currencySymbolByAsset(asset_1.AssetRuneB1A)).toEqual('ᚱ');
});
it('returns currency symbol for RUNE (testnet)', () => {
expect(asset_1.currencySymbolByAsset(asset_1.AssetRune67C)).toEqual('ᚱ');
});
it('returns currency symbol for RUNE (native)', () => {
expect(asset_1.currencySymbolByAsset(asset_1.AssetRuneNative)).toEqual('ᚱ');
});
it('returns currency symbol for BTC', () => {
expect(asset_1.currencySymbolByAsset(asset_1.AssetBTC)).toEqual('₿');
});
it('returns currency symbol for ETH', () => {
expect(asset_1.currencySymbolByAsset(asset_1.AssetETH)).toEqual('Ξ');
});
it('returns currency symbol for USD', () => {
expect(asset_1.currencySymbolByAsset({ chain: 'BNB', symbol: 'BUSD-BAF', ticker: 'BUSD' })).toEqual('$');
});
it('returns ticker as currency symbol for other assets', () => {
expect(asset_1.currencySymbolByAsset(asset_1.AssetBNB)).toEqual('BNB');
});
});
describe('formatAssetAmountCurrency', () => {
it('formats an `AssetAmount` as USD by default ', () => {
const amount = asset_1.assetAmount(11.01, 2);
expect(asset_1.formatAssetAmountCurrency({ amount })).toEqual('$ 11.01');
});
it('formats a zero `AssetAmount` as USD by default ', () => {
const amount = asset_1.assetAmount(0, 2);
expect(asset_1.formatAssetAmountCurrency({ amount })).toEqual('$ 0.00');
});
it('formats amount of RUNE (mainnet)', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetRuneB1A })).toEqual('ᚱ 10.00000000');
});
it('formats amount of native RUNE', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetRuneNative })).toEqual('ᚱ 10.00000000');
});
it('formats amount of RUNE (testnet', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetRune67C })).toEqual('ᚱ 10.00000000');
});
it('formats amount of ETH', () => {
const amount = asset_1.assetAmount(10, 18);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetETH, decimal: 2 })).toEqual('Ξ 10.00');
});
it('formats amount of WBTC', () => {
const amount = asset_1.assetAmount(10, 18);
const asset = asset_1.assetFromString('ETH.WBTC') || asset_1.AssetRune67C;
expect(asset_1.formatAssetAmountCurrency({ amount, asset, decimal: 2 })).toEqual('₿ 10.00');
});
it('formats amount of BTC', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBTC, decimal: 2 })).toEqual('₿ 10.00');
});
it('formats amount of BTC in satoshi', () => {
const amount = asset_1.assetAmount(0.01);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBTC })).toEqual('⚡ 1,000,000');
});
it('formats amount of BTCB-123', () => {
const amount = asset_1.assetAmount(10, 8);
const asset = asset_1.assetFromString('BNB.BTCB-123') || asset_1.AssetRune67C;
expect(asset_1.formatAssetAmountCurrency({ amount, asset, decimal: 2 })).toEqual('₿ 10.00');
});
it('formats amount of BTCB-123 in satoshi', () => {
const amount = asset_1.assetAmount(0.01, 8);
const asset = asset_1.assetFromString('BNB.BTCB-123') || asset_1.AssetRune67C;
asset_1.assetFromString('BNB.BTCB-123') || expect(asset_1.formatAssetAmountCurrency({ amount, asset })).toEqual('⚡ 1,000,000');
});
it('formats amount of TUSD', () => {
const amount = asset_1.assetAmount(10, 8);
const asset = asset_1.assetFromString('BNB.TUSD') || asset_1.AssetRune67C;
expect(asset_1.formatAssetAmountCurrency({ amount, asset, decimal: 2 })).toEqual('$ 10.00');
});
it('formats amount of BNB', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBNB, decimal: 2 })).toEqual('10.00 BNB');
});
it('formats amount by given decimal', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBNB, decimal: 4 })).toEqual('10.0000 BNB');
});
it('formats amount by given decimal, but it trims zeros', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBNB, decimal: 4, trimZeros: true })).toEqual('10 BNB');
});
it('formats amount by using decimal of asset (if decimal is not given)', () => {
const amount = asset_1.assetAmount(10, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBNB })).toEqual('10.00000000 BNB');
});
it('formats amount by using decimal of asset, but it trims zeros', () => {
const amount = asset_1.assetAmount(10.01, 8);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBNB, trimZeros: true })).toEqual('10.01 BNB');
});
it('formats amount by using 0 decimal of asset', () => {
const amount = asset_1.assetAmount(10.01, 5);
expect(asset_1.formatAssetAmountCurrency({ amount, asset: asset_1.AssetBNB, decimal: 0 })).toEqual('10 BNB');
});
it('formats an amount with 5 decimal for formatAssetAmountCurrency', () => {
const amount = asset_1.assetAmount(10.001, 0);
expect(asset_1.formatAssetAmountCurrency({ amount, decimal: 5, asset: asset_1.AssetBNB })).toEqual('10.00000 BNB');
});
});
describe('formatBaseAsAssetAmount', () => {
it('formats with all decimal', () => {
const amount = asset_1.baseAmount(12345, 8);
const result = asset_1.formatBaseAsAssetAmount({ amount });
expect(result).toEqual('0.00012345');
});
it('formats with 6 decimal', () => {
const amount = asset_1.baseAmount(1234, 8);
const result = asset_1.formatBaseAsAssetAmount({ amount, decimal: 6 });
expect(result).toEqual('0.000012');
});
it('formats with 6 decimal, but trims all zeros', () => {
const amount = asset_1.baseAmount(123400, 8);
const result = asset_1.formatBaseAsAssetAmount({ amount, decimal: 6, trimZeros: true });
expect(result).toEqual('0.001234');
});
});
});
//# sourceMappingURL=asset.test.js.map