UNPKG

stellar-plus

Version:

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

198 lines (197 loc) 13.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const build_transaction_1 = require("../../../../stellar-plus/core/pipelines/build-transaction"); const classic_sign_requirements_1 = require("../../../../stellar-plus/core/pipelines/classic-sign-requirements"); const classic_transaction_1 = require("../../../../stellar-plus/core/pipelines/classic-transaction"); const types_1 = require("../../../../stellar-plus/core/pipelines/classic-transaction/types"); const sign_transaction_1 = require("../../../../stellar-plus/core/pipelines/sign-transaction"); const submit_transaction_1 = require("../../../../stellar-plus/core/pipelines/submit-transaction"); const network_1 = require("../../../../stellar-plus/network"); const channel_accounts_1 = require("../../../../stellar-plus/utils/pipeline/plugins/classic-transaction/channel-accounts"); const debug_1 = require("../../../../stellar-plus/utils/pipeline/plugins/generic/debug"); const fee_bump_1 = require("../../../../stellar-plus/utils/pipeline/plugins/submit-transaction/fee-bump"); jest.mock('stellar-plus/core/pipelines/build-transaction', () => ({ BuildTransactionPipeline: jest.fn().mockImplementation(() => ({ execute: jest.fn(), })), })); jest.mock('stellar-plus/core/pipelines/classic-sign-requirements', () => ({ ClassicSignRequirementsPipeline: jest.fn().mockImplementation(() => ({ execute: jest.fn(), })), })); jest.mock('stellar-plus/core/pipelines/sign-transaction', () => ({ SignTransactionPipeline: jest.fn().mockImplementation(() => ({ execute: jest.fn(), })), })); jest.mock('stellar-plus/core/pipelines/submit-transaction', () => ({ SubmitTransactionPipeline: jest.fn().mockImplementation(() => ({ execute: jest.fn(), })), })); const MOCKED_BUILD_TRANSACTION_PIPELINE = build_transaction_1.BuildTransactionPipeline; const MOCKED_CLASSIC_SIGN_REQUIREMENTS_PIPELINE = classic_sign_requirements_1.ClassicSignRequirementsPipeline; const MOCKED_SIGN_TRANSACTION_PIPELINE = sign_transaction_1.SignTransactionPipeline; const MOCKED_SUBMIT_TRANSACTION_PIPELINE = submit_transaction_1.SubmitTransactionPipeline; const MOCKED_PLUGIN_BASE = { preProcess: jest.fn(), postProcess: jest.fn(), }; const MOCKED_BUILD_TRANSACTION_PLUGIN = jest.mocked(Object.assign(Object.assign({}, MOCKED_PLUGIN_BASE), { type: 'BuildTransactionPipeline' })); const MOCKED_CLASSIC_SIGN_REQUIREMENTS_PLUGIN = jest.mocked(Object.assign(Object.assign({}, MOCKED_PLUGIN_BASE), { type: 'ClassicSignRequirementsPipeline' })); const MOCKED_SIGN_TRANSACTION_PLUGIN = jest.mocked(Object.assign(Object.assign({}, MOCKED_PLUGIN_BASE), { type: 'SignTransactionPipeline' })); const MOCKED_SUBMIT_TRANSACTION_PLUGIN = jest.mocked(Object.assign(Object.assign({}, MOCKED_PLUGIN_BASE), { type: 'SubmitTransactionPipeline' })); const TESTNET_NETWORK_CONFIG = (0, network_1.TestNet)(); const MOCKED_TX_INVOCATION = { header: { source: 'GACF23GKVFTU77K6W6PWSVN7YBM63UHDULILIEXJO6FR4YKMJ7FW3DTI', fee: '100', timeout: 100, }, signers: [], }; const MOCKED_PIPELINE_ITEM = { operations: [], txInvocation: MOCKED_TX_INVOCATION, }; describe('Classic Transaction Pipeline', () => { describe('Initialize', () => { it('should initialize the Classic Transaction Pipeline', () => { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); expect(pipeline).toBeInstanceOf(classic_transaction_1.ClassicTransactionPipeline); expect(pipeline.type).toEqual(types_1.ClassicTransactionPipelineType.id); }); it('should initialize the Classic Transaction Pipeline with no plugins', () => { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [], }); expect(pipeline).toBeInstanceOf(classic_transaction_1.ClassicTransactionPipeline); expect(pipeline.type).toEqual(types_1.ClassicTransactionPipelineType.id); }); it('should initialize the Classic Transaction Pipeline with generic plugins', () => { const debugPlugin = new debug_1.DebugPlugin('error'); const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [debugPlugin], }); expect(pipeline).toBeInstanceOf(classic_transaction_1.ClassicTransactionPipeline); expect(pipeline.type).toEqual(types_1.ClassicTransactionPipelineType.id); }); it('should initialize the Classic Transaction Pipeline with classic transaction pipeline plugins', () => { const channelAccountsPlugin = new channel_accounts_1.ClassicChannelAccountsPlugin({ channels: [] }); const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [channelAccountsPlugin], }); expect(pipeline).toBeInstanceOf(classic_transaction_1.ClassicTransactionPipeline); expect(pipeline.type).toEqual(types_1.ClassicTransactionPipelineType.id); }); it('should initialize the Classic Transaction Pipeline with classic transaction internal pipelines plugins', () => { const feeBumpWrapperPlugin = new fee_bump_1.FeeBumpWrapperPlugin(MOCKED_TX_INVOCATION); const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [feeBumpWrapperPlugin], }); expect(pipeline).toBeInstanceOf(classic_transaction_1.ClassicTransactionPipeline); expect(pipeline.type).toEqual(types_1.ClassicTransactionPipelineType.id); }); it('should initialize the Classic Transaction Pipeline with multiple plugin types', () => { const debugPlugin = new debug_1.DebugPlugin('error'); const feeBumpWrapperPlugin = new fee_bump_1.FeeBumpWrapperPlugin(MOCKED_TX_INVOCATION); const channelAccountsPlugin = new channel_accounts_1.ClassicChannelAccountsPlugin({ channels: [] }); const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [debugPlugin, feeBumpWrapperPlugin, channelAccountsPlugin], }); expect(pipeline).toBeInstanceOf(classic_transaction_1.ClassicTransactionPipeline); expect(pipeline.type).toEqual(types_1.ClassicTransactionPipelineType.id); }); it('should initialize the Classic Transaction Pipeline with build transaction pipeline plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [MOCKED_BUILD_TRANSACTION_PLUGIN], }); yield pipeline.execute(MOCKED_PIPELINE_ITEM); expect(MOCKED_BUILD_TRANSACTION_PIPELINE).toHaveBeenCalledWith([MOCKED_BUILD_TRANSACTION_PLUGIN]); })); it('should initialize the Classic Transaction Pipeline with classic sign requirements pipeline plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [MOCKED_CLASSIC_SIGN_REQUIREMENTS_PLUGIN], }); yield pipeline.execute(MOCKED_PIPELINE_ITEM); expect(MOCKED_CLASSIC_SIGN_REQUIREMENTS_PIPELINE).toHaveBeenCalledWith([MOCKED_CLASSIC_SIGN_REQUIREMENTS_PLUGIN]); })); it('should initialize the Classic Transaction Pipeline with sign transaction pipeline plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [MOCKED_SIGN_TRANSACTION_PLUGIN], }); yield pipeline.execute(MOCKED_PIPELINE_ITEM); expect(MOCKED_SIGN_TRANSACTION_PIPELINE).toHaveBeenCalledWith([MOCKED_SIGN_TRANSACTION_PLUGIN]); })); it('should initialize the Classic Transaction Pipeline with submit transaction pipeline plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG, { plugins: [MOCKED_SUBMIT_TRANSACTION_PLUGIN], }); yield pipeline.execute(MOCKED_PIPELINE_ITEM); expect(MOCKED_SUBMIT_TRANSACTION_PIPELINE).toHaveBeenCalledWith([MOCKED_SUBMIT_TRANSACTION_PLUGIN]); })); }); describe('Core functionalities', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should execute each internal transaction pipeline once', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); yield pipeline.execute(MOCKED_PIPELINE_ITEM); expect(MOCKED_BUILD_TRANSACTION_PIPELINE).toHaveBeenCalledOnce(); expect(MOCKED_CLASSIC_SIGN_REQUIREMENTS_PIPELINE).toHaveBeenCalledOnce(); expect(MOCKED_SIGN_TRANSACTION_PIPELINE).toHaveBeenCalledOnce(); expect(MOCKED_SUBMIT_TRANSACTION_PIPELINE).toHaveBeenCalledOnce(); })); it('should execute each internal transaction pipeline in order', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); yield pipeline.execute(MOCKED_PIPELINE_ITEM); expect(MOCKED_CLASSIC_SIGN_REQUIREMENTS_PIPELINE).toHaveBeenCalledAfter(MOCKED_BUILD_TRANSACTION_PIPELINE); expect(MOCKED_SIGN_TRANSACTION_PIPELINE).toHaveBeenCalledAfter(MOCKED_CLASSIC_SIGN_REQUIREMENTS_PIPELINE); expect(MOCKED_SUBMIT_TRANSACTION_PIPELINE).toHaveBeenCalledAfter(MOCKED_SIGN_TRANSACTION_PIPELINE); })); }); it('should process the Input into an Output', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { MOCKED_SUBMIT_TRANSACTION_PIPELINE.mockImplementationOnce(() => ({ execute: jest.fn().mockResolvedValueOnce('output'), })); const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); // eslint-disable-next-line @typescript-eslint/no-explicit-any const processSpy = jest.spyOn(pipeline, 'process'); const result = yield pipeline.execute(MOCKED_PIPELINE_ITEM, '0'); expect(processSpy).toHaveBeenCalledOnce(); expect(processSpy).toHaveBeenCalledWith(MOCKED_PIPELINE_ITEM, '0'); expect(processSpy).toHaveBeenCalledExactlyOnceWith(MOCKED_PIPELINE_ITEM, '0'); expect(result).toEqual('output'); })); it('should accept build transaction pipeline execution plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); const executionPlugins = [MOCKED_BUILD_TRANSACTION_PLUGIN]; const MOCKED_ITEM_WITH_PLUGINS = Object.assign(Object.assign({}, MOCKED_PIPELINE_ITEM), { options: { executionPlugins } }); yield pipeline.execute(MOCKED_ITEM_WITH_PLUGINS); expect(MOCKED_BUILD_TRANSACTION_PIPELINE).toHaveBeenCalledWith([MOCKED_BUILD_TRANSACTION_PLUGIN]); })); it('should accept classic sign requirements pipeline execution plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); const executionPlugins = [MOCKED_CLASSIC_SIGN_REQUIREMENTS_PLUGIN]; const MOCKED_ITEM_WITH_PLUGINS = Object.assign(Object.assign({}, MOCKED_PIPELINE_ITEM), { options: { executionPlugins } }); yield pipeline.execute(MOCKED_ITEM_WITH_PLUGINS); expect(MOCKED_CLASSIC_SIGN_REQUIREMENTS_PIPELINE).toHaveBeenCalledWith([MOCKED_CLASSIC_SIGN_REQUIREMENTS_PLUGIN]); })); it('should accept sign transaction pipeline execution plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); const executionPlugins = [MOCKED_SIGN_TRANSACTION_PLUGIN]; const MOCKED_ITEM_WITH_PLUGINS = Object.assign(Object.assign({}, MOCKED_PIPELINE_ITEM), { options: { executionPlugins } }); yield pipeline.execute(MOCKED_ITEM_WITH_PLUGINS); expect(MOCKED_SIGN_TRANSACTION_PIPELINE).toHaveBeenCalledWith([MOCKED_SIGN_TRANSACTION_PLUGIN]); })); it('should accept submit transaction pipeline execution plugins', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const pipeline = new classic_transaction_1.ClassicTransactionPipeline(TESTNET_NETWORK_CONFIG); const executionPlugins = [MOCKED_SUBMIT_TRANSACTION_PLUGIN]; const MOCKED_ITEM_WITH_PLUGINS = Object.assign(Object.assign({}, MOCKED_PIPELINE_ITEM), { options: { executionPlugins } }); yield pipeline.execute(MOCKED_ITEM_WITH_PLUGINS); expect(MOCKED_SUBMIT_TRANSACTION_PIPELINE).toHaveBeenCalledWith([MOCKED_SUBMIT_TRANSACTION_PLUGIN]); })); });