mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
test: 💍 InstaAccessControl contract
This commit is contained in:
parent
169b411142
commit
2520d57e88
27439
package-lock.json
generated
27439
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
|
@ -39,6 +39,8 @@
|
||||||
"@openzeppelin/test-helpers": "^0.5.6",
|
"@openzeppelin/test-helpers": "^0.5.6",
|
||||||
"@studydefi/money-legos": "^2.3.7",
|
"@studydefi/money-legos": "^2.3.7",
|
||||||
"@tenderly/hardhat-tenderly": "^1.0.6",
|
"@tenderly/hardhat-tenderly": "^1.0.6",
|
||||||
|
"chai-as-promised": "^7.1.1",
|
||||||
|
"ethereum-waffle": "^3.3.0",
|
||||||
"ethers": "^5.0.32",
|
"ethers": "^5.0.32",
|
||||||
"hardhat": "^2.0.8",
|
"hardhat": "^2.0.8",
|
||||||
"husky": "^6.0.0",
|
"husky": "^6.0.0",
|
||||||
|
|
123
test/01_insta_access_control.js
Normal file
123
test/01_insta_access_control.js
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
const { ethers, network } = require("hardhat");
|
||||||
|
const chai = require("chai");
|
||||||
|
const chaiPromise = require("chai-as-promised");
|
||||||
|
const { solidity } = require("ethereum-waffle");
|
||||||
|
|
||||||
|
chai.use(chaiPromise);
|
||||||
|
chai.use(solidity);
|
||||||
|
|
||||||
|
const { expect } = chai;
|
||||||
|
|
||||||
|
const getAccessControl = (address, signer) => {
|
||||||
|
return ethers.getContractAt("InstaAccessControl", address, signer);
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("Test InstaAccessControl contract", () => {
|
||||||
|
let account, fakeAccount, instaMaster;
|
||||||
|
let accessControlAddress;
|
||||||
|
let masterAccessControl;
|
||||||
|
const indexInterfaceAddress = "0x2971AdFa57b20E5a416aE5a708A8655A9c74f723";
|
||||||
|
const TEST_ROLE = ethers.utils.formatBytes32String("test");
|
||||||
|
|
||||||
|
before("get signers", async () => {
|
||||||
|
[account] = await ethers.getSigners();
|
||||||
|
|
||||||
|
const IndexContract = await ethers.getContractAt(
|
||||||
|
"contracts/mapping/InstaAccessControl.sol:IndexInterface",
|
||||||
|
indexInterfaceAddress
|
||||||
|
);
|
||||||
|
const masterAddress = await IndexContract.master();
|
||||||
|
|
||||||
|
await network.provider.request({
|
||||||
|
method: "hardhat_impersonateAccount",
|
||||||
|
params: [masterAddress],
|
||||||
|
});
|
||||||
|
|
||||||
|
instaMaster = await ethers.getSigner(masterAddress);
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach("deploy contract", async () => {
|
||||||
|
const accessControlFactory = await ethers.getContractFactory(
|
||||||
|
"InstaAccessControl"
|
||||||
|
);
|
||||||
|
const accessControl = await accessControlFactory.deploy();
|
||||||
|
|
||||||
|
await accessControl.deployed();
|
||||||
|
accessControlAddress = accessControl.address;
|
||||||
|
|
||||||
|
masterAccessControl = await getAccessControl(
|
||||||
|
accessControlAddress,
|
||||||
|
instaMaster
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("grant,revoke role should fail with non master signer", async () => {
|
||||||
|
const accessControl = await getAccessControl(accessControlAddress, account);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
accessControl.grantRole(TEST_ROLE, account.address)
|
||||||
|
).to.rejectedWith(/AccessControl: sender must be master/);
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
accessControl.revokeRole(TEST_ROLE, account.address)
|
||||||
|
).to.rejectedWith(/AccessControl: sender must be master/);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("hasRole should return false for roles not assigned to users", async () => {
|
||||||
|
expect(await masterAccessControl.hasRole(TEST_ROLE, account.address)).to.eq(
|
||||||
|
false
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should grant roles", async () => {
|
||||||
|
await expect(masterAccessControl.grantRole(TEST_ROLE, account.address))
|
||||||
|
.to.emit(masterAccessControl, "RoleGranted")
|
||||||
|
.withArgs(TEST_ROLE, account.address);
|
||||||
|
|
||||||
|
expect(await masterAccessControl.hasRole(TEST_ROLE, account.address)).to.eq(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should revoke role", async () => {
|
||||||
|
// add a role first
|
||||||
|
await masterAccessControl.grantRole(TEST_ROLE, account.address);
|
||||||
|
expect(await masterAccessControl.hasRole(TEST_ROLE, account.address)).to.eq(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
// then remove the role
|
||||||
|
await expect(masterAccessControl.revokeRole(TEST_ROLE, account.address))
|
||||||
|
.to.emit(masterAccessControl, "RoleRevoked")
|
||||||
|
.withArgs(TEST_ROLE, account.address, instaMaster.address);
|
||||||
|
|
||||||
|
expect(await masterAccessControl.hasRole(TEST_ROLE, account.address)).to.eq(
|
||||||
|
false
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should renounce role only with the account not master", async () => {
|
||||||
|
// add a role first
|
||||||
|
await masterAccessControl.grantRole(TEST_ROLE, account.address);
|
||||||
|
expect(await masterAccessControl.hasRole(TEST_ROLE, account.address)).to.eq(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
// then renounce the the role
|
||||||
|
await expect(
|
||||||
|
masterAccessControl.renounceRole(TEST_ROLE, account.address)
|
||||||
|
).to.rejectedWith(/AccessControl: can only renounce roles for self/);
|
||||||
|
|
||||||
|
const selfAccessControl = await getAccessControl(
|
||||||
|
accessControlAddress,
|
||||||
|
account
|
||||||
|
);
|
||||||
|
expect(await selfAccessControl.renounceRole(TEST_ROLE, account.address))
|
||||||
|
.to.emit(masterAccessControl, "RoleRevoked")
|
||||||
|
.withArgs(TEST_ROLE, account.address, account.address);
|
||||||
|
|
||||||
|
expect(await masterAccessControl.hasRole(TEST_ROLE, account.address)).to.eq(
|
||||||
|
false
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,27 +0,0 @@
|
||||||
const { ethers } = require("hardhat");
|
|
||||||
|
|
||||||
describe("Test InstaMapping contract", () => {
|
|
||||||
let signer, addressAdmin, fakeAccount;
|
|
||||||
let mappingContract;
|
|
||||||
const otherContractAddress = "0x514910771af9ca656af840dff83e8264ecf986ca";
|
|
||||||
|
|
||||||
beforeEach("deploy contract", async () => {
|
|
||||||
[signer, addressAdmin, fakeAccount] = await ethers.getSigners();
|
|
||||||
|
|
||||||
const mappingContractFactory = await ethers.getContractFactory("InstaMappings");
|
|
||||||
mappingContract = await mappingContractFactory.deploy();
|
|
||||||
|
|
||||||
await mappingContract.deployed();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should grant role", async () => {
|
|
||||||
const GRANT_ROLE_KEY = 'grantRole(address,address)'
|
|
||||||
const HAS_ROLE_KEY = 'hasRole(address,address)';
|
|
||||||
await mappingContract[GRANT_ROLE_KEY](otherContractAddress, addressAdmin.address, {
|
|
||||||
gasLimit: 12000000
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(await mappingContract[HAS_ROLE_KEY](otherContractAddress, addressAdmin.address)).to.eq(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
Loading…
Reference in New Issue
Block a user