arc_dx
Version:
A platform for building DAOs
262 lines (221 loc) • 17.5 kB
JavaScript
import * as helpers from './helpers';
const constants = require('./constants');
const GlobalConstraintRegistrar = artifacts.require("./GlobalConstraintRegistrar.sol");
const GlobalConstraintMock = artifacts.require('./test/GlobalConstraintMock.sol');
const DaoCreator = artifacts.require("./DaoCreator.sol");
const Controller = artifacts.require("./Controller.sol");
const StandardTokenMock = artifacts.require('./test/StandardTokenMock.sol');
const ControllerCreator = artifacts.require("./ControllerCreator.sol");
export class GlobalConstraintRegistrarParams {
constructor() {
}
}
const setupGlobalConstraintRegistrarParams = async function(
globalConstraintRegistrar,
accounts,
genesisProtocol,
token
) {
var globalConstraintRegistrarParams = new GlobalConstraintRegistrarParams();
if (genesisProtocol === true) {
globalConstraintRegistrarParams.votingMachine = await helpers.setupGenesisProtocol(accounts,token,0,0);
await globalConstraintRegistrar.setParameters(globalConstraintRegistrarParams.votingMachine.params,
globalConstraintRegistrarParams.votingMachine.genesisProtocol.address);
globalConstraintRegistrarParams.paramsHash = await globalConstraintRegistrar.getParametersHash(globalConstraintRegistrarParams.votingMachine.params,
globalConstraintRegistrarParams.votingMachine.genesisProtocol.address);
} else {
globalConstraintRegistrarParams.votingMachine = await helpers.setupAbsoluteVote(true,50,globalConstraintRegistrar.address);
await globalConstraintRegistrar.setParameters(globalConstraintRegistrarParams.votingMachine.params,
globalConstraintRegistrarParams.votingMachine.absoluteVote.address);
globalConstraintRegistrarParams.paramsHash = await globalConstraintRegistrar.getParametersHash(globalConstraintRegistrarParams.votingMachine.params,
globalConstraintRegistrarParams.votingMachine.absoluteVote.address);
}
return globalConstraintRegistrarParams;
};
const setup = async function (accounts,genesisProtocol = false,tokenAddress=0) {
var testSetup = new helpers.TestSetup();
testSetup.fee = 10;
testSetup.globalConstraintRegistrar = await GlobalConstraintRegistrar.new();
var controllerCreator = await ControllerCreator.new({gas: constants.ARC_GAS_LIMIT});
testSetup.daoCreator = await DaoCreator.new(controllerCreator.address,{gas:constants.ARC_GAS_LIMIT});
testSetup.reputationArray = [20,10,70];
testSetup.org = await helpers.setupOrganizationWithArrays(testSetup.daoCreator,[accounts[0],accounts[1],accounts[2]],[1000,1000,1000],testSetup.reputationArray);
testSetup.globalConstraintRegistrarParams= await setupGlobalConstraintRegistrarParams(testSetup.globalConstraintRegistrar,accounts,genesisProtocol,tokenAddress);
var permissions = "0x00000004";
//await testSetup.daoCreator.setSchemes(testSetup.org.avatar.address,[testSetup.globalConstraintRegistrar.address],[testSetup.globalConstraintRegistrarParams.paramsHash],[permissions]);
await testSetup.daoCreator.setSchemes(testSetup.org.avatar.address,
[testSetup.globalConstraintRegistrar.address],
[testSetup.globalConstraintRegistrarParams.paramsHash],
[permissions]);
return testSetup;
};
contract('GlobalConstraintRegistrar', accounts => {
it("setParameters", async ()=> {
var globalConstraintRegistrar = await GlobalConstraintRegistrar.new();
var params = await setupGlobalConstraintRegistrarParams(globalConstraintRegistrar);
var parameters = await globalConstraintRegistrar.parameters(params.paramsHash);
assert.equal(parameters[1],params.votingMachine.absoluteVote.address);
});
it("proposeGlobalConstraint voteToRemoveParams", async function() {
var testSetup = await setup(accounts);
var globalConstraintMock = await GlobalConstraintMock.new();
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
"0x1235");
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,{from:accounts[2]});
var voteToRemoveParams = await testSetup.globalConstraintRegistrar.voteToRemoveParams(testSetup.org.avatar.address, globalConstraintMock.address);
assert.equal(voteToRemoveParams, "0x1235000000000000000000000000000000000000000000000000000000000000");
});
it("proposeGlobalConstraint organizationsProposals", async function() {
var testSetup = await setup(accounts);
var globalConstraintMock = await GlobalConstraintMock.new();
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
"0x1234");
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
var organizationProposal = await testSetup.globalConstraintRegistrar.organizationsProposals(testSetup.org.avatar.address,proposalId);
assert.equal(organizationProposal[0],globalConstraintMock.address);
});
it("proposeGlobalConstraint log", async function() {
var testSetup = await setup(accounts);
var globalConstraintMock = await GlobalConstraintMock.new();
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
"0x1234");
assert.equal(tx.logs.length, 1);
assert.equal(tx.logs[0].event, "NewGlobalConstraintsProposal");
});
it("proposeGlobalConstraint check owner vote", async function() {
var testSetup = await setup(accounts);
var globalConstraintMock =await GlobalConstraintMock.new();
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
"0x1234");
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await helpers.checkVoteInfo(testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote,proposalId,accounts[0],[1,testSetup.reputationArray[0]]);
});
it("execute proposeGlobalConstraint ", async function() {
var testSetup = await setup(accounts);
var controller = await Controller.at(await testSetup.org.avatar.owner());
var globalConstraintMock = await GlobalConstraintMock.new();
await globalConstraintMock.setConstraint(web3.utils.asciiToHex("method"),false,false);
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
testSetup.globalConstraintRegistrarParams.votingMachine.params);
assert.equal(tx.logs.length, 1);
assert.equal(tx.logs[0].event, "NewGlobalConstraintsProposal");
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
let gcCount = await controller.globalConstraintsCount(testSetup.org.avatar.address);
assert.equal(gcCount[0],0);
assert.equal(gcCount[1],0);
tx = await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,{from:accounts[2]});
gcCount = await controller.globalConstraintsCount(testSetup.org.avatar.address);
assert.equal(gcCount[0],1);
});
it("proposeToRemoveGC log", async function() {
var testSetup = await setup(accounts);
var globalConstraintMock =await GlobalConstraintMock.new();
await globalConstraintMock.setConstraint(web3.utils.asciiToHex("method"),false,false);
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
testSetup.globalConstraintRegistrarParams.votingMachine.params);
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,{from:accounts[2]});
tx = await testSetup.globalConstraintRegistrar.proposeToRemoveGC(testSetup.org.avatar.address,
globalConstraintMock.address);
assert.equal(tx.logs.length, 1);
assert.equal(tx.logs[0].event, "RemoveGlobalConstraintsProposal");
});
it("proposeToRemoveGC without registration -should fail", async function() {
var testSetup = await setup(accounts,false);
var globalConstraintMock =await GlobalConstraintMock.new();
try{
await testSetup.globalConstraintRegistrar.proposeToRemoveGC(testSetup.org.avatar.address,
globalConstraintMock.address,
);
assert(false,"proposeGlobalConstraint should fail - due to no registration !");
}catch(ex){
helpers.assertVMException(ex);
}
});
it("proposeToRemoveGC check owner vote", async function() {
var testSetup = await setup(accounts);
var globalConstraintMock =await GlobalConstraintMock.new();
await globalConstraintMock.setConstraint(web3.utils.asciiToHex("method"),false,false);
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
testSetup.globalConstraintRegistrarParams.votingMachine.params);
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,{from:accounts[2]});
await testSetup.globalConstraintRegistrar.proposeToRemoveGC(testSetup.org.avatar.address,
globalConstraintMock.address,
);
proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await helpers.checkVoteInfo(testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote,proposalId,accounts[0],[1,testSetup.reputationArray[0]]);
});
it("execute proposeToRemoveGC ", async function() {
var testSetup = await setup(accounts);
var controller = await Controller.at(await testSetup.org.avatar.owner());
var globalConstraintMock =await GlobalConstraintMock.new();
await globalConstraintMock.setConstraint(web3.utils.asciiToHex("method"),false,false);
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
testSetup.globalConstraintRegistrarParams.votingMachine.params);
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,{from:accounts[2]});
assert.equal(await controller.isGlobalConstraintRegistered(globalConstraintMock.address,testSetup.org.avatar.address),true);
tx = await testSetup.globalConstraintRegistrar.proposeToRemoveGC(testSetup.org.avatar.address,
globalConstraintMock.address);
assert.equal(tx.logs.length, 1);
assert.equal(tx.logs[0].event, "RemoveGlobalConstraintsProposal");
proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
let count = await controller.globalConstraintsCount(testSetup.org.avatar.address);
assert.equal(count[0],1);
await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,1,0,{from:accounts[2]});
count = await controller.globalConstraintsCount(testSetup.org.avatar.address);
assert.equal(count[0],0);
});
it("execute proposeToRemoveGC (same as proposeGlobalConstraint) vote=NO ", async function() {
var testSetup = await setup(accounts);
var controller = await Controller.at(await testSetup.org.avatar.owner());
var globalConstraintMock =await GlobalConstraintMock.new();
await globalConstraintMock.setConstraint(web3.utils.asciiToHex("method"),false,false);
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
testSetup.globalConstraintRegistrarParams.votingMachine.params);
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await testSetup.globalConstraintRegistrarParams.votingMachine.absoluteVote.vote(proposalId,0,0,{from:accounts[2]});
let count = await controller.globalConstraintsCount(testSetup.org.avatar.address);
assert.equal(count[0],0);
});
it("proposeToRemoveGC with genesis protocol", async function() {
var standardTokenMock = await StandardTokenMock.new(accounts[0],1000);
var testSetup = await setup(accounts,true,standardTokenMock.address);
var globalConstraintMock =await GlobalConstraintMock.new();
//genesisProtocol use burn reputation.
await globalConstraintMock.setConstraint(web3.utils.asciiToHex("burnReputation"),true,true);
var tx = await testSetup.globalConstraintRegistrar.proposeGlobalConstraint(testSetup.org.avatar.address,
globalConstraintMock.address,
"0x1234",
testSetup.globalConstraintRegistrarParams.votingMachine.params);
var proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
await testSetup.globalConstraintRegistrarParams.votingMachine.genesisProtocol.vote(proposalId,1,0,{from:accounts[2]});
tx = await testSetup.globalConstraintRegistrar.proposeToRemoveGC(testSetup.org.avatar.address,
globalConstraintMock.address,
);
proposalId = await helpers.getValueFromLogs(tx, '_proposalId',1);
var rep = await testSetup.org.reputation.balanceOf(accounts[2]);
await testSetup.globalConstraintRegistrarParams.votingMachine.genesisProtocol.vote(proposalId,1,0,{from:accounts[2]});
await helpers.checkVoteInfo(testSetup.globalConstraintRegistrarParams.votingMachine.genesisProtocol,proposalId,accounts[2],[1,rep.toNumber()]);
});
});