Skip to content

Commit

Permalink
Merge pull request #208 from Thetta/dev2Rostyslav3
Browse files Browse the repository at this point in the history
Add new StdDaoToken test: multiple votings started, transfers work co…
  • Loading branch information
AnthonyAkentiev committed Jul 20, 2018
2 parents a1148c3 + a80107e commit 5ec5a4d
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 0 deletions.
8 changes: 8 additions & 0 deletions contracts/governance/Voting_SimpleToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,14 @@ contract Voting_SimpleToken is IVoting, Ownable {
}
}

function getPowerOf(address _who) view public returns(uint) {
if(isQuadraticVoting){
return sqrt(stdDaoToken.getBalanceAtVoting(votingID, _who));
}
return stdDaoToken.getBalanceAtVoting(votingID, _who);
}


function getVotingStats() public constant returns(uint yesResults, uint noResults, uint votersTotal){
yesResults = 0;
noResults = 0;
Expand Down
113 changes: 113 additions & 0 deletions test/governance/voting_simple_token.functional.tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
var DaoBaseWithUnpackers = artifacts.require("./DaoBaseWithUnpackers");
var StdDaoToken = artifacts.require("./StdDaoToken");
var DaoStorage = artifacts.require("./DaoStorage");

var WeiFund = artifacts.require("./WeiFund");
var MoneyFlow = artifacts.require("./MoneyFlow");
var IWeiReceiver = artifacts.require("./IWeiReceiver");
var WeiAbsoluteExpense = artifacts.require("./WeiAbsoluteExpense");
var InformalProposal = artifacts.require("./InformalProposal");

var MoneyflowAuto = artifacts.require("./MoneyflowAuto");

var InformalProposal = artifacts.require("./InformalProposal");

var LiquidVoting = artifacts.require("./LiquidVoting");
var Voting_SimpleToken = artifacts.require("./Voting_SimpleToken");
var IProposal = artifacts.require("./IProposal");

const BigNumber = web3.BigNumber;

require('chai')
.use(require('chai-as-promised'))
.use(require('chai-bignumber')(BigNumber))
.should();

contract('Multiple Votings', (accounts) => {
const creator = accounts[0];
const employee1 = accounts[1];
const employee2 = accounts[2];

let r2;
let token;
let voting;
let daoBase;

const VOTING_TYPE_LIQUID = 4;

beforeEach(async() => {
token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000);
await token.mintFor(creator, 1);
await token.mintFor(employee1, 1);
await token.mintFor(employee2, 2);

let store = await DaoStorage.new([token.address],{ from: creator });
daoBase = await DaoBaseWithUnpackers.new(store.address,{ from: creator });

});
describe('getPowerOf()', function () {
it('Check getPower() when 3 different votings created',async() => {

let liquidVoting = await LiquidVoting.new(daoBase.address, creator, creator, 0, 100, 100, token.address, false);
let simpleVoting = await Voting_SimpleToken.new(daoBase.address, employee1, employee1, 60, 51, 71, token.address, false);
let qudraticVoting = await Voting_SimpleToken.new(daoBase.address, employee1, employee1, 60, 51, 71, token.address, true);

r2 = await liquidVoting.getPowerOf(creator);
assert.equal(r2.toNumber(),1,'yes');

r2 = await liquidVoting.getPowerOf(employee1);
assert.equal(r2.toNumber(),1,'yes');

r2 = await liquidVoting.getPowerOf(employee2);
assert.equal(r2.toNumber(),2,'yes');

r2 = await simpleVoting.getPowerOf(creator);
assert.equal(r2.toNumber(),1,'yes');

r2 = await simpleVoting.getPowerOf(employee1);
assert.equal(r2.toNumber(),1,'yes');

r2 = await simpleVoting.getPowerOf(employee2);
assert.equal(r2.toNumber(),2,'yes');

r2 = await qudraticVoting.getPowerOf(creator);
assert.equal(r2.toNumber(),1,'yes');

r2 = await qudraticVoting.getPowerOf(employee1);
assert.equal(r2.toNumber(),1,'yes');

r2 = await qudraticVoting.getPowerOf(employee2);
assert.equal(r2.toNumber(),1,'yes');

token.transfer(creator, 1, {from: employee2});
token.transfer(employee2, 1, {from: employee1});

r2 = await liquidVoting.getPowerOf(creator);
assert.equal(r2.toNumber(),1,'yes');

r2 = await liquidVoting.getPowerOf(employee1);
assert.equal(r2.toNumber(),1,'yes');

r2 = await liquidVoting.getPowerOf(employee2);
assert.equal(r2.toNumber(),2,'yes');

r2 = await simpleVoting.getPowerOf(creator);
assert.equal(r2.toNumber(),1,'yes');

r2 = await simpleVoting.getPowerOf(employee1);
assert.equal(r2.toNumber(),1,'yes');

r2 = await simpleVoting.getPowerOf(employee2);
assert.equal(r2.toNumber(),2,'yes');

r2 = await qudraticVoting.getPowerOf(creator);
assert.equal(r2.toNumber(),1,'yes');

r2 = await qudraticVoting.getPowerOf(employee1);
assert.equal(r2.toNumber(),1,'yes');

r2 = await qudraticVoting.getPowerOf(employee2);
assert.equal(r2.toNumber(),1,'yes');
});
});
});
33 changes: 33 additions & 0 deletions test/tokens/stddaotoken.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,39 @@ require('chai')
assert.equal(employee5VotingBalance.toNumber(), 0);
});

it('should preserve balances in 2 different votings',async() => {
this.token = await StdDaoToken.new("StdToken","STDT",18, false, true, ETH);
await this.token.mintFor(employee4, 1);

let tx = await this.token.startNewVoting();
let events = tx.logs.filter(l => l.event == 'VotingStarted');
const votingID = events.filter(e => e.args._address == creator)[0].args._votingID;

await this.token.transfer(employee5, 1, {from: employee4});

tx = await this.token.startNewVoting();
events = tx.logs.filter(l => l.event == 'VotingStarted');
const secondVotingID = events.filter(e => e.args._address == creator)[0].args._votingID;

employee4Balance = await this.token.balanceOf(employee4);
employee5Balance = await this.token.balanceOf(employee5);

employee4VotingBalance = await this.token.getBalanceAtVoting(votingID, employee4);
employee5VotingBalance = await this.token.getBalanceAtVoting(votingID, employee5);

let employee4SecondVotingBalance = await this.token.getBalanceAtVoting(secondVotingID, employee4);
let employee5SecondVotingBalance = await this.token.getBalanceAtVoting(secondVotingID, employee5);

assert.equal(employee4Balance.toNumber(), 0);
assert.equal(employee5Balance.toNumber(), 1);

assert.equal(employee4VotingBalance.toNumber(), 1);
assert.equal(employee5VotingBalance.toNumber(), 0);

assert.equal(employee4SecondVotingBalance.toNumber(), 0);
assert.equal(employee5SecondVotingBalance.toNumber(), 1);
});

it('should preserve balances after voting is started and burnFor called',async() => {
this.token = await StdDaoToken.new("StdToken","STDT",18, true, true, ETH);
await this.token.mintFor(employee4, 1);
Expand Down

0 comments on commit 5ec5a4d

Please sign in to comment.