electusprotocol
Version:
Standard Implementation and interface for Electus Protocol
113 lines (111 loc) • 5.36 kB
JavaScript
var ElectusProtocol = artifacts.require("./ElectusProtocol.sol");
const truffleAssert = require("truffle-assertions");
contract("ElectusProtocol", function(accounts) {
let electusProtocol;
beforeEach("setup", async () => {
electusProtocol = await ElectusProtocol.new();
await electusProtocol.addAttributeSet("0x68616972", ["0x626c61636b", "0x7768697465"]);
await electusProtocol.addAttributeSet("0x736b696e", ["0x626c61636b", "0x7768697465"]);
await electusProtocol.assignTo(accounts[1], [0], { from: accounts[0] });
});
it("he is a current member", async () => {
const data = await electusProtocol.isCurrentMember(accounts[1]);
assert.equal(data, true);
});
it("he is not a current member", async () => {
const data = await electusProtocol.isCurrentMember(accounts[2]);
assert.equal(data, false);
});
it("gets all memebers", async () => {
const data = await electusProtocol.getAllMembers();
assert.equal(data[0], accounts[1]);
});
it("gets current memeber count", async () => {
await electusProtocol.assignTo(accounts[2], [0], { from: accounts[0] });
await electusProtocol.revokeFrom(accounts[1], { from: accounts[0] });
const data = await electusProtocol.getCurrentMemberCount();
assert.equal(data, 1);
});
it("list of attributes Names", async () => {
const data = await electusProtocol.getAttributeNames();
// eslint-disable-next-line no-control-regex
assert.equal(web3.utils.toAscii(data[1]).replace(/\u0000/g, ""), "skin", 32);
});
it("list of attributes of a member", async () => {
const data = await electusProtocol.getAttributes(accounts[1]);
// eslint-disable-next-line no-control-regex
assert.equal(web3.utils.toAscii(data[0]).replace(/\u0000/g, ""), "black", 32);
});
it("gets attribute of a member by name", async () => {
const data = await electusProtocol.getAttributeByName(accounts[1], web3.utils.fromAscii("hair"));
// eslint-disable-next-line no-control-regex
assert.equal(web3.utils.toAscii(data).replace(/\u0000/g, ""), "black", 32);
});
it("adds a set of attributes", async () => {
await electusProtocol.addAttributeSet(web3.utils.fromAscii("height"), [web3.utils.fromAscii("5"), web3.utils.fromAscii("6")]);
const data = await electusProtocol.getAttributeNames();
// eslint-disable-next-line no-control-regex
assert.equal(web3.utils.toAscii(data[2]).replace(/\u0000/g, ""), "height", 32);
});
it("modifies attribute by name", async () => {
const result = await electusProtocol.modifyAttributeByName(accounts[1], web3.utils.fromAscii("hair"), 0);
const data = await electusProtocol.getAttributes(accounts[1]);
truffleAssert.eventEmitted(result, "ModifiedAttributes");
// eslint-disable-next-line no-control-regex
assert.equal(web3.utils.toAscii(data[0]).replace(/\u0000/g, ""), "black", 32);
});
it("request memebership", async () => {
const requestedMembership = await electusProtocol.requestMembership([0], {
from: accounts[2]
});
const data = await electusProtocol.isCurrentMember(accounts[2]);
const isMembershipPending = await electusProtocol.pendingRequests(accounts[2]);
assert.equal(isMembershipPending, true);
assert.equal(data, false);
truffleAssert.eventEmitted(requestedMembership, "RequestedMembership");
});
it("request and approve memebership", async () => {
const requestedMembership = await electusProtocol.requestMembership([0], {
from: accounts[2]
});
const approvedMembership = await electusProtocol.approveRequest(accounts[2], {
from: accounts[0]
});
const data = await electusProtocol.isCurrentMember(accounts[2]);
assert.equal(data, true);
const attr = await electusProtocol.getAttributes(accounts[2]);
// eslint-disable-next-line no-control-regex
assert.equal(web3.utils.toAscii(attr[0]).replace(/\u0000/g, ""), "black", 32);
truffleAssert.eventEmitted(requestedMembership, "RequestedMembership");
truffleAssert.eventEmitted(approvedMembership, "ApprovedMembership");
});
it("discard memebership request", async () => {
const requestedMembership = await electusProtocol.requestMembership([0], {
from: accounts[2]
});
await electusProtocol.discardRequest(accounts[2], {
from: accounts[0]
});
const isMembershipPending = await electusProtocol.pendingRequests(accounts[2]);
const data = await electusProtocol.isCurrentMember(accounts[2]);
assert.equal(isMembershipPending, false);
assert.equal(data, false);
truffleAssert.eventEmitted(requestedMembership, "RequestedMembership");
});
it("self revoke memebership", async () => {
const revoke = await electusProtocol.forfeitMembership({
from: accounts[1]
});
truffleAssert.eventEmitted(revoke, "Revoked");
const data = await electusProtocol.isCurrentMember(accounts[1]);
assert.equal(data, false);
});
it("owner revokes memebership", async () => {
const revoke = await electusProtocol.revokeFrom(accounts[1], {
from: accounts[0]
});
truffleAssert.eventEmitted(revoke, "Revoked");
const data = await electusProtocol.isCurrentMember(accounts[1]);
assert.equal(data, false);
});
});