Skip to content

Commit

Permalink
[WIP #165] DONE integration tests for api/loader.
Browse files Browse the repository at this point in the history
Add 1 test to multisignatures API int tests.
Fix unit tests for delegatesAPI.
  • Loading branch information
mcanever committed Apr 21, 2018
1 parent 0b55c37 commit ee01be5
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 7 deletions.
34 changes: 30 additions & 4 deletions tests/integration/api/loader.spec.ts
@@ -1,14 +1,28 @@
import initializer from '../common/init';
import { checkReturnObjKeyVal } from './utils';
import { Symbols } from '../../../src/ioc/symbols';
import * as supertest from 'supertest';
import { expect } from "chai";
import initial = require('lodash/fp/initial');

// tslint:disable no-unused-expression max-line-length
describe('api/loader', () => {
describe('api/loader/status', () => {

initializer.setup();

describe('/', () => {
checkReturnObjKeyVal('loaded', true, '/api/loader/status');
it('should return loaded false if blockchain is not ready');
it('should return loaded false if blockchain is not ready', () => {
const loaderModule = initializer.appManager.container.get(Symbols.modules.loader);
loaderModule.cleanup();
return supertest(initializer.appManager.expressApp)
.get('/api/loader/status')
.expect(200)
.then((response) => {
expect(response.body.loaded).is.false;
loaderModule.onBlockchainReady();
});
});
});

describe('/sync', () => {
Expand All @@ -20,8 +34,20 @@ describe('api/loader', () => {
describe('/ping', () => {
// cause last block is too old
checkReturnObjKeyVal('success', false, '/api/loader/status/ping');

it('should return success true if lastblock is within blockReceiptTimeOut');
it('should return success true if lastblock is within blockReceiptTimeOut', async () => {
const blocksModule = initializer.appManager.container.get(Symbols.modules.blocks);
const constants = initializer.appManager.container.get(Symbols.helpers.constants);
await initializer.rawMineBlocks(1);
constants.blockReceiptTimeOut = 60 + Math.floor(Date.now() / 1000) -
(Math.floor(constants.epochTime.getTime() / 1000) + blocksModule.lastBlock.timestamp);
return supertest(initializer.appManager.expressApp)
.get('/api/loader/status/ping')
.expect(200)
.then((response) => {
expect(response.body.success).is.true;
constants.blockReceiptTimeOut = 60;
});
});
});

});
39 changes: 38 additions & 1 deletion tests/integration/api/multisignatures.spec.ts
Expand Up @@ -2,6 +2,10 @@ import { expect } from 'chai';
import * as supertest from 'supertest';
import initializer from '../common/init';
import { checkPubKey, checkRequiredParam, checkReturnObjKeyVal } from './utils';
import {
createMultiSignTransaction, createRandomAccountWithFunds, createRandomWallet
} from '../common/utils';
import { Symbols } from '../../../src/ioc/symbols';

// tslint:disable no-unused-expression max-line-length
describe('api/multisignatures', () => {
Expand All @@ -12,7 +16,40 @@ describe('api/multisignatures', () => {
checkRequiredParam('publicKey', '/api/multisignatures/accounts');
checkPubKey('publicKey', '/api/multisignatures/accounts');
checkReturnObjKeyVal('accounts', [], '/api/multisignatures/accounts?publicKey=e0f1c6cca365cd61bbb01cfb454828a698fa4b7170e85a597dde510567f9dda5');
it('should return correct accounts info if account is, indeed a multisig account');
it('should return correct accounts info if account is, indeed a multisig account', async () => {
const txModule = initializer.appManager.container.get(Symbols.modules.transactions);
const transportModule = initializer.appManager.container.get(Symbols.modules.transport);
const ed = initializer.appManager.container.get(Symbols.helpers.ed);
const txLogic = initializer.appManager.container.get(Symbols.logic.transaction);
const senderData = await createRandomAccountWithFunds(5000000000);
const sender = senderData.wallet;
const keys = [createRandomWallet(), createRandomWallet(), createRandomWallet()];
const signedTx = createMultiSignTransaction(sender, 3, keys.map((k) => '+' + k.publicKey));
await txModule.receiveTransactions([signedTx], false, false);
await initializer.rawMineBlocks(1);
const signatures = keys.map((k) => ed.sign(
txLogic.getHash(signedTx, true, false),
{
privateKey: Buffer.from(k.privKey, 'hex'),
publicKey : Buffer.from(k.publicKey, 'hex'),
}
).toString('hex'));

await transportModule.receiveSignatures(signatures.map((sig) => ({
signature : sig,
transaction: signedTx.id,
})));

await initializer.rawMineBlocks(1);
return supertest(initializer.appManager.expressApp)
.get('/api/multisignatures/accounts?publicKey=' + keys[0].publicKey)
.expect(200)
.then((response) => {
expect(Array.isArray(response.body.accounts)).is.true;
expect(response.body.accounts[0].multimin).is.eq(3);
expect(response.body.accounts[0].address).is.eq(sender.address);
});
});
});

describe('/pending', () => {
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/apis/delegatesAPI.spec.ts
Expand Up @@ -21,7 +21,7 @@ chai.use(chaiAsPromised);

// tslint:disable no-unused-expression max-line-length

describe('apis/blocksAPI', () => {
describe('apis/delegatesAPI', () => {

let sandbox: SinonSandbox;
let container: Container;
Expand Down Expand Up @@ -807,7 +807,7 @@ describe('apis/blocksAPI', () => {
.digest();

ed.enqueueResponse('makeKeypair', kp);
forgeModule.enqueueResponse('isForgeEnabledOn', false);
forgeModule.enqueueResponse('isForgeEnabledOn', true);
forgeModule.enqueueResponse('disableForge', {});
accounts.enqueueResponse('getAccount', account);
});
Expand Down

0 comments on commit ee01be5

Please sign in to comment.