PHP WebShell
Текущая директория: /opt/BitGoJS/modules/express/test/unit/clientRoutes
Просмотр файла: consolidateAccount.ts
import * as sinon from 'sinon';
import 'should-http';
import 'should-sinon';
import '../../lib/asserts';
import * as express from 'express';
import { handleV2ConsolidateAccount } from '../../../src/clientRoutes';
import { BitGo } from 'bitgo';
describe('Consolidate account', () => {
it('should fail if coin does not allow consolidation', async () => {
const coinStub = sinon.stub().returns({ allowsAccountConsolidations: () => false });
const stubBitgo = sinon.createStubInstance(BitGo as any, { coin: coinStub });
const mockRequest = {
bitgo: stubBitgo,
params: {
coin: 'tbtc',
id: '23423423423423',
},
body: {
consolidateAddresses: ['someAddr'],
},
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.rejectedWith(
'invalid coin selected'
);
});
it('should pass if coin allows consolidation', async () => {
const result = { failure: [] };
const { bitgoStub, consolidationStub } = createConsolidateMocks(result, true);
const mockRequest = {
bitgo: bitgoStub,
params: {
coin: 'txtz',
id: '23423423423423',
},
body: {
consolidateAddresses: ['someAddr'],
},
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.resolvedWith(
result
);
consolidationStub.should.be.calledOnceWith(mockRequest.body);
});
it('should fail on invalid array in body addresses', async () => {
const stubBitgo = sinon.createStubInstance(BitGo);
const mockRequest = {
bitgo: stubBitgo,
params: {
coin: 'talgo',
id: '23423423423423',
},
body: {
consolidateAddresses: 'someAddr',
},
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.rejectedWith(
'consolidate address must be an array of addresses'
);
});
function createConsolidateMocks(res, allowsAccountConsolidations = false, supportsTss = false) {
const consolidationStub = sinon.stub().returns(res);
const walletStub = { sendAccountConsolidations: consolidationStub };
const coinStub = {
supportsTss: () => supportsTss,
allowsAccountConsolidations: () => allowsAccountConsolidations,
wallets: () => ({ get: () => Promise.resolve(walletStub) }),
};
return {
bitgoStub: sinon.createStubInstance(BitGo as any, { coin: coinStub }),
consolidationStub,
};
}
it('should return 400 when all transactions fail', async () => {
const result = { success: [], failure: [0] };
const body = 'testbody';
const { bitgoStub, consolidationStub } = createConsolidateMocks(result, true);
const mockRequest = {
bitgo: bitgoStub,
params: {
coin: 'talgo',
},
body,
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.rejectedWith({
status: 400,
result,
});
consolidationStub.should.be.calledOnceWith(body);
});
it('should pass the apiVersion param to bitgo api consolidate/build', async () => {
const result = { success: [], failure: [] };
const body = { apiVersion: 'full' };
const { bitgoStub, consolidationStub } = createConsolidateMocks(result, true, true);
const mockRequest = {
bitgo: bitgoStub,
params: {
coin: 'tsol',
id: '23423423423423',
},
body,
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.resolvedWith(
result
);
consolidationStub.should.be.calledOnceWith(body);
});
it('should return 202 when some transactions fail', async () => {
const result = { success: [0], failure: [0] };
const body = 'testbody';
const { bitgoStub, consolidationStub } = createConsolidateMocks(result, true);
const mockRequest = {
bitgo: bitgoStub,
params: {
coin: 'talgo',
},
body,
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.rejectedWith({
status: 202,
result,
});
consolidationStub.should.be.calledOnceWith(body);
});
it('should return 200 when all transactions succeed', async () => {
const result = { failure: [] };
const body = 'testbody';
const { bitgoStub, consolidationStub } = createConsolidateMocks(result, true);
const mockRequest = {
bitgo: bitgoStub,
params: {
coin: 'talgo',
},
body,
};
await handleV2ConsolidateAccount(mockRequest as express.Request & typeof mockRequest).should.be.resolvedWith(
result
);
consolidationStub.should.be.calledOnceWith(body);
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!