Skip to content
This repository was archived by the owner on Jul 6, 2022. It is now read-only.

Commit 927f46b

Browse files
author
Victor Wiebe
committed
fix: make GPM conform with Perm Enum
in each case where perm was still string, we used enum. added a parsing method to the convert file for return types
1 parent 55cb977 commit 927f46b

File tree

3 files changed

+34
-16
lines changed

3 files changed

+34
-16
lines changed

src/contract_wrappers/modules/permission_manager/__tests__/general_permission_manager_wrapper.test.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
numberToBigNumber,
1717
} from '../../../../utils/convert';
1818
import { MockedCallMethod, MockedSendMethod, getMockedPolyResponse } from '../../../../test_utils/mocked_methods';
19+
import { Perm } from '../../../../types';
1920

2021
describe('GeneralPermissionManagerWrapper', () => {
2122
// Declare GeneralPermissionManagerWrapper object
@@ -62,7 +63,7 @@ describe('GeneralPermissionManagerWrapper', () => {
6263
const params = {
6364
module: '0x1111111111111111111111111111111111111111',
6465
delegate: '0x2222222222222222222222222222222222222222',
65-
permission: 'Permission1',
66+
permission: Perm.Admin,
6667
};
6768
// Mocked method
6869
const mockedMethod = mock(MockedCallMethod);
@@ -143,7 +144,7 @@ describe('GeneralPermissionManagerWrapper', () => {
143144
const params = {
144145
module: '0x1111111111111111111111111111111111111111',
145146
delegate: '0x2222222222222222222222222222222222222222',
146-
permission: 'Permission1',
147+
permission: Perm.Admin,
147148
};
148149
// Mocked method
149150
const mockedMethod = mock(MockedCallMethod);
@@ -197,7 +198,7 @@ describe('GeneralPermissionManagerWrapper', () => {
197198
const expectedResult = ['string1', 'string2'];
198199
const params = {
199200
module: '0x2222222222222222222222222222222222222222',
200-
perm: 'Perm1',
201+
perm: Perm.Admin,
201202
};
202203
// Mocked method
203204
const mockedMethod = mock(MockedCallMethod);
@@ -246,7 +247,7 @@ describe('GeneralPermissionManagerWrapper', () => {
246247
'0x2222222222222222222222222222222222222222',
247248
'0x3333333333333333333333333333333333333333',
248249
];
249-
const perms = stringArrayToBytes32Array(['Perm1', 'Perm2', 'Perm3']);
250+
const perms = stringArrayToBytes32Array(['ADMIN', 'OPERATOR', 'OPERATOR']);
250251
const expectedResult = [modules, perms];
251252
const params = {
252253
delegate: '0x2222222222222222222222222222222222222222',
@@ -449,7 +450,7 @@ describe('GeneralPermissionManagerWrapper', () => {
449450
const mockedParams = {
450451
delegate: '0x1111111111111111111111111111111111111111',
451452
module: '0x1111111111111111111111111111111111111111',
452-
perm: 'string',
453+
perm: Perm.Admin,
453454
valid: false,
454455
txData: {},
455456
safetyFactor: 10,
@@ -523,7 +524,7 @@ describe('GeneralPermissionManagerWrapper', () => {
523524
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([expectedOwnerResult]);
524525

525526
// Mocked parameters
526-
const mockedPerms = ['string', 'string2'];
527+
const mockedPerms = [Perm.Admin, Perm.Operator];
527528
const mockedParams = {
528529
delegate: '0x1111111111111111111111111111111111111111',
529530
modules: ['0x1111111111111111111111111111111111111111', '0x2222222222222222222222222222222222222222'],
@@ -587,7 +588,9 @@ describe('GeneralPermissionManagerWrapper', () => {
587588

588589
// Real call
589590
await expect(target.subscribeAsync(mockedParams)).rejects.toEqual(
590-
new Error(`Expected eventName to be one of: 'ChangePermission', 'AddDelegate', 'Pause', 'Unpause', encountered: Transfer`),
591+
new Error(
592+
`Expected eventName to be one of: 'ChangePermission', 'AddDelegate', 'Pause', 'Unpause', encountered: Transfer`,
593+
),
591594
);
592595
});
593596
});

src/contract_wrappers/modules/permission_manager/general_permission_manager_wrapper.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ import {
2222
Subscribe,
2323
Perm,
2424
} from '../../../types';
25-
import { numberToBigNumber, stringToBytes32, bytes32ToString, stringArrayToBytes32Array } from '../../../utils/convert';
25+
import {
26+
numberToBigNumber,
27+
stringToBytes32,
28+
stringArrayToBytes32Array,
29+
parsePermBytes32Value,
30+
} from '../../../utils/convert';
2631

2732
interface ChangePermissionSubscribeAsyncParams extends SubscribeAsyncParams {
2833
eventName: GeneralPermissionManagerEvents.ChangePermission;
@@ -57,7 +62,7 @@ interface GetGeneralPermissionManagerLogsAsyncParams extends GetLogs {
5762
interface PermParams {
5863
module: string;
5964
delegate: string;
60-
permission: string;
65+
permission: Perm;
6166
}
6267

6368
interface DelegateIndexParams {
@@ -70,7 +75,7 @@ interface DelegateParams {
7075

7176
interface GetAllDelegatesWithPermParams {
7277
module: string;
73-
perm: string;
78+
perm: Perm;
7479
}
7580

7681
interface GetAllModulesAndPermsFromTypesParams {
@@ -90,14 +95,14 @@ interface AddDelegateParams extends TxParams {
9095
interface ChangePermissionParams extends TxParams {
9196
delegate: string;
9297
module: string;
93-
perm: string;
98+
perm: Perm;
9499
valid: boolean;
95100
}
96101

97102
interface ChangePermissionMultiParams extends TxParams {
98103
delegate: string;
99104
modules: string[];
100-
perms: string[];
105+
perms: Perm[];
101106
valids: boolean[];
102107
}
103108

@@ -106,7 +111,7 @@ interface PermissonsPerModule {
106111
/** Module address */
107112
module: string;
108113
/** List of permissions */
109-
permissions: string[];
114+
permissions: Perm[];
110115
}
111116
// // End of return types ////
112117

@@ -161,7 +166,7 @@ export default class GeneralPermissionManagerWrapper extends ModuleWrapper {
161166
assert.assert(await this.isCallerAllowed(params.txData, Perm.Admin), 'Caller is not allowed');
162167
assert.isNonZeroETHAddressHex('delegate', params.delegate);
163168
assert.assert(params.details.length > 0, '0 value not allowed');
164-
assert.assert(!await (await this.contract).checkDelegate.callAsync(params.delegate), 'Already present');
169+
assert.assert(!(await (await this.contract).checkDelegate.callAsync(params.delegate)), 'Already present');
165170
return (await this.contract).addDelegate.sendTransactionAsync(
166171
params.delegate,
167172
stringToBytes32(params.details),
@@ -236,7 +241,7 @@ export default class GeneralPermissionManagerWrapper extends ModuleWrapper {
236241
(value, key): void => {
237242
const permissonsPerModule: PermissonsPerModule = {
238243
module: key,
239-
permissions: value.map(pair => bytes32ToString(pair[1] as string)),
244+
permissions: value.map(pair => parsePermBytes32Value(pair[1] as string)),
240245
};
241246
typedResult.push(permissonsPerModule);
242247
},

src/utils/convert.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ethers } from 'ethers';
22
import { BigNumber } from '@0x/utils';
3-
import { Partition } from '../types';
3+
import { Partition, Perm } from '../types';
44

55
const BASE = new BigNumber(10);
66

@@ -94,3 +94,13 @@ export function parsePartitionBytes32Value(value: string): Partition {
9494
throw new Error('Partition not recognized');
9595
}
9696
}
97+
export function parsePermBytes32Value(value: string): Perm {
98+
switch (bytes32ToString(value)) {
99+
case 'ADMIN':
100+
return Perm.Admin;
101+
case 'OPERATOR':
102+
return Perm.Operator;
103+
default:
104+
throw new Error('Partition not recognized');
105+
}
106+
}

0 commit comments

Comments
 (0)