UNPKG

@thorwallet/xchain-util

Version:
434 lines 23.3 kB
"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