UNPKG

balanceofsatoshis

Version:
136 lines (123 loc) 3.26 kB
const {equal} = require('node:assert').strict; const EventEmitter = require('node:events'); const {rejects} = require('node:assert').strict; const test = require('node:test'); const {getInfoResponse} = require('./../fixtures'); const {getSwapCost} = require('./../../swaps'); const metadata = {get: () => ['00']}; const makeLnd = ({}) => { return { chain: { registerBlockEpochNtfn: ({}) => { const emitter = new EventEmitter(); emitter.cancel = () => {}; process.nextTick(() => emitter.emit('error', 'err')); return emitter; }, }, default: { getInfo: ({}, cbk) => cbk(null, getInfoResponse), }, }; }; const makeQuote = ({}) => ({ cltv_delta: 10, prepay_amt: 1, swap_fee: 2, swap_payment_dest: Buffer.alloc(33).toString('hex'), }); const makeService = ({}) => { return { loopOutQuote: ({}, {}, cbk) => cbk(null, makeQuote({})), loopOutTerms: ({}, {}, cbk) => cbk(null, makeTerms({max: 1e7})), }; }; const makeTerms = ({max, min}) => ({ max_cltv_delta: 20, max_swap_amount: max || 1, min_cltv_delta: 10, min_swap_amount: min || 1, }); const tests = [ { args: {metadata, lnd: {}, logger: {}}, description: 'Swap service is required', error: [400, 'ExpectedSwapServiceToGetSwapCost'], }, { args: {metadata, lnd: {}, logger: {}, service: {}}, description: 'Tokens are required', error: [400, 'ExpectedTokensCountToGetSwapCost'], }, { args: {metadata, lnd: {}, logger: {}, service: {}, tokens: 1}, description: 'Swap type is required', error: [400, 'ExpectedLiquidityTypeToGetSwapCost'], }, { args: { metadata, lnd: {}, logger: {}, service: makeService({}), tokens: 1, type: 'type', }, description: 'Known swap type is required', error: [400, 'GotUnexpectedSwapTypeWhenGettingSwapCost'], }, { args: { metadata, lnd: makeLnd({}), logger: {}, service: { loopOutQuote: ({}, {}, cbk) => cbk(null, makeQuote({})), loopOutTerms: ({}, {}, cbk) => cbk(null, makeTerms({})), }, tokens: 1e6, type: 'inbound', }, description: 'Amount must be under maximum', error: [400, 'AmountExceedsMaximum', {max: 1}], }, { args: { metadata, lnd: makeLnd({}), logger: {}, service: { loopInQuote: ({}, {}, cbk) => cbk(null, makeQuote({})), loopInTerms: ({}, {}, cbk) => { return cbk(null, makeTerms({max: 1e7, min: 1e6})); }, }, tokens: 1e5, type: 'outbound', }, description: 'Amount must be over minimum', error: [400, 'AmountBelowMinimumSwap', {min: 1e6}], }, { args: { metadata, lnd: makeLnd({}), logger: {}, service: makeService({}), tokens: 1e6, type: 'inbound', }, description: 'Amount must be under maximum', expected: {cost: 2}, }, ]; tests.forEach(({args, description, error, expected}) => { return test(description, async () => { if (!!error) { await rejects(getSwapCost(args), error, 'Got expected error'); } else { equal((await getSwapCost(args)).cost, expected.cost, 'Got cost'); } return; }); });