stellar-plus
Version:
beta version of stellar-plus, an all-in-one sdk for the Stellar blockchain
102 lines (101 loc) • 5.9 kB
JavaScript
;
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);
}));
});
});