Skip to content

Commit 78dadea

Browse files
rmeissnermmv08
authored andcommitted
Add test for module pagination
1 parent c36bcab commit 78dadea

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

contracts/base/ModuleManager.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,13 @@ contract ModuleManager is SelfAuthorized, Executor {
118118
// Populate return array
119119
uint256 moduleCount = 0;
120120
address currentModule = modules[start];
121+
121122
while (currentModule != address(0x0) && currentModule != SENTINEL_MODULES && moduleCount < pageSize) {
122123
array[moduleCount] = currentModule;
124+
next = currentModule;
123125
currentModule = modules[currentModule];
124126
moduleCount++;
125127
}
126-
next = currentModule;
127128
// Set correct size of returned array
128129
// solhint-disable-next-line no-inline-assembly
129130
assembly {

test/core/GnosisSafe.ModuleManager.spec.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { AddressOne } from "../../src/utils/constants";
99

1010
describe("ModuleManager", async () => {
1111

12-
const [user1, user2] = waffle.provider.getWallets();
12+
const [user1, user2, user3] = waffle.provider.getWallets();
1313

1414
const setupTests = deployments.createFixture(async ({ deployments }) => {
1515
await deployments.fixture();
@@ -244,4 +244,35 @@ describe("ModuleManager", async () => {
244244
).to.be.deep.eq([false, "0x08c379a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000013536f6d652072616e646f6d206d65737361676500000000000000000000000000"])
245245
})
246246
})
247+
248+
describe("getModulesPaginated", async () => {
249+
it('Returns all modules over multiple pages', async () => {
250+
const { safe } = await setupTests()
251+
await expect(
252+
executeContractCallWithSigners(safe, safe, "enableModule", [user1.address], [user1])
253+
).to.emit(safe, "EnabledModule").withArgs(user1.address)
254+
255+
await expect(
256+
executeContractCallWithSigners(safe, safe, "enableModule", [user2.address], [user1])
257+
).to.emit(safe, "EnabledModule").withArgs(user2.address)
258+
259+
await expect(
260+
executeContractCallWithSigners(safe, safe, "enableModule", [user3.address], [user1])
261+
).to.emit(safe, "EnabledModule").withArgs(user3.address)
262+
263+
await expect(await safe.isModuleEnabled(user1.address)).to.be.true
264+
await expect(await safe.isModuleEnabled(user2.address)).to.be.true
265+
await expect(await safe.isModuleEnabled(user3.address)).to.be.true
266+
267+
268+
await expect(await safe.getModulesPaginated(AddressOne, 1)).to.be.deep.equal([[user3.address], user3.address])
269+
await expect(await safe.getModulesPaginated(user3.address, 1)).to.be.deep.equal([[user2.address], user2.address])
270+
await expect(await safe.getModulesPaginated(user2.address, 1)).to.be.deep.equal([[user1.address], user1.address])
271+
await expect(await safe.getModulesPaginated(user1.address, 1)).to.be.deep.equal([[], AddressZero])
272+
273+
await expect(await safe.getModulesPaginated(AddressOne, 2)).to.be.deep.equal([[user3.address, user2.address], user2.address])
274+
275+
await expect(await safe.getModulesPaginated(AddressOne, 3)).to.be.deep.equal([[user3.address, user2.address, user1.address], user1.address])
276+
})
277+
})
247278
})

0 commit comments

Comments
 (0)