nonsed
Version:
The Novel Ethereum Database Framework
128 lines (109 loc) • 5.54 kB
JavaScript
const chai = require("chai");
const bnChai = require("bn-chai");
const expect = chai.expect;
chai.use(bnChai(web3.utils.BN));
chai.use(require('chai-as-promised'));
chai.should();
const {toWei, toBN, fromWei, BN} = web3.utils;
const FeeSplitterDatabase = artifacts.require("FeeSplitterDatabase");
contract("FeeSplitterDatabase", (accounts) => {
let splitter;
const OWNER = accounts[0];
const ADMIN = accounts[9];
const UNKNOWN = accounts[8];
const BENEFICIARY_1 = accounts[1];
const BENEFICIARY_2 = accounts[2];
const BENEFICIARY_3 = accounts[3];
const BENEFICIARY_4 = accounts[4];
const BENEFICIARY_4_CHANGED = accounts[5];
const BENEFICIARY_1_SHARES = toBN('125');
const BENEFICIARY_2_SHARES = toBN('125');
const BENEFICIARY_3_SHARES = toBN('250');
const BENEFICIARY_4_SHARES = toBN('500');
const BENEFICIARIES = [BENEFICIARY_1, BENEFICIARY_2, BENEFICIARY_3, BENEFICIARY_4];
const BENEFICIARIES_SHARES = [BENEFICIARY_1_SHARES, BENEFICIARY_2_SHARES, BENEFICIARY_3_SHARES, BENEFICIARY_4_SHARES];
before(async () => {
splitter = await FeeSplitterDatabase.new(
BENEFICIARIES,
BENEFICIARIES_SHARES,
{ from: OWNER }
);
await splitter.transferAdminRights(ADMIN, { from: OWNER });
await splitter.unpause({ from: ADMIN });
})
describe("when initialized", () => {
it("should accept payments", async () => {
let payment = toWei('1', 'ether');
await splitter.sendTransaction({ value: payment, from: UNKNOWN });
expect(await web3.eth.getBalance(splitter.address)).to.eq.BN(payment)
});
it("should have payees", async () => {
for (var i = 0; i < BENEFICIARIES.length; i++) {
(await splitter.getPayee(i)).should.be.equal(BENEFICIARIES[i]);
}
});
it("payess should have shares", async () => {
for (var i = 0; i < BENEFICIARIES.length; i++) {
expect(await splitter.getShares(BENEFICIARIES[i])).to.eq.BN(BENEFICIARIES_SHARES[i]);
}
});
it("should have correct total shares", async () => {
expect(await splitter.getTotalShares()).to.eq.BN(toBN('1000'));
})
it("should have correct total released", async () => {
expect(await splitter.getTotalReleased()).to.eq.BN(toBN('0'));
})
it("should have correct payess count", async () => {
expect(await splitter.getPayeesCount()).to.eq.BN(toBN('4'));
})
})
describe("when releasing", () => {
it("should release correct amount", async () => {
let balanceBefore = new BN(await web3.eth.getBalance(BENEFICIARY_4));
await splitter.release(BENEFICIARY_4, { from: UNKNOWN }).should.be.fulfilled;
let balanceAfter = new BN(await web3.eth.getBalance(BENEFICIARY_4));
expect(balanceAfter.sub(balanceBefore)).to.eq.BN(toWei(new BN('500'), 'finney'));
})
})
describe("when changing payee address", () => {
it("should change payee address", async () => {
(await splitter.getPayee(3)).should.be.equal(BENEFICIARY_4);
await splitter.changePayeeAddress(3, BENEFICIARY_4_CHANGED, { from: BENEFICIARY_4 }).should.be.fulfilled;
(await splitter.getPayee(3)).should.be.equal(BENEFICIARY_4_CHANGED);
})
it("should allow release correct amount to changed address", async () => {
let payment = toWei('1', 'ether');
await splitter.sendTransaction({ value: payment, from: UNKNOWN });
let balanceBefore = new BN(await web3.eth.getBalance(BENEFICIARY_4_CHANGED));
await splitter.release(BENEFICIARY_4_CHANGED, { from: UNKNOWN }).should.be.fulfilled;
let balanceAfter = new BN(await web3.eth.getBalance(BENEFICIARY_4_CHANGED));
expect(balanceAfter.sub(balanceBefore)).to.eq.BN(toWei(new BN('500'), 'finney'));
})
})
describe("when transfering token and adminship", () => {
it("should correctly delete payess", async () => {
await splitter.pause({ from: ADMIN }).should.be.fulfilled;
await splitter.deletePayees({ from: OWNER }).should.be.fulfilled;
expect(await splitter.getTotalShares()).to.eq.BN(toBN('0'));
expect(await splitter.getTotalReleased()).to.eq.BN(toBN('0'));
expect(await splitter.getPayeesCount()).to.eq.BN(toBN('0'));
})
it("should allow init new set of payees", async () => {
let BENEFICIARIES_NEW = BENEFICIARIES.reverse();
await splitter.setPayess(
BENEFICIARIES_NEW,
BENEFICIARIES_SHARES,
{ from: ADMIN }
).should.be.fulfilled;
expect(await splitter.getTotalShares()).to.eq.BN(toBN('1000'));
expect(await splitter.getTotalReleased()).to.eq.BN(toBN('0'));
expect(await splitter.getPayeesCount()).to.eq.BN(toBN('4'));
for (var i = 0; i < BENEFICIARIES_NEW.length; i++) {
(await splitter.getPayee(i)).should.be.equal(BENEFICIARIES_NEW[i]);
}
for (var i = 0; i < BENEFICIARIES_NEW.length; i++) {
expect(await splitter.getShares(BENEFICIARIES_NEW[i])).to.eq.BN(BENEFICIARIES_SHARES[i]);
}
})
})
})