Skip to content

Commit

Permalink
Remove ESLint jest/valid-expect-in-promise (#426)
Browse files Browse the repository at this point in the history
* refactor catch errors to async await format

* finish promise callback removal

* restore ordering

* promise does not resolve

* use listener to ensure expects are called

Co-authored-by: Mark Stacey <markjstacey@gmail.com>
  • Loading branch information
astarinmymind and Gudahtt committed Apr 7, 2021
1 parent 9e6de86 commit 8adc09b
Show file tree
Hide file tree
Showing 7 changed files with 282 additions and 380 deletions.
1 change: 0 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ module.exports = {
'jest/no-restricted-matchers': 'off',
'jest/no-test-return-statement': 'off',
'jest/prefer-strict-equal': 'off',
'jest/valid-expect-in-promise': 'off',
},
settings: {
'import/resolver': {
Expand Down
35 changes: 10 additions & 25 deletions src/approval/ApprovalController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -312,33 +312,22 @@ describe('approval controller', () => {

it('rejects approval promise', async () => {
numDeletions = 1;

const approvalPromise = approvalController.add({ id: 'foo', origin: 'bar.baz', type: TYPE }).catch((error) => {
expect(error).toMatchObject(getError('failure'));
});

const approvalPromise = approvalController.add({ id: 'foo', origin: 'bar.baz', type: TYPE });
approvalController.reject('foo', new Error('failure'));
await approvalPromise;
await expect(approvalPromise).rejects.toThrow('failure');
expect(deleteSpy.callCount).toEqual(numDeletions);
});

it('rejects multiple approval promises out of order', async () => {
numDeletions = 2;

const rejectionPromise1 = approvalController.add({ id: 'foo1', origin: 'bar.baz', type: TYPE }).catch((error) => {
expect(error).toMatchObject(getError('failure1'));
});
const rejectionPromise2 = approvalController
.add({ id: 'foo2', origin: 'bar.baz', type: 'myType2' })
.catch((error) => {
expect(error).toMatchObject(getError('failure2'));
});
const rejectionPromise1 = approvalController.add({ id: 'foo1', origin: 'bar.baz', type: TYPE });
const rejectionPromise2 = approvalController.add({ id: 'foo2', origin: 'bar.baz', type: 'myType2' });

approvalController.reject('foo2', new Error('failure2'));
await rejectionPromise2;

approvalController.reject('foo1', new Error('failure1'));
await rejectionPromise1;
await expect(rejectionPromise2).rejects.toThrow('failure2');
await expect(rejectionPromise1).rejects.toThrow('failure1');
expect(deleteSpy.callCount).toEqual(numDeletions);
});

Expand All @@ -354,23 +343,19 @@ describe('approval controller', () => {

const promise1 = approvalController.add({ id: 'foo1', origin: 'bar.baz', type: TYPE });
const promise2 = approvalController.add({ id: 'foo2', origin: 'bar.baz', type: 'myType2' });
const promise3 = approvalController.add({ id: 'foo3', origin: 'fizz.buzz', type: TYPE }).catch((error) => {
expect(error).toMatchObject(getError('failure3'));
});
const promise4 = approvalController.add({ id: 'foo4', origin: 'bar.baz', type: 'myType4' }).catch((error) => {
expect(error).toMatchObject(getError('failure4'));
});
const promise3 = approvalController.add({ id: 'foo3', origin: 'fizz.buzz', type: TYPE });
const promise4 = approvalController.add({ id: 'foo4', origin: 'bar.baz', type: 'myType4' });

approvalController.resolve('foo2', 'success2');

let result = await promise2;
expect(result).toEqual('success2');

approvalController.reject('foo4', new Error('failure4'));
await promise4;
await expect(promise4).rejects.toThrow('failure4');

approvalController.reject('foo3', new Error('failure3'));
await promise3;
await expect(promise3).rejects.toThrow('failure3');

expect(approvalController.has({ origin: 'fizz.buzz' })).toEqual(false);
expect(approvalController.has({ origin: 'bar.baz' })).toEqual(true);
Expand Down
94 changes: 40 additions & 54 deletions src/assets/AssetsController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -444,67 +444,53 @@ describe('AssetsController', () => {
});

it('should reject a valid suggested asset via watchAsset', async () => {
await new Promise(async (resolve) => {
const { result, suggestedAssetMeta } = await assetsController.watchAsset(
{
address: '0xe9f786dfdd9ae4d57e830acb52296837765f0e5b',
decimals: 18,
symbol: 'TKN',
},
'ERC20',
);
assetsController.rejectWatchAsset('foo');
assetsController.rejectWatchAsset(suggestedAssetMeta.id);
assetsController.hub.once(`${suggestedAssetMeta.id}:finished`, () => {
expect(assetsController.state.suggestedAssets).toHaveLength(0);
});
result.catch((error) => {
expect(error.message).toContain('User rejected to watch the asset.');
resolve('');
});
const { result, suggestedAssetMeta } = await assetsController.watchAsset(
{
address: '0xe9f786dfdd9ae4d57e830acb52296837765f0e5b',
decimals: 18,
symbol: 'TKN',
},
'ERC20',
);
assetsController.rejectWatchAsset('foo');
assetsController.rejectWatchAsset(suggestedAssetMeta.id);
assetsController.hub.once(`${suggestedAssetMeta.id}:finished`, () => {
expect(assetsController.state.suggestedAssets).toHaveLength(0);
});
await expect(result).rejects.toThrow('User rejected to watch the asset.');
});

it('should accept a valid suggested asset via watchAsset', async () => {
await new Promise(async (resolve) => {
const { result, suggestedAssetMeta } = await assetsController.watchAsset(
{
address: '0xe9f786dfdd9ae4d57e830acb52296837765f0e5b',
decimals: 18,
symbol: 'TKN',
},
'ERC20',
);
result.then((res) => {
expect(assetsController.state.suggestedAssets).toHaveLength(0);
expect(res).toBe('0xe9f786dfdd9ae4d57e830acb52296837765f0e5b');
resolve('');
});
await assetsController.acceptWatchAsset(suggestedAssetMeta.id);
});
const { result, suggestedAssetMeta } = await assetsController.watchAsset(
{
address: '0xe9f786dfdd9ae4d57e830acb52296837765f0e5b',
decimals: 18,
symbol: 'TKN',
},
'ERC20',
);
await assetsController.acceptWatchAsset(suggestedAssetMeta.id);
const res = await result;
expect(assetsController.state.suggestedAssets).toHaveLength(0);
expect(res).toBe('0xe9f786dfdd9ae4d57e830acb52296837765f0e5b');
});

it('should fail a valid suggested asset via watchAsset with wrong type', async () => {
await new Promise(async (resolve) => {
const { result, suggestedAssetMeta } = await assetsController.watchAsset(
{
address: '0xe9f786dfdd9be4d57e830acb52296837765f0e5b',
decimals: 18,
symbol: 'TKN',
},
'ERC20',
);
const { suggestedAssets } = assetsController.state;
const index = suggestedAssets.findIndex(({ id }) => suggestedAssetMeta.id === id);
const newSuggestedAssetMeta = suggestedAssets[index];
suggestedAssetMeta.type = 'ERC721';
assetsController.update({ suggestedAssets: [...suggestedAssets, newSuggestedAssetMeta] });
await assetsController.acceptWatchAsset(suggestedAssetMeta.id);
result.catch((error) => {
expect(error.message).toContain('Asset of type ERC721 not supported');
resolve('');
});
});
const { result, suggestedAssetMeta } = await assetsController.watchAsset(
{
address: '0xe9f786dfdd9be4d57e830acb52296837765f0e5b',
decimals: 18,
symbol: 'TKN',
},
'ERC20',
);
const { suggestedAssets } = assetsController.state;
const index = suggestedAssets.findIndex(({ id }) => suggestedAssetMeta.id === id);
const newSuggestedAssetMeta = suggestedAssets[index];
suggestedAssetMeta.type = 'ERC721';
assetsController.update({ suggestedAssets: [...suggestedAssets, newSuggestedAssetMeta] });
await assetsController.acceptWatchAsset(suggestedAssetMeta.id);
await expect(result).rejects.toThrow('Asset of type ERC721 not supported');
});

it('should not add duplicate tokens to the ignoredToken list', async () => {
Expand Down
94 changes: 40 additions & 54 deletions src/message-manager/MessageManager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,69 +42,55 @@ describe('PersonalMessageManager', () => {
});

it('should reject a message', async () => {
await new Promise<void>(async (resolve) => {
const controller = new MessageManager();
const from = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const data = '0x879a053d4800c6354e76c7985a865d2922c82fb5b';
const result = controller.addUnapprovedMessageAsync({
data,
from,
});
const unapprovedMessages = controller.getUnapprovedMessages();
const keys = Object.keys(unapprovedMessages);
controller.hub.once(`${keys[0]}:finished`, () => {
expect(unapprovedMessages[keys[0]].messageParams.from).toBe(from);
expect(unapprovedMessages[keys[0]].status).toBe('rejected');
});
controller.rejectMessage(keys[0]);
result.catch((error) => {
expect(error.message).toContain('User denied message signature');
resolve();
});
const controller = new MessageManager();
const from = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const data = '0x879a053d4800c6354e76c7985a865d2922c82fb5b';
const result = controller.addUnapprovedMessageAsync({
data,
from,
});
const unapprovedMessages = controller.getUnapprovedMessages();
const keys = Object.keys(unapprovedMessages);
controller.hub.once(`${keys[0]}:finished`, () => {
expect(unapprovedMessages[keys[0]].messageParams.from).toBe(from);
expect(unapprovedMessages[keys[0]].status).toBe('rejected');
});
controller.rejectMessage(keys[0]);
await expect(result).rejects.toThrow('User denied message signature');
});

it('should sign a message', async () => {
await new Promise<void>(async (resolve) => {
const controller = new MessageManager();
const from = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const data = '0x879a053d4800c6354e76c7985a865d2922c82fb5b';
const rawSig = '0x5f7a0';
const result = controller.addUnapprovedMessageAsync({
data,
from,
});
const unapprovedMessages = controller.getUnapprovedMessages();
const keys = Object.keys(unapprovedMessages);
controller.hub.once(`${keys[0]}:finished`, () => {
expect(unapprovedMessages[keys[0]].messageParams.from).toBe(from);
expect(unapprovedMessages[keys[0]].status).toBe('signed');
});
controller.setMessageStatusSigned(keys[0], rawSig);
result.then((sig) => {
expect(sig).toEqual(rawSig);
resolve();
});
const controller = new MessageManager();
const from = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const data = '0x879a053d4800c6354e76c7985a865d2922c82fb5b';
const rawSig = '0x5f7a0';
const result = controller.addUnapprovedMessageAsync({
data,
from,
});
const unapprovedMessages = controller.getUnapprovedMessages();
const keys = Object.keys(unapprovedMessages);
controller.hub.once(`${keys[0]}:finished`, () => {
expect(unapprovedMessages[keys[0]].messageParams.from).toBe(from);
expect(unapprovedMessages[keys[0]].status).toBe('signed');
});
controller.setMessageStatusSigned(keys[0], rawSig);
const sig = await result;
expect(sig).toBe(rawSig);
});

it('should throw when unapproved finishes', async () => {
await new Promise<void>(async (resolve) => {
const controller = new MessageManager();
const from = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const data = '0x879a053d4800c6354e76c7985a865d2922c82fb5b';
const result = controller.addUnapprovedMessageAsync({
data,
from,
});
const unapprovedMessages = controller.getUnapprovedMessages();
const keys = Object.keys(unapprovedMessages);
controller.hub.emit(`${keys[0]}:finished`, unapprovedMessages[keys[0]]);
result.catch((error) => {
expect(error.message).toContain('Unknown problem');
resolve();
});
const controller = new MessageManager();
const from = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const data = '0x879a053d4800c6354e76c7985a865d2922c82fb5b';
const result = controller.addUnapprovedMessageAsync({
data,
from,
});
const unapprovedMessages = controller.getUnapprovedMessages();
const keys = Object.keys(unapprovedMessages);
controller.hub.emit(`${keys[0]}:finished`, unapprovedMessages[keys[0]]);
await expect(result).rejects.toThrow('Unknown problem');
});

it('should add a valid unapproved message', async () => {
Expand Down
Loading

0 comments on commit 8adc09b

Please sign in to comment.