From 8df1228e6f19383376c630b98433a22fd7c9b30b Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 25 Apr 2018 10:01:33 +0200 Subject: [PATCH] Mock events emitter (#79) --- packages/api-provider/src/mock/mocks.js | 12 +++++++++++- packages/api-provider/src/mock/on.js | 2 +- packages/api-provider/src/mock/state.js | 2 ++ packages/api-provider/src/mock/types.js | 2 ++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/api-provider/src/mock/mocks.js b/packages/api-provider/src/mock/mocks.js index 5ab8455330..1f5d68e0bf 100644 --- a/packages/api-provider/src/mock/mocks.js +++ b/packages/api-provider/src/mock/mocks.js @@ -6,6 +6,7 @@ // FIME: This file is way too long and way too messy import type { KeyringPair } from '@polkadot/util-keyring/types'; +import type { ProviderInterface$Emitted } from '../types'; import type { MockState, MockState$Subscription$Callback } from './types'; const BN = require('bn.js'); @@ -18,6 +19,9 @@ const storageKey = require('./storageKey'); const keyring = testKeyring(); +const emitEvents: Array = ['connected', 'disconnected']; +let emitIndex = 0; + function makeBlockHeader (prevNumber: BN) { const blockNumber = prevNumber.addn(1); @@ -53,10 +57,16 @@ function setStorageBn (storage, prefix: string, key: Uint8Array, value: BN): voi storage[storageKey(prefix, key)] = bnToU8a(value, 64, true); } -module.exports = function mocks ({ storage, subscriptions }: MockState): void { +module.exports = function mocks ({ emitter, storage, subscriptions }: MockState): void { let newHead = makeBlockHeader(new BN(-1)); setInterval(() => { + if (++emitIndex === emitEvents.length) { + emitIndex = 0; + } + + emitter.emit(emitEvents[emitIndex]); + newHead = makeBlockHeader(newHead.number); Object.values(keyring).forEach((pair, index) => { diff --git a/packages/api-provider/src/mock/on.js b/packages/api-provider/src/mock/on.js index e62783b19c..e80cad3066 100644 --- a/packages/api-provider/src/mock/on.js +++ b/packages/api-provider/src/mock/on.js @@ -7,5 +7,5 @@ import type { ProviderInterface$Emitted, ProviderInterface$EmitCb } from '../typ import type { MockState } from './types'; module.exports = function on (self: MockState, type: ProviderInterface$Emitted, sub: ProviderInterface$EmitCb): void { - self.l.error(`Provider does not have 'on' emitters for type '${type}'`); + self.emitter.on(type, sub); }; diff --git a/packages/api-provider/src/mock/state.js b/packages/api-provider/src/mock/state.js index a20309c958..c080946a85 100644 --- a/packages/api-provider/src/mock/state.js +++ b/packages/api-provider/src/mock/state.js @@ -5,6 +5,7 @@ import type { MockState, MockState$Storage } from './types'; +const EventEmitter = require('eventemitter3'); const interfaces = require('@polkadot/api-jsonrpc'); const u8aToHex = require('@polkadot/util/u8a/toHex'); const l = require('@polkadot/util/logger')('api-mock'); @@ -39,6 +40,7 @@ module.exports = function state (): MockState { }, {}); return { + emitter: new EventEmitter(), l, requests: Object.assign({}, REQUESTS), storage, diff --git a/packages/api-provider/src/mock/types.js b/packages/api-provider/src/mock/types.js index 2ec4e54c02..583137eb3e 100644 --- a/packages/api-provider/src/mock/types.js +++ b/packages/api-provider/src/mock/types.js @@ -3,6 +3,7 @@ // of the ISC license. See the LICENSE file for details. // @flow +import type EventEmitter from 'eventemitter3'; import type { Logger } from '@polkadot/util/types'; export type MockState$Subscription$Callback = (error: ?Error, value: mixed) => void; @@ -25,6 +26,7 @@ export type MockState$Requests = { }; export type MockState = { + emitter: EventEmitter, l: Logger, requests: MockState$Requests, storage: MockState$Storage,