Skip to content

Commit 4c820f9

Browse files
committed
Changed tests to be less DRY
1 parent ca02e47 commit 4c820f9

File tree

1 file changed

+111
-110
lines changed

1 file changed

+111
-110
lines changed

src/assets/TokenBalancesController.test.ts

Lines changed: 111 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -119,136 +119,137 @@ describe('TokenBalancesController', () => {
119119
});
120120
});
121121

122-
describe('with network controller', () => {
123-
let messenger: NetworkControllerMessenger;
124-
let preferences: PreferencesController;
125-
beforeEach(() => {
126-
messenger = new ControllerMessenger().getRestricted({
122+
const setupControllers = () => {
123+
const messenger: NetworkControllerMessenger =
124+
new ControllerMessenger().getRestricted({
127125
name: 'NetworkController',
128126
allowedEvents: ['NetworkController:stateChange'],
129127
allowedActions: [],
130128
});
131129

132-
new NetworkController({
133-
messenger,
134-
infuraProjectId: 'potato',
135-
});
136-
preferences = new PreferencesController();
130+
new NetworkController({
131+
messenger,
132+
infuraProjectId: 'potato',
137133
});
134+
const preferences = new PreferencesController();
135+
return { messenger, preferences };
136+
};
138137

139-
afterEach(() => {
140-
messenger.clearEventSubscriptions('NetworkController:stateChange');
138+
it('should update all balances', async () => {
139+
const { messenger, preferences } = setupControllers();
140+
const assets = new TokensController({
141+
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
142+
onNetworkStateChange: (listener) =>
143+
messenger.subscribe('NetworkController:stateChange', listener),
141144
});
145+
const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0';
146+
const tokenBalances = new TokenBalancesController(
147+
{
148+
onTokensStateChange: (listener) => assets.subscribe(listener),
149+
getSelectedAddress: () => preferences.state.selectedAddress,
150+
getERC20BalanceOf: sinon.stub().returns(new BN(1)),
151+
},
152+
{
153+
interval: 1337,
154+
tokens: [{ address, decimals: 18, symbol: 'EOS', aggregators: [] }],
155+
},
156+
);
157+
expect(tokenBalances.state.contractBalances).toStrictEqual({});
142158

143-
it('should update all balances', async () => {
144-
const assets = new TokensController({
145-
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
146-
onNetworkStateChange: (listener) =>
147-
messenger.subscribe('NetworkController:stateChange', listener),
148-
});
149-
const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0';
150-
const tokenBalances = new TokenBalancesController(
151-
{
152-
onTokensStateChange: (listener) => assets.subscribe(listener),
153-
getSelectedAddress: () => preferences.state.selectedAddress,
154-
getERC20BalanceOf: sinon.stub().returns(new BN(1)),
155-
},
156-
{
157-
interval: 1337,
158-
tokens: [{ address, decimals: 18, symbol: 'EOS', aggregators: [] }],
159-
},
160-
);
161-
expect(tokenBalances.state.contractBalances).toStrictEqual({});
159+
await tokenBalances.updateBalances();
160+
const mytoken = getToken(tokenBalances, address);
161+
expect(mytoken?.balanceError).toBeNull();
162+
expect(Object.keys(tokenBalances.state.contractBalances)).toContain(
163+
address,
164+
);
162165

163-
await tokenBalances.updateBalances();
164-
const mytoken = getToken(tokenBalances, address);
165-
expect(mytoken?.balanceError).toBeNull();
166-
expect(Object.keys(tokenBalances.state.contractBalances)).toContain(
167-
address,
168-
);
166+
expect(
167+
tokenBalances.state.contractBalances[address].toNumber(),
168+
).toBeGreaterThan(0);
169+
170+
messenger.clearEventSubscriptions('NetworkController:stateChange');
171+
});
169172

170-
expect(
171-
tokenBalances.state.contractBalances[address].toNumber(),
172-
).toBeGreaterThan(0);
173+
it('should handle `getERC20BalanceOf` error case', async () => {
174+
const { messenger, preferences } = setupControllers();
175+
const assets = new TokensController({
176+
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
177+
onNetworkStateChange: (listener) =>
178+
messenger.subscribe('NetworkController:stateChange', listener),
173179
});
180+
const errorMsg = 'Failed to get balance';
181+
const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0';
182+
const getERC20BalanceOfStub = sinon
183+
.stub()
184+
.returns(Promise.reject(new Error(errorMsg)));
185+
const tokenBalances = new TokenBalancesController(
186+
{
187+
onTokensStateChange: (listener) => assets.subscribe(listener),
188+
getSelectedAddress: () => preferences.state.selectedAddress,
189+
getERC20BalanceOf: getERC20BalanceOfStub,
190+
},
191+
{
192+
interval: 1337,
193+
tokens: [{ address, decimals: 18, symbol: 'EOS', aggregators: [] }],
194+
},
195+
);
174196

175-
it('should handle `getERC20BalanceOf` error case', async () => {
176-
const assets = new TokensController({
177-
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
178-
onNetworkStateChange: (listener) =>
179-
messenger.subscribe('NetworkController:stateChange', listener),
180-
});
181-
const errorMsg = 'Failed to get balance';
182-
const address = '0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0';
183-
const getERC20BalanceOfStub = sinon
184-
.stub()
185-
.returns(Promise.reject(new Error(errorMsg)));
186-
const tokenBalances = new TokenBalancesController(
187-
{
188-
onTokensStateChange: (listener) => assets.subscribe(listener),
189-
getSelectedAddress: () => preferences.state.selectedAddress,
190-
getERC20BalanceOf: getERC20BalanceOfStub,
191-
},
192-
{
193-
interval: 1337,
194-
tokens: [{ address, decimals: 18, symbol: 'EOS', aggregators: [] }],
195-
},
196-
);
197+
expect(tokenBalances.state.contractBalances).toStrictEqual({});
198+
await tokenBalances.updateBalances();
199+
const mytoken = getToken(tokenBalances, address);
200+
expect(mytoken?.balanceError).toBeInstanceOf(Error);
201+
expect(mytoken?.balanceError).toHaveProperty('message', errorMsg);
202+
expect(
203+
tokenBalances.state.contractBalances[address].toNumber(),
204+
).toStrictEqual(0);
197205

198-
expect(tokenBalances.state.contractBalances).toStrictEqual({});
199-
await tokenBalances.updateBalances();
200-
const mytoken = getToken(tokenBalances, address);
201-
expect(mytoken?.balanceError).toBeInstanceOf(Error);
202-
expect(mytoken?.balanceError).toHaveProperty('message', errorMsg);
203-
expect(
204-
tokenBalances.state.contractBalances[address].toNumber(),
205-
).toStrictEqual(0);
206+
getERC20BalanceOfStub.returns(new BN(1));
207+
await tokenBalances.updateBalances();
208+
expect(mytoken?.balanceError).toBeNull();
209+
expect(Object.keys(tokenBalances.state.contractBalances)).toContain(
210+
address,
211+
);
206212

207-
getERC20BalanceOfStub.returns(new BN(1));
208-
await tokenBalances.updateBalances();
209-
expect(mytoken?.balanceError).toBeNull();
210-
expect(Object.keys(tokenBalances.state.contractBalances)).toContain(
211-
address,
212-
);
213+
expect(
214+
tokenBalances.state.contractBalances[address].toNumber(),
215+
).toBeGreaterThan(0);
213216

214-
expect(
215-
tokenBalances.state.contractBalances[address].toNumber(),
216-
).toBeGreaterThan(0);
217-
});
217+
messenger.clearEventSubscriptions('NetworkController:stateChange');
218+
});
218219

219-
it('should subscribe to new sibling assets controllers', async () => {
220-
const assetsContract = new AssetsContractController({
221-
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
222-
onNetworkStateChange: (listener) =>
223-
messenger.subscribe('NetworkController:stateChange', listener),
224-
});
225-
const tokensController = new TokensController({
226-
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
227-
onNetworkStateChange: (listener) =>
228-
messenger.subscribe('NetworkController:stateChange', listener),
229-
});
220+
it('should subscribe to new sibling assets controllers', async () => {
221+
const { messenger, preferences } = setupControllers();
222+
const assetsContract = new AssetsContractController({
223+
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
224+
onNetworkStateChange: (listener) =>
225+
messenger.subscribe('NetworkController:stateChange', listener),
226+
});
227+
const tokensController = new TokensController({
228+
onPreferencesStateChange: (listener) => preferences.subscribe(listener),
229+
onNetworkStateChange: (listener) =>
230+
messenger.subscribe('NetworkController:stateChange', listener),
231+
});
230232

231-
const stub = stubCreateEthers(tokensController, false);
233+
const stub = stubCreateEthers(tokensController, false);
232234

233-
const tokenBalances = new TokenBalancesController(
234-
{
235-
onTokensStateChange: (listener) =>
236-
tokensController.subscribe(listener), // needs to be unsubbed?
237-
getSelectedAddress: () => preferences.state.selectedAddress,
238-
getERC20BalanceOf:
239-
assetsContract.getERC20BalanceOf.bind(assetsContract),
240-
},
241-
{ interval: 1337 },
242-
);
243-
const updateBalances = sinon.stub(tokenBalances, 'updateBalances');
244-
await tokensController.addToken('0x00', 'FOO', 18);
245-
const { tokens } = tokensController.state;
246-
const found = tokens.filter((token: Token) => token.address === '0x00');
247-
expect(found.length > 0).toBe(true);
248-
expect(updateBalances.called).toBe(true);
235+
const tokenBalances = new TokenBalancesController(
236+
{
237+
onTokensStateChange: (listener) => tokensController.subscribe(listener), // needs to be unsubbed?
238+
getSelectedAddress: () => preferences.state.selectedAddress,
239+
getERC20BalanceOf:
240+
assetsContract.getERC20BalanceOf.bind(assetsContract),
241+
},
242+
{ interval: 1337 },
243+
);
244+
const updateBalances = sinon.stub(tokenBalances, 'updateBalances');
245+
await tokensController.addToken('0x00', 'FOO', 18);
246+
const { tokens } = tokensController.state;
247+
const found = tokens.filter((token: Token) => token.address === '0x00');
248+
expect(found.length > 0).toBe(true);
249+
expect(updateBalances.called).toBe(true);
249250

250-
stub.restore();
251-
});
251+
stub.restore();
252+
messenger.clearEventSubscriptions('NetworkController:stateChange');
252253
});
253254

254255
it('should update token balances when detected tokens are added', async () => {

0 commit comments

Comments
 (0)