UNPKG

stellar-plus

Version:

beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain

102 lines (101 loc) 5.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const stellar_sdk_1 = require("@stellar/stellar-sdk"); const submit_transaction_1 = require("../../../../stellar-plus/core/pipelines/submit-transaction"); const horizon_1 = require("../../../../stellar-plus/horizon"); const network_1 = require("../../../../stellar-plus/network"); const rpc_1 = require("../../../../stellar-plus/rpc"); const TESTNET_PASSPHRASE = (0, network_1.TestNet)().networkPassphrase; const MOCKED_TRANSACTION_XDR = 'AAAAAgAAAAC8CrO4sEcs28O8U8KWvl4CpiGpCgRlbEwf2fp21SRe0gAAAGQADg/kAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1SRe0gAAAEBH30tw2MS4pbpLZ8RbEBTLxF2xalFGJRLfDhgcbildNTgujl6hbNxmw2qltop/SZfe34R4q9v+KVhp5pQ4DmkL'; const MOCKED_TRANSACTION = stellar_sdk_1.TransactionBuilder.fromXDR(MOCKED_TRANSACTION_XDR, TESTNET_PASSPHRASE); const MOCKED_ST_OUTPUT = { response: { successful: true, hash: 'hash', ledger: 1, envelope_xdr: 'envelope_xdr', result_xdr: 'result_xdr', result_meta_xdr: 'result_meta_xdr', paging_token: 'paging_token', }, }; const HORIZON_HANDLER = new horizon_1.HorizonHandlerClient((0, network_1.TestNet)()); const RPC_HANDLER = new rpc_1.DefaultRpcHandler((0, network_1.TestNet)()); const MOCKED_ST_INPUT = { transaction: MOCKED_TRANSACTION, networkHandler: HORIZON_HANDLER, }; describe('SubmitTransactionPipeline', () => { let submitTransactionPipeline; beforeEach(() => { jest.clearAllMocks(); }); it('should throw error if received handler is neither horizon or rpc', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { submitTransactionPipeline = new submit_transaction_1.SubmitTransactionPipeline(); const MOCKED_INVALID_HANDLER = {}; yield expect(submitTransactionPipeline.execute(Object.assign(Object.assign({}, MOCKED_ST_INPUT), { networkHandler: MOCKED_INVALID_HANDLER }))).rejects.toThrow('Invalid network handler!'); expect(HORIZON_HANDLER.server.submitTransaction).not.toHaveBeenCalledOnce(); })); describe('Submit Transaction with HorizonHandler', () => { beforeEach(() => { submitTransactionPipeline = new submit_transaction_1.SubmitTransactionPipeline(); jest.clearAllMocks(); }); it('should submit transaction successfully', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { HORIZON_HANDLER.server.submitTransaction = jest.fn().mockResolvedValue(MOCKED_ST_OUTPUT.response); yield expect(submitTransactionPipeline.execute(MOCKED_ST_INPUT)).resolves.toEqual(MOCKED_ST_OUTPUT); expect(HORIZON_HANDLER.server.submitTransaction).toHaveBeenCalledWith(MOCKED_TRANSACTION, { skipMemoRequiredCheck: true, }); })); it('should throw error if something went wrong', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { HORIZON_HANDLER.server.submitTransaction = jest.fn().mockRejectedValue(MOCKED_ST_OUTPUT.response); yield expect(submitTransactionPipeline.execute(MOCKED_ST_INPUT)).rejects.toThrow('Transaction submission through Horizon failed!'); expect(HORIZON_HANDLER.server.submitTransaction).toHaveBeenCalledWith(MOCKED_TRANSACTION, { skipMemoRequiredCheck: true, }); })); it('should throw error if horizon resolved but was unsuccessful', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { HORIZON_HANDLER.server.submitTransaction = jest.fn().mockResolvedValue(Object.assign(Object.assign({}, MOCKED_ST_OUTPUT.response), { successful: false })); yield expect(submitTransactionPipeline.execute(MOCKED_ST_INPUT)).rejects.toThrow('The transaction submitted through Horizon has failed!'); expect(HORIZON_HANDLER.server.submitTransaction).toHaveBeenCalledWith(MOCKED_TRANSACTION, { skipMemoRequiredCheck: true, }); })); }); describe('Submit Transaction with RPCHandler', () => { const MOCKED_ST_INPUT_RPC = { transaction: MOCKED_TRANSACTION, networkHandler: RPC_HANDLER, }; const MOCKED_ST_OUTPUT_RPC = { response: { successful: true, hash: 'hash', ledger: 1, envelope_xdr: 'envelope_xdr', result_xdr: 'result_xdr', result_meta_xdr: 'result_meta_xdr', paging_token: 'paging_token', status: 'PENDING', latestLedger: 1, latestLedgerCloseTime: 1, }, }; beforeEach(() => { submitTransactionPipeline = new submit_transaction_1.SubmitTransactionPipeline(); jest.clearAllMocks(); }); it('should submit transaction successfully', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { RPC_HANDLER.submitTransaction = jest.fn().mockResolvedValue(MOCKED_ST_OUTPUT_RPC.response); yield expect(submitTransactionPipeline.execute(MOCKED_ST_INPUT_RPC)).resolves.toEqual(MOCKED_ST_OUTPUT_RPC); expect(RPC_HANDLER.submitTransaction).toHaveBeenCalledWith(MOCKED_TRANSACTION); })); it('should throw error if something went wrong', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { RPC_HANDLER.submitTransaction = jest.fn().mockRejectedValue(MOCKED_ST_OUTPUT_RPC.response); yield expect(submitTransactionPipeline.execute(MOCKED_ST_INPUT_RPC)).rejects.toThrow('Transaction submission through Soroban RPC failed!'); expect(RPC_HANDLER.submitTransaction).toHaveBeenCalledWith(MOCKED_TRANSACTION); })); }); });