171 lines
6.1 KiB
JavaScript
171 lines
6.1 KiB
JavaScript
const namehash = require('ethers').utils.namehash;
|
|
|
|
// eslint-disable-next-line no-undef
|
|
const Contributor = artifacts.require("Contributor.sol");
|
|
|
|
// eslint-disable-next-line no-undef
|
|
const getContract = name => artifacts.require(name);
|
|
const { assertRevert } = require('@aragon/test-helpers/assertThrow');
|
|
|
|
const ZERO_ADDR = '0x0000000000000000000000000000000000000000';
|
|
|
|
contract('Contributor app', (accounts) => {
|
|
let kernelBase, aclBase, daoFactory, r, dao, acl, contributor;
|
|
|
|
const root = accounts[0];
|
|
const member1 = accounts[1];
|
|
|
|
// eslint-disable-next-line no-undef
|
|
before(async () => {
|
|
kernelBase = await getContract('Kernel').new(true); // petrify immediately
|
|
aclBase = await getContract('ACL').new();
|
|
daoFactory = await getContract('DAOFactory').new(kernelBase.address, aclBase.address, ZERO_ADDR);
|
|
r = await daoFactory.newDAO(root);
|
|
dao = getContract('Kernel').at(r.logs.filter(l => l.event == 'DeployDAO')[0].args.dao);
|
|
acl = getContract('ACL').at(await dao.acl());
|
|
|
|
//create dao mamnager permission for coin owner
|
|
await acl.createPermission(
|
|
root,
|
|
dao.address,
|
|
await dao.APP_MANAGER_ROLE(),
|
|
root,
|
|
{ from: root }
|
|
);
|
|
|
|
//get new app instance from DAO
|
|
const receipt = await dao.newAppInstance(
|
|
'0x1234',
|
|
(await Contributor.new()).address,
|
|
0x0,
|
|
false,
|
|
{ from: root }
|
|
);
|
|
contributor = Contributor.at(
|
|
receipt.logs.filter(l => l.event == 'NewAppProxy')[0].args.proxy
|
|
);
|
|
|
|
//apps id
|
|
let appsId = [];
|
|
appsId[0] = namehash("kredits-contribution");
|
|
appsId[1] = namehash("kredits-contributor");
|
|
appsId[2] = namehash("kredits-proposal");
|
|
appsId[3] = namehash("kredits-token");
|
|
|
|
//init contributor (app)
|
|
await contributor.initialize(root, appsId);
|
|
|
|
//create manage contributors role
|
|
await acl.createPermission(
|
|
root,
|
|
contributor.address,
|
|
await contributor.MANAGE_CONTRIBUTORS_ROLE(),
|
|
root,
|
|
{ from: root }
|
|
);
|
|
|
|
});
|
|
|
|
describe("Owner default permissions", async () => {
|
|
it('check owner is contributors manager', async () => {
|
|
let manageContributorPermission = await acl.hasPermission(root, contributor.address, await contributor.MANAGE_CONTRIBUTORS_ROLE());
|
|
// eslint-disable-next-line no-undef
|
|
assert.equal(manageContributorPermission, true);
|
|
});
|
|
});
|
|
|
|
describe("Add contributor", async () => {
|
|
let account = root;
|
|
let hashDigest = '0x0';
|
|
let hashFunction = 0;
|
|
let hashSize = 0;
|
|
|
|
it("should revert when add contributor from an address that does not have permission", async () => {
|
|
return assertRevert(async () => {
|
|
await contributor.addContributor(account, hashDigest, hashFunction, hashSize, { from: member1});
|
|
'sender does not have permission';
|
|
});
|
|
});
|
|
|
|
it('add contributor', async () => {
|
|
let contributorCount = await contributor.coreContributorsCount();
|
|
await contributor.addContributor(account, hashDigest, hashFunction, hashSize);
|
|
// eslint-disable-next-line no-undef
|
|
assert.equal(await contributor.addressExists(account), true);
|
|
let contributorCountAfter = await contributor.coreContributorsCount();
|
|
// eslint-disable-next-line no-undef
|
|
assert.equal(await contributorCountAfter.toNumber(), parseInt(contributorCount)+1);
|
|
});
|
|
|
|
it("should revert when add contributor with an address that already exist", async () => {
|
|
return assertRevert(async () => {
|
|
await contributor.addContributor(account, hashDigest, hashFunction, hashSize, { from: member1});
|
|
'address already exist';
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("Update contributor", async () => {
|
|
let id;
|
|
let oldAccount;
|
|
let newAccount;
|
|
let hashDigest;
|
|
let hashFunction;
|
|
let hashSize;
|
|
|
|
// eslint-disable-next-line no-undef
|
|
before(async () => {
|
|
id = await contributor.coreContributorsCount();
|
|
oldAccount = root;
|
|
newAccount = member1;
|
|
hashDigest = '0x1000000000000000000000000000000000000000000000000000000000000000';
|
|
hashFunction = 1;
|
|
hashSize = 1;
|
|
});
|
|
|
|
it('update contributor account', async () => {
|
|
await contributor.updateContributorAccount(id.toNumber(), oldAccount, newAccount);
|
|
let contributorId = await contributor.getContributorIdByAddress(oldAccount);
|
|
// eslint-disable-next-line no-undef
|
|
assert.equal(contributorId.toNumber(), 0);
|
|
});
|
|
|
|
it("should revert when update contributor account from address that does not have permission", async () => {
|
|
return assertRevert(async () => {
|
|
await contributor.updateContributorAccount(id.toNumber(), oldAccount, newAccount, {from: member1});
|
|
'sender does not have permission';
|
|
});
|
|
});
|
|
|
|
it("should revert when update contributor account that does not exist", async () => {
|
|
return assertRevert(async () => {
|
|
await contributor.updateContributorAccount(id.toNumber(), accounts[3], newAccount);
|
|
'contributor does not exist';
|
|
});
|
|
});
|
|
|
|
it("should revert when update contributor account with address(0)", async () => {
|
|
return assertRevert(async () => {
|
|
await contributor.updateContributorAccount(id.toNumber(), oldAccount, ZERO_ADDR);
|
|
'contributor does not exist';
|
|
});
|
|
});
|
|
|
|
it('update contributor profile hash', async () => {
|
|
await contributor.updateContributorProfileHash(id.toNumber(), hashDigest, hashFunction, hashSize);
|
|
let contributorProfile = await contributor.contributors(id.toNumber());
|
|
assert.equal(hashDigest, contributorProfile[1]); // eslint-disable-line no-undef
|
|
assert.equal(hashFunction, contributorProfile[2].toNumber()); // eslint-disable-line no-undef
|
|
assert.equal(hashSize, contributorProfile[3].toNumber()); // eslint-disable-line no-undef
|
|
});
|
|
|
|
it("should revert when update contributor profile hash from address that does not have permission", async () => {
|
|
return assertRevert(async () => {
|
|
await contributor.updateContributorProfileHash(id.toNumber(), hashDigest, hashFunction, hashSize, {from: member1});
|
|
'sender does not have permission';
|
|
});
|
|
});
|
|
|
|
});
|
|
});
|