diff --git a/web/cashtab/src/hooks/__tests__/useBCH.test.js b/web/cashtab/src/hooks/__tests__/useBCH.test.js --- a/web/cashtab/src/hooks/__tests__/useBCH.test.js +++ b/web/cashtab/src/hooks/__tests__/useBCH.test.js @@ -48,12 +48,28 @@ expectedTxFee = 1126; } else if (currency.defaultFee === 5.01) { expectedTxFee = 1874; - } else if ((currency.defaultFee = 83.3)) { + } else if (currency.defaultFee === 83.3) { expectedTxFee = 31155; } expect(calcFee(BCH, utxosMock)).toBe(expectedTxFee); }); + it('calculates fee correctly for 1 P2PKH output', () => { + const { calcFee } = useBCH(); + const BCH = new BCHJS(); + const utxosMock = [{}]; + // For 1.01 sat/byte fee + let expectedTxFee = 229; + if (currency.defaultFee === 3.01) { + expectedTxFee = 681; + } else if (currency.defaultFee === 5.01) { + expectedTxFee = 1133; + } else if (currency.defaultFee === 83.3) { + expectedTxFee = 18826; + } + expect(calcFee(BCH, utxosMock)).toBe(expectedTxFee); + }); + it('gets SLP and BCH balances and utxos from hydrated utxo details', async () => { const { getSlpBalancesAndUtxos } = useBCH(); @@ -126,22 +142,30 @@ expect(callback).toHaveBeenCalledWith(expectedTxId); }); - it('sends BCH with less BCH available on balance', async () => { + it(`Throws error if called trying to send one satoshi ${currency.ticker} more than available in utxo set`, async () => { const { sendBch } = useBCH(); const BCH = new BCHJS(); - const { - expectedTxId, - expectedHex, - utxos, - wallet, - addresses, - } = sendBCHMock; + const { expectedTxId, utxos, wallet, addresses } = sendBCHMock; + let expectedTxFee = 229; + if (currency.defaultFee === 3.01) { + expectedTxFee = 681; + } else if (currency.defaultFee === 5.01) { + expectedTxFee = 1133; + } else if (currency.defaultFee === 83.3) { + expectedTxFee = 18826; + } BCH.RawTransactions.sendRawTransaction = jest .fn() .mockResolvedValue(expectedTxId); + const oneBaseUnitMoreThanBalance = new BigNumber(utxos[0].value) + .minus(expectedTxFee) + .plus(1) + .div(10 ** currency.cashDecimals) + .toString(); + const failedSendBch = sendBch(BCH, wallet, utxos, { addresses, - values: [1], + values: [oneBaseUnitMoreThanBalance], }); expect(failedSendBch).rejects.toThrow(new Error('Insufficient funds')); const nullValuesSendBch = await sendBch(BCH, wallet, utxos, {