|
|
@ -1,10 +1,9 @@ |
|
|
|
import { strict as assert } from 'assert'; |
|
|
|
|
|
|
|
import sinon from 'sinon'; |
|
|
|
import sinon from 'sinon'; |
|
|
|
import { getNetworkDisplayName } from './util'; |
|
|
|
import { getNetworkDisplayName } from './util'; |
|
|
|
import NetworkController, { NETWORK_EVENTS } from './network'; |
|
|
|
import NetworkController, { NETWORK_EVENTS } from './network'; |
|
|
|
|
|
|
|
|
|
|
|
describe('NetworkController', function () { |
|
|
|
describe('NetworkController', () => { |
|
|
|
describe('controller', function () { |
|
|
|
describe('controller', () => { |
|
|
|
let networkController; |
|
|
|
let networkController; |
|
|
|
let getLatestBlockStub; |
|
|
|
let getLatestBlockStub; |
|
|
|
let setProviderTypeAndWait; |
|
|
|
let setProviderTypeAndWait; |
|
|
@ -13,7 +12,7 @@ describe('NetworkController', function () { |
|
|
|
getAccounts: noop, |
|
|
|
getAccounts: noop, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
beforeEach(function () { |
|
|
|
beforeEach(() => { |
|
|
|
networkController = new NetworkController(); |
|
|
|
networkController = new NetworkController(); |
|
|
|
getLatestBlockStub = sinon |
|
|
|
getLatestBlockStub = sinon |
|
|
|
.stub(networkController, 'getLatestBlock') |
|
|
|
.stub(networkController, 'getLatestBlock') |
|
|
@ -28,118 +27,108 @@ describe('NetworkController', function () { |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
afterEach(function () { |
|
|
|
afterEach(() => { |
|
|
|
getLatestBlockStub.reset(); |
|
|
|
getLatestBlockStub.reset(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe('#provider', function () { |
|
|
|
describe('#provider', () => { |
|
|
|
it('provider should be updatable without reassignment', function () { |
|
|
|
it('provider should be updatable without reassignment', () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
const providerProxy = networkController.getProviderAndBlockTracker() |
|
|
|
const providerProxy = networkController.getProviderAndBlockTracker() |
|
|
|
.provider; |
|
|
|
.provider; |
|
|
|
assert.equal(providerProxy.test, undefined); |
|
|
|
expect(providerProxy.test).toBeUndefined(); |
|
|
|
providerProxy.setTarget({ test: true }); |
|
|
|
providerProxy.setTarget({ test: true }); |
|
|
|
assert.equal(providerProxy.test, true); |
|
|
|
expect(providerProxy.test).toStrictEqual(true); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe('#getNetworkState', function () { |
|
|
|
describe('#getNetworkState', () => { |
|
|
|
it('should return "loading" when new', function () { |
|
|
|
it('should return "loading" when new', () => { |
|
|
|
const networkState = networkController.getNetworkState(); |
|
|
|
const networkState = networkController.getNetworkState(); |
|
|
|
assert.equal(networkState, 'loading', 'network is loading'); |
|
|
|
expect(networkState).toStrictEqual('loading'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe('#setNetworkState', function () { |
|
|
|
describe('#setNetworkState', () => { |
|
|
|
it('should update the network', function () { |
|
|
|
it('should update the network', () => { |
|
|
|
networkController.setNetworkState('1'); |
|
|
|
networkController.setNetworkState('1'); |
|
|
|
const networkState = networkController.getNetworkState(); |
|
|
|
const networkState = networkController.getNetworkState(); |
|
|
|
assert.equal(networkState, '1', 'network is 1'); |
|
|
|
expect(networkState).toStrictEqual('1'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe('#setProviderType', function () { |
|
|
|
describe('#setProviderType', () => { |
|
|
|
it('should update provider.type', function () { |
|
|
|
it('should update provider.type', () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.setProviderType('mainnet'); |
|
|
|
networkController.setProviderType('mainnet'); |
|
|
|
const { type } = networkController.getProviderConfig(); |
|
|
|
const { type } = networkController.getProviderConfig(); |
|
|
|
assert.equal(type, 'mainnet', 'provider type is updated'); |
|
|
|
expect(type).toStrictEqual('mainnet'); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
it('should set the network to loading', function () { |
|
|
|
it('should set the network to loading', () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
|
|
|
|
|
|
|
|
const spy = sinon.spy(networkController, 'setNetworkState'); |
|
|
|
const spy = sinon.spy(networkController, 'setNetworkState'); |
|
|
|
networkController.setProviderType('mainnet'); |
|
|
|
networkController.setProviderType('mainnet'); |
|
|
|
|
|
|
|
|
|
|
|
assert.equal( |
|
|
|
expect(spy.callCount).toStrictEqual(1); |
|
|
|
spy.callCount, |
|
|
|
expect(spy.calledOnceWithExactly('loading')).toStrictEqual(true); |
|
|
|
1, |
|
|
|
|
|
|
|
'should have called setNetworkState 2 times', |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
assert.ok( |
|
|
|
|
|
|
|
spy.calledOnceWithExactly('loading'), |
|
|
|
|
|
|
|
'should have called with "loading" first', |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe('#getEIP1559Compatibility', function () { |
|
|
|
describe('#getEIP1559Compatibility', () => { |
|
|
|
it('should return false when baseFeePerGas is not in the block header', async function () { |
|
|
|
it('should return false when baseFeePerGas is not in the block header', async () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
const supportsEIP1559 = await networkController.getEIP1559Compatibility(); |
|
|
|
const supportsEIP1559 = await networkController.getEIP1559Compatibility(); |
|
|
|
assert.equal(supportsEIP1559, false); |
|
|
|
expect(supportsEIP1559).toStrictEqual(false); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
it('should return true when baseFeePerGas is in block header', async function () { |
|
|
|
it('should return true when baseFeePerGas is in block header', async () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
getLatestBlockStub.callsFake(() => |
|
|
|
getLatestBlockStub.callsFake(() => |
|
|
|
Promise.resolve({ baseFeePerGas: '0xa ' }), |
|
|
|
Promise.resolve({ baseFeePerGas: '0xa ' }), |
|
|
|
); |
|
|
|
); |
|
|
|
const supportsEIP1559 = await networkController.getEIP1559Compatibility(); |
|
|
|
const supportsEIP1559 = await networkController.getEIP1559Compatibility(); |
|
|
|
assert.equal(supportsEIP1559, true); |
|
|
|
expect(supportsEIP1559).toStrictEqual(true); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
it('should store EIP1559 support in state to reduce calls to getLatestBlock', async function () { |
|
|
|
it('should store EIP1559 support in state to reduce calls to getLatestBlock', async () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
getLatestBlockStub.callsFake(() => |
|
|
|
getLatestBlockStub.callsFake(() => |
|
|
|
Promise.resolve({ baseFeePerGas: '0xa ' }), |
|
|
|
Promise.resolve({ baseFeePerGas: '0xa ' }), |
|
|
|
); |
|
|
|
); |
|
|
|
await networkController.getEIP1559Compatibility(); |
|
|
|
await networkController.getEIP1559Compatibility(); |
|
|
|
const supportsEIP1559 = await networkController.getEIP1559Compatibility(); |
|
|
|
const supportsEIP1559 = await networkController.getEIP1559Compatibility(); |
|
|
|
assert.equal(getLatestBlockStub.calledOnce, true); |
|
|
|
expect(getLatestBlockStub.calledOnce).toStrictEqual(true); |
|
|
|
assert.equal(supportsEIP1559, true); |
|
|
|
expect(supportsEIP1559).toStrictEqual(true); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
it('should clear stored EIP1559 support when changing networks', async function () { |
|
|
|
it('should clear stored EIP1559 support when changing networks', async () => { |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.initializeProvider(networkControllerProviderConfig); |
|
|
|
networkController.consoleThis = true; |
|
|
|
networkController.consoleThis = true; |
|
|
|
getLatestBlockStub.callsFake(() => |
|
|
|
getLatestBlockStub.callsFake(() => |
|
|
|
Promise.resolve({ baseFeePerGas: '0xa ' }), |
|
|
|
Promise.resolve({ baseFeePerGas: '0xa ' }), |
|
|
|
); |
|
|
|
); |
|
|
|
await networkController.getEIP1559Compatibility(); |
|
|
|
await networkController.getEIP1559Compatibility(); |
|
|
|
assert.equal( |
|
|
|
expect( |
|
|
|
networkController.networkDetails.getState().EIPS[1559], |
|
|
|
networkController.networkDetails.getState().EIPS[1559], |
|
|
|
true, |
|
|
|
).toStrictEqual(true); |
|
|
|
); |
|
|
|
|
|
|
|
getLatestBlockStub.callsFake(() => Promise.resolve({})); |
|
|
|
getLatestBlockStub.callsFake(() => Promise.resolve({})); |
|
|
|
await setProviderTypeAndWait('mainnet'); |
|
|
|
await setProviderTypeAndWait('mainnet'); |
|
|
|
assert.equal( |
|
|
|
expect( |
|
|
|
networkController.networkDetails.getState().EIPS[1559], |
|
|
|
networkController.networkDetails.getState().EIPS[1559], |
|
|
|
undefined, |
|
|
|
).toBeUndefined(); |
|
|
|
); |
|
|
|
|
|
|
|
await networkController.getEIP1559Compatibility(); |
|
|
|
await networkController.getEIP1559Compatibility(); |
|
|
|
assert.equal( |
|
|
|
expect( |
|
|
|
networkController.networkDetails.getState().EIPS[1559], |
|
|
|
networkController.networkDetails.getState().EIPS[1559], |
|
|
|
false, |
|
|
|
).toStrictEqual(false); |
|
|
|
); |
|
|
|
expect(getLatestBlockStub.calledTwice).toStrictEqual(true); |
|
|
|
assert.equal(getLatestBlockStub.calledTwice, true); |
|
|
|
|
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
describe('utils', function () { |
|
|
|
describe('utils', () => { |
|
|
|
it('getNetworkDisplayName should return the correct network name', function () { |
|
|
|
it('getNetworkDisplayName should return the correct network name', () => { |
|
|
|
const tests = [ |
|
|
|
const tests = [ |
|
|
|
{ |
|
|
|
{ |
|
|
|
input: '3', |
|
|
|
input: '3', |
|
|
@ -188,7 +177,7 @@ describe('NetworkController', function () { |
|
|
|
]; |
|
|
|
]; |
|
|
|
|
|
|
|
|
|
|
|
tests.forEach(({ input, expected }) => |
|
|
|
tests.forEach(({ input, expected }) => |
|
|
|
assert.equal(getNetworkDisplayName(input), expected), |
|
|
|
expect(getNetworkDisplayName(input)).toStrictEqual(expected), |
|
|
|
); |
|
|
|
); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|