Files
com.blitzwallet/__tests__/calculateFlashnetAmountIn.test.js
T
Blake KaufmanandGitHub 6760060083 Simplify confirm split payment (#778)
* fix small style issues

* fix touch gap

* fixing podfile

* creating standardized amountIn function

* show tx ids not amounts

* use standardized amount in

* use standardized amount in

* fixed no payment information crash

* downgrade rn and react-native-quick-crypto

* only show margin if two elements exist

* adding backup amount

* wait till hompage to call analytics data

* fix restore bug

* updating firebase

* fix check logic

* wrap to handle thrown execptions

* use utils package directly

* adding error handling

* group notification payments insted of handling them sequentually

* handle payment requset on confirm page

* improving split payment ux

* adding translations

* adding firebase sdk warning
2026-04-19 11:43:00 -04:00

99 lines
3.2 KiB
JavaScript

import {
calculateFlashnetAmountIn,
SEND_AMOUNT_INCREASE_BUFFER,
} from '../app/functions/spark/swapAmountUtils';
const PRICE = 1_000_000; // 1 sat = $1.00 at this mock price (simplifies math)
describe('calculateFlashnetAmountIn', () => {
describe('BTC→USD (isUsdAssetIn = false)', () => {
it('applies default 1% buffer to sats', () => {
const result = calculateFlashnetAmountIn({
baseAmountIn: 10_000,
isUsdAssetIn: false,
maxBalance: 100_000,
});
expect(result).toBe(Math.round(10_000 * SEND_AMOUNT_INCREASE_BUFFER));
});
it('caps to maxBalance when buffer exceeds it', () => {
const result = calculateFlashnetAmountIn({
baseAmountIn: 99_999,
isUsdAssetIn: false,
maxBalance: 100_000,
});
expect(result).toBe(100_000);
});
it('accepts a custom bufferMultiplier', () => {
const result = calculateFlashnetAmountIn({
baseAmountIn: 10_000,
isUsdAssetIn: false,
maxBalance: 100_000,
bufferMultiplier: 1.02,
});
expect(result).toBe(10_200);
});
it('returns integer', () => {
const result = calculateFlashnetAmountIn({
baseAmountIn: 9999,
isUsdAssetIn: false,
maxBalance: 50_000,
});
expect(Number.isInteger(result)).toBe(true);
});
});
describe('USD→BTC (isUsdAssetIn = true)', () => {
// 1_000_000 microdollars = $1.00
it('applies default 1% buffer and returns microdollars', () => {
// $10.00 in microdollars; PRICE = 1_000_000 means 1 sat = $1.00
// dollarBalanceSat = 1_000_000 → satsToDollars(1_000_000, 1_000_000) = $1_000_000
const base = 10_000_000;
const result = calculateFlashnetAmountIn({
baseAmountIn: base,
isUsdAssetIn: true,
dollarBalanceSat: 1_000_000,
currentPriceAInB: PRICE,
});
// buffer: 10.00 * 1.01 = 10.10 → 10_100_000 microdollars
expect(result).toBe(10_100_000);
});
it('caps to balance when buffer exceeds it (low balance scenario)', () => {
// base = $10 but USD balance only covers $5
// dollarBalanceSat = 5 sats, PRICE = 1_000_000 → satsToDollars(5, 1_000_000) = 5
const result = calculateFlashnetAmountIn({
baseAmountIn: 10_000_000, // $10
isUsdAssetIn: true,
dollarBalanceSat: 5, // 5 sats → $5 at PRICE
currentPriceAInB: PRICE,
});
// bufferedDollars = 10_000_000 * 1.01 / 1e6 = 10.10
// balanceDollars = satsToDollars(5, 1_000_000) = 5 * 1_000_000 / 1_000_000 = 5
// cappedDollars = min(10.10, 5) = 5.00
expect(result).toBe(5_000_000);
});
it('falls back to maxBalance/1e6 when dollarBalanceSat and currentPriceAInB are absent', () => {
const result = calculateFlashnetAmountIn({
baseAmountIn: 5_000_000, // $5.00
isUsdAssetIn: true,
maxBalance: 10_000_000, // $10.00 in microdollars
});
// 5.00 * 1.01 = 5.05 → 5_050_000
expect(result).toBe(5_050_000);
});
it('returns integer', () => {
const result = calculateFlashnetAmountIn({
baseAmountIn: 3_333_333,
isUsdAssetIn: true,
maxBalance: 100_000_000,
});
expect(Number.isInteger(result)).toBe(true);
});
});
});