Skip to content

Commit a9bb411

Browse files
Merge pull request #139 from abhayks1/jlp_fixes
Implementation of TokenHolder.getSessionKeyData needed for JLP
2 parents d9b17c5 + 0f14939 commit a9bb411

4 files changed

Lines changed: 70 additions & 4 deletions

File tree

lib/ContractInteract/GnosisSafe.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ class GnosisSafe {
272272
* @return {Promise<Object>} Promise that resolves to array of owners.
273273
*/
274274
getOwners() {
275-
return this.contract.methods.getOwners().call();
275+
return Promise.resolve(this.contract.methods.getOwners().call());
276276
}
277277

278278
/**
@@ -281,7 +281,7 @@ class GnosisSafe {
281281
* @return {Promise<Object>} Promise that resolves current GnosisSafe nonce.
282282
*/
283283
getNonce() {
284-
return this.contract.methods.nonce().call();
284+
return Promise.resolve(this.contract.methods.nonce().call());
285285
}
286286

287287
/**
@@ -373,7 +373,7 @@ class GnosisSafe {
373373
* @returns {string} domain separator value.
374374
*/
375375
async getDomainSeparator() {
376-
return this.contract.methods.domainSeparator().call();
376+
return Promise.resolve(this.contract.methods.domainSeparator().call());
377377
}
378378

379379
/**
@@ -382,7 +382,7 @@ class GnosisSafe {
382382
* @returns {Object} Map of all modules.
383383
*/
384384
async getModules() {
385-
return this.contract.methods.getModules().call();
385+
return Promise.resolve(this.contract.methods.getModules().call());
386386
}
387387
}
388388

lib/ContractInteract/TokenHolder.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ class TokenHolder {
110110
* @returns {string} Executable data to revoke a session.
111111
*/
112112
getRevokeSessionExecutableData(sessionKey) {
113+
if (!Web3.utils.isAddress(sessionKey)) {
114+
const err = new TypeError(`Invalid sessionKey address: ${sessionKey}.`);
115+
return Promise.reject(err);
116+
}
113117
return this.contract.methods.revokeSession(sessionKey).encodeABI();
114118
}
115119

@@ -188,6 +192,21 @@ class TokenHolder {
188192
}
189193
return Promise.resolve(this.contract.methods.executeRule(to, data, nonce, r, s, v));
190194
}
195+
196+
/**
197+
* It returns the session key data object.
198+
*
199+
* @param {string} sessionKey Authorized session key address.
200+
*
201+
* @return {Promise<Object>} Promise that resolves session data for valid session key.
202+
*/
203+
getSessionKeyData(sessionKey) {
204+
if (!Web3.utils.isAddress(sessionKey)) {
205+
const err = new TypeError(`Invalid sessionKey address: ${sessionKey}.`);
206+
return Promise.reject(err);
207+
}
208+
return Promise.resolve(this.contract.methods.sessionKeys(sessionKey).call());
209+
}
191210
}
192211

193212
module.exports = TokenHolder;

test/unit/TokenHolder/getRevokeSessionExecutableData.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const sinon = require('sinon');
55
const { assert } = require('chai');
66

77
const Spy = require('../../../utils/Spy');
8+
const AssertAsync = require('../../../utils/AssertAsync');
89
const TokenHolder = require('../../../lib/ContractInteract/TokenHolder');
910

1011
describe('TokenHolder.getAuthorizeSessionWithExecutableData()', () => {
@@ -32,4 +33,9 @@ describe('TokenHolder.getAuthorizeSessionWithExecutableData()', () => {
3233
assert.strictEqual(response, mockRevokeSession);
3334
Spy.assert(revokeSessionSpy, 1, [[sessionKey]]);
3435
});
36+
37+
it('should throw an error when sessoinKey address is undefined', async () => {
38+
const sessionKey = undefined;
39+
await AssertAsync.reject(tokenHolder.getSessionKeyData(sessionKey), `Invalid sessionKey address: undefined.`);
40+
});
3541
});
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'use strict';
2+
3+
const Web3 = require('web3');
4+
const sinon = require('sinon');
5+
const { assert } = require('chai');
6+
7+
const Spy = require('../../../utils/Spy');
8+
const AssertAsync = require('../../../utils/AssertAsync');
9+
const TokenHolder = require('../../../lib/ContractInteract/TokenHolder');
10+
11+
describe('TokenHolder.getSessionKeyData()', () => {
12+
let tokenHolder;
13+
14+
beforeEach(() => {
15+
const web3 = new Web3();
16+
const address = '0x0000000000000000000000000000000000000002';
17+
tokenHolder = new TokenHolder(web3, address);
18+
});
19+
20+
it('should construct with correct parameters', async () => {
21+
const sessionKey = '0x0000000000000000000000000000000000000003';
22+
23+
const mockSessionKeyData = 'mockSessionKeyData';
24+
const sessionKeyDataSpy = sinon.replace(
25+
tokenHolder.contract.methods,
26+
'sessionKeys',
27+
sinon.fake.returns({
28+
call: () => Promise.resolve(mockSessionKeyData)
29+
})
30+
);
31+
const response = await tokenHolder.getSessionKeyData(sessionKey);
32+
33+
assert.strictEqual(response, mockSessionKeyData);
34+
Spy.assert(sessionKeyDataSpy, 1, [[sessionKey]]);
35+
});
36+
37+
it('should throw an error when sessoinKey address is undefined', async () => {
38+
const sessionKey = undefined;
39+
await AssertAsync.reject(tokenHolder.getSessionKeyData(sessionKey), `Invalid sessionKey address: undefined.`);
40+
});
41+
});

0 commit comments

Comments
 (0)