Skip to content

Commit 3e332e4

Browse files
shanejonasBelfordZ
authored andcommitted
WIP Refactor NetworkController to BaseControllerV2
Fixed tests to pass Added test isolation of race condition Remove node-version file Fixed TokenListController test Fixed broken tests Fix network controller to no longer use settimeout Fixed test cleanup in a variety of cases Remove tsfmt file
1 parent a106d4d commit 3e332e4

11 files changed

+2491
-2310
lines changed

src/ComposableController.test.ts

Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
import { PreferencesController } from './user/PreferencesController';
1515
import {
1616
NetworkController,
17+
NetworkControllerMessenger,
1718
NetworksChainId,
1819
} from './network/NetworkController';
1920
import { AssetsContractController } from './assets/AssetsContractController';
@@ -87,25 +88,46 @@ class BarController extends BaseController<never, BarControllerState> {
8788
}
8889

8990
describe('ComposableController', () => {
91+
let networkMessenger: NetworkControllerMessenger;
92+
let messenger: any;
93+
94+
beforeEach(() => {
95+
const _messenger = new ControllerMessenger();
96+
97+
networkMessenger = _messenger.getRestricted({
98+
name: 'NetworkController',
99+
allowedEvents: ['NetworkController:stateChange'],
100+
allowedActions: [],
101+
});
102+
103+
messenger = _messenger.getRestricted<string, any, any>({
104+
name: 'ComposableController',
105+
allowedEvents: ['NetworkController:stateChange'],
106+
allowedActions: [],
107+
});
108+
});
109+
90110
afterEach(() => {
91111
sinon.restore();
92112
});
93113

94114
describe('BaseController', () => {
95115
it('should compose controller state', () => {
96116
const preferencesController = new PreferencesController();
97-
const networkController = new NetworkController();
117+
const networkController = new NetworkController({
118+
messenger: networkMessenger,
119+
});
98120
const assetContractController = new AssetsContractController({
99121
onPreferencesStateChange: (listener) =>
100122
preferencesController.subscribe(listener),
101123
onNetworkStateChange: (listener) =>
102-
networkController.subscribe(listener),
124+
messenger.subscribe('NetworkController:stateChange', listener),
103125
});
104126
const collectiblesController = new CollectiblesController({
105127
onPreferencesStateChange: (listener) =>
106128
preferencesController.subscribe(listener),
107129
onNetworkStateChange: (listener) =>
108-
networkController.subscribe(listener),
130+
messenger.subscribe('NetworkController:stateChange', listener),
109131
getERC721AssetName: assetContractController.getERC721AssetName.bind(
110132
assetContractController,
111133
),
@@ -130,17 +152,21 @@ describe('ComposableController', () => {
130152
onPreferencesStateChange: (listener) =>
131153
preferencesController.subscribe(listener),
132154
onNetworkStateChange: (listener) =>
133-
networkController.subscribe(listener),
155+
messenger.subscribe('NetworkController:stateChange', listener),
134156
});
135-
const controller = new ComposableController([
136-
new AddressBookController(),
137-
collectiblesController,
138-
assetContractController,
139-
new EnsController(),
140-
networkController,
141-
preferencesController,
142-
tokensController,
143-
]);
157+
const controller = new ComposableController(
158+
[
159+
new AddressBookController(),
160+
collectiblesController,
161+
assetContractController,
162+
new EnsController(),
163+
networkController,
164+
preferencesController,
165+
tokensController,
166+
],
167+
messenger,
168+
);
169+
144170
expect(controller.state).toStrictEqual({
145171
AddressBookController: { addressBook: {} },
146172
AssetsContractController: {},
@@ -183,18 +209,20 @@ describe('ComposableController', () => {
183209

184210
it('should compose flat controller state', () => {
185211
const preferencesController = new PreferencesController();
186-
const networkController = new NetworkController();
212+
const networkController = new NetworkController({
213+
messenger: networkMessenger,
214+
});
187215
const assetContractController = new AssetsContractController({
188216
onPreferencesStateChange: (listener) =>
189217
preferencesController.subscribe(listener),
190218
onNetworkStateChange: (listener) =>
191-
networkController.subscribe(listener),
219+
messenger.subscribe('NetworkController:stateChange', listener),
192220
});
193221
const collectiblesController = new CollectiblesController({
194222
onPreferencesStateChange: (listener) =>
195223
preferencesController.subscribe(listener),
196224
onNetworkStateChange: (listener) =>
197-
networkController.subscribe(listener),
225+
messenger.subscribe('NetworkController:stateChange', listener),
198226
getERC721AssetName: assetContractController.getERC721AssetName.bind(
199227
assetContractController,
200228
),
@@ -219,17 +247,20 @@ describe('ComposableController', () => {
219247
onPreferencesStateChange: (listener) =>
220248
preferencesController.subscribe(listener),
221249
onNetworkStateChange: (listener) =>
222-
networkController.subscribe(listener),
250+
messenger.subscribe('NetworkController:stateChange', listener),
223251
});
224-
const controller = new ComposableController([
225-
new AddressBookController(),
226-
collectiblesController,
227-
assetContractController,
228-
new EnsController(),
229-
networkController,
230-
preferencesController,
231-
tokensController,
232-
]);
252+
const controller = new ComposableController(
253+
[
254+
new AddressBookController(),
255+
collectiblesController,
256+
assetContractController,
257+
new EnsController(),
258+
networkController,
259+
preferencesController,
260+
tokensController,
261+
],
262+
messenger,
263+
);
233264
expect(controller.flatState).toStrictEqual({
234265
addressBook: {},
235266
allCollectibleContracts: {},

src/assets/AssetsContractController.test.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ import HttpProvider from 'ethjs-provider-http';
22
import { IPFS_DEFAULT_GATEWAY_URL } from '../constants';
33
import { SupportedTokenDetectionNetworks } from '../util';
44
import { PreferencesController } from '../user/PreferencesController';
5-
import { NetworkController } from '../network/NetworkController';
5+
import {
6+
NetworkController,
7+
NetworkControllerMessenger,
8+
} from '../network/NetworkController';
9+
import { ControllerMessenger } from '../ControllerMessenger';
610
import {
711
AssetsContractController,
812
MISSING_PROVIDER_ERROR,
@@ -12,6 +16,8 @@ const MAINNET_PROVIDER = new HttpProvider(
1216
'https://mainnet.infura.io/v3/341eacb578dd44a1a049cbc5f6fd4035',
1317
);
1418

19+
const INFURA_PROJECT_ID = 'ad3a368836ff4596becc3be8e2f137ac';
20+
1521
const ERC20_UNI_ADDRESS = '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984';
1622
const ERC20_DAI_ADDRESS = '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359';
1723
const ERC721_GODS_ADDRESS = '0x6EbeAf8e8E946F0716E6533A6f2cefc83f60e8Ab';
@@ -25,13 +31,24 @@ describe('AssetsContractController', () => {
2531
let assetsContract: AssetsContractController;
2632
let preferences: PreferencesController;
2733
let network: NetworkController;
34+
let messenger: NetworkControllerMessenger;
2835

2936
beforeEach(() => {
37+
messenger = new ControllerMessenger().getRestricted({
38+
name: 'NetworkController',
39+
allowedEvents: ['NetworkController:stateChange'],
40+
allowedActions: [],
41+
});
42+
43+
network = new NetworkController({
44+
messenger,
45+
infuraProjectId: INFURA_PROJECT_ID,
46+
});
3047
preferences = new PreferencesController();
31-
network = new NetworkController();
3248
assetsContract = new AssetsContractController({
3349
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
34-
onNetworkStateChange: (listener) => network.subscribe(listener),
50+
onNetworkStateChange: (listener) =>
51+
messenger.subscribe('NetworkController:stateChange', listener),
3552
});
3653
});
3754

src/assets/CollectibleDetectionController.test.ts

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
import sinon from 'sinon';
22
import nock from 'nock';
3-
import { NetworkController } from '../network/NetworkController';
3+
import {
4+
NetworkController,
5+
NetworkControllerMessenger,
6+
} from '../network/NetworkController';
47
import { PreferencesController } from '../user/PreferencesController';
58
import { OPENSEA_PROXY_URL } from '../constants';
9+
import { ControllerMessenger } from '../ControllerMessenger';
610
import { CollectiblesController } from './CollectiblesController';
711
import { AssetsContractController } from './AssetsContractController';
812
import { CollectibleDetectionController } from './CollectibleDetectionController';
913

1014
const DEFAULT_INTERVAL = 180000;
1115
const MAINNET = 'mainnet';
1216
const ROPSTEN = 'ropsten';
17+
const INFURA_PROJECT_ID = 'ad3a368836ff4596becc3be8e2f137ac';
1318

1419
describe('CollectibleDetectionController', () => {
1520
let collectibleDetection: CollectibleDetectionController;
1621
let preferences: PreferencesController;
17-
let network: NetworkController;
1822
let collectiblesController: CollectiblesController;
1923
let assetsContract: AssetsContractController;
24+
let messenger: NetworkControllerMessenger;
2025

2126
const getOpenSeaApiKeyStub = jest.fn();
2227
beforeAll(() => {
@@ -28,16 +33,27 @@ describe('CollectibleDetectionController', () => {
2833
});
2934

3035
beforeEach(async () => {
36+
messenger = new ControllerMessenger().getRestricted({
37+
name: 'NetworkController',
38+
allowedEvents: ['NetworkController:stateChange'],
39+
allowedActions: [],
40+
});
41+
42+
new NetworkController({
43+
messenger,
44+
infuraProjectId: INFURA_PROJECT_ID,
45+
});
3146
preferences = new PreferencesController();
32-
network = new NetworkController();
3347
assetsContract = new AssetsContractController({
3448
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
35-
onNetworkStateChange: (listener) => network.subscribe(listener),
49+
onNetworkStateChange: (listener) =>
50+
messenger.subscribe('NetworkController:stateChange', listener),
3651
});
3752

3853
collectiblesController = new CollectiblesController({
3954
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
40-
onNetworkStateChange: (listener) => network.subscribe(listener),
55+
onNetworkStateChange: (listener) =>
56+
messenger.subscribe('NetworkController:stateChange', listener),
4157
getERC721AssetName:
4258
assetsContract.getERC721AssetName.bind(assetsContract),
4359
getERC721AssetSymbol:
@@ -55,7 +71,8 @@ describe('CollectibleDetectionController', () => {
5571
onCollectiblesStateChange: (listener) =>
5672
collectiblesController.subscribe(listener),
5773
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
58-
onNetworkStateChange: (listener) => network.subscribe(listener),
74+
onNetworkStateChange: (listener) =>
75+
messenger.subscribe('NetworkController:stateChange', listener),
5976
getOpenSeaApiKey: getOpenSeaApiKeyStub,
6077
addCollectible: collectiblesController.addCollectible.bind(
6178
collectiblesController,
@@ -226,7 +243,8 @@ describe('CollectibleDetectionController', () => {
226243
collectiblesController.subscribe(listener),
227244
onPreferencesStateChange: (listener) =>
228245
preferences.subscribe(listener),
229-
onNetworkStateChange: (listener) => network.subscribe(listener),
246+
onNetworkStateChange: (listener) =>
247+
messenger.subscribe('NetworkController:stateChange', listener),
230248
getOpenSeaApiKey: () => collectiblesController.openSeaApiKey,
231249
addCollectible: collectiblesController.addCollectible.bind(
232250
collectiblesController,
@@ -264,7 +282,8 @@ describe('CollectibleDetectionController', () => {
264282
collectiblesController.subscribe(listener),
265283
onPreferencesStateChange: (listener) =>
266284
preferences.subscribe(listener),
267-
onNetworkStateChange: (listener) => network.subscribe(listener),
285+
onNetworkStateChange: (listener) =>
286+
messenger.subscribe('NetworkController:stateChange', listener),
268287
getOpenSeaApiKey: () => collectiblesController.openSeaApiKey,
269288
addCollectible: collectiblesController.addCollectible.bind(
270289
collectiblesController,

0 commit comments

Comments
 (0)