Files

106 lines
3.4 KiB
TypeScript

jest.mock('../stores/Stores', () => ({}));
import Payment from './Payment';
describe('Payment.getAmount with partial HTLC success', () => {
it('sums only succeeded HTLC parts and ignores failed ones', () => {
const payment = new Payment({
value_sat: 130206,
htlcs: [
{
status: 'SUCCEEDED',
route: {
total_amt: 65103,
hops: [{ amt_to_forward: 65103 }]
}
},
{ status: 'FAILED', route: { total_amt: 4242 } },
{ status: 'FAILED', route: { total_amt: 999999 } }
]
});
expect(payment.getAmount).toBe(65103);
});
it('excludes routing fees from the payment amount', () => {
const payment = new Payment({
htlcs: [
{
status: 'SUCCEEDED',
route: {
total_amt_msat: 105000, // 100 sats + 5 sats fee
total_fees_msat: 5000,
hops: [
{ amt_to_forward_msat: 100000, fee_msat: 5000 },
{ amt_to_forward_msat: 100000 } // last hop
]
}
}
]
});
// Should return 100 sats (the actual payment), not 105 sats
expect(payment.getAmount).toBe(100);
});
it('uses last hop amount when multiple hops exist', () => {
const payment = new Payment({
htlcs: [
{
status: 'SUCCEEDED',
route: {
total_amt_msat: 1010000, // includes fees
total_fees_msat: 10000,
hops: [
{ amt_to_forward_msat: 1005000, fee_msat: 5000 },
{ amt_to_forward_msat: 1002000, fee_msat: 3000 },
{ amt_to_forward_msat: 1000000 } // final destination
]
}
}
]
});
// Should return 1000 sats from the last hop
expect(payment.getAmount).toBe(1000);
});
it('falls back to route total minus fees when no hops available', () => {
const payment = new Payment({
htlcs: [
{
status: 'SUCCEEDED',
route: {
total_amt_msat: 50500,
total_fees_msat: 500
}
}
]
});
// Should return 50 sats (50500 - 500) / 1000
expect(payment.getAmount).toBe(50);
});
it('uses amountFromFields for in-transit payments', () => {
const payment = new Payment({
value_sat: 50000,
payment_preimage:
'0000000000000000000000000000000000000000000000000000000000000000',
htlcs: [
{
status: 'IN_FLIGHT',
route: {
total_amt_msat: 50000000,
hops: [{ amt_to_forward_msat: 50000000 }]
}
}
]
});
// Should return 50000 sats from value_sat, not 0 from failed HTLC sum
expect(payment.isInTransit).toBe(true);
expect(payment.getAmount).toBe(50000);
});
});