123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import increaseTime from './helpers/increaseTime';
- import expectThrow from './helpers/expectThrow';
- import assertRevert from './helpers/assertRevert';
- const NULL_ADDRESS = '0x0000000000000000000000000000000000000000';
- const Heritable = artifacts.require('Heritable');
- contract('Heritable', function (accounts) {
- let heritable;
- let owner;
- beforeEach(async function () {
- heritable = await Heritable.new(4141);
- owner = await heritable.owner();
- });
- it('should start off with an owner, but without heir', async function () {
- const heir = await heritable.heir();
- assert.equal(typeof (owner), 'string');
- assert.equal(typeof (heir), 'string');
- assert.notStrictEqual(
- owner, NULL_ADDRESS,
- 'Owner shouldn\'t be the null address'
- );
- assert.isTrue(
- heir === NULL_ADDRESS,
- 'Heir should be the null address'
- );
- });
- it('only owner should set heir', async function () {
- const newHeir = accounts[1];
- const someRandomAddress = accounts[2];
- assert.isTrue(owner !== someRandomAddress);
- await heritable.setHeir(newHeir, { from: owner });
- await expectThrow(heritable.setHeir(newHeir, { from: someRandomAddress }));
- });
- it('owner can\'t be heir', async function () {
- await assertRevert(heritable.setHeir(owner, { from: owner }));
- });
- it('owner can remove heir', async function () {
- const newHeir = accounts[1];
- await heritable.setHeir(newHeir, { from: owner });
- let heir = await heritable.heir();
- assert.notStrictEqual(heir, NULL_ADDRESS);
- await heritable.removeHeir();
- heir = await heritable.heir();
- assert.isTrue(heir === NULL_ADDRESS);
- });
- it('heir can claim ownership only if owner is dead and timeout was reached', async function () {
- const heir = accounts[1];
- await heritable.setHeir(heir, { from: owner });
- await expectThrow(heritable.claimHeirOwnership({ from: heir }));
- await heritable.proclaimDeath({ from: heir });
- await increaseTime(1);
- await expectThrow(heritable.claimHeirOwnership({ from: heir }));
- await increaseTime(4141);
- await heritable.claimHeirOwnership({ from: heir });
- assert.isTrue(await heritable.heir() === heir);
- });
- it('only heir can proclaim death', async function () {
- const someRandomAddress = accounts[2];
- await assertRevert(heritable.proclaimDeath({ from: owner }));
- await assertRevert(heritable.proclaimDeath({ from: someRandomAddress }));
- });
- it('heir can\'t proclaim death if owner is death', async function () {
- const heir = accounts[1];
- await heritable.setHeir(heir, { from: owner });
- await heritable.proclaimDeath({ from: heir });
- await assertRevert(heritable.proclaimDeath({ from: heir }));
- });
- it('heir can\'t claim ownership if owner heartbeats', async function () {
- const heir = accounts[1];
- await heritable.setHeir(heir, { from: owner });
- await heritable.proclaimDeath({ from: heir });
- await heritable.heartbeat({ from: owner });
- await expectThrow(heritable.claimHeirOwnership({ from: heir }));
- await heritable.proclaimDeath({ from: heir });
- await increaseTime(4141);
- await heritable.heartbeat({ from: owner });
- await expectThrow(heritable.claimHeirOwnership({ from: heir }));
- });
- it('should log events appropriately', async function () {
- const heir = accounts[1];
- const setHeirLogs = (await heritable.setHeir(heir, { from: owner })).logs;
- const setHeirEvent = setHeirLogs.find(e => e.event === 'HeirChanged');
- assert.isTrue(setHeirEvent.args.owner === owner);
- assert.isTrue(setHeirEvent.args.newHeir === heir);
- const heartbeatLogs = (await heritable.heartbeat({ from: owner })).logs;
- const heartbeatEvent = heartbeatLogs.find(e => e.event === 'OwnerHeartbeated');
- assert.isTrue(heartbeatEvent.args.owner === owner);
- const proclaimDeathLogs = (await heritable.proclaimDeath({ from: heir })).logs;
- const ownerDeadEvent = proclaimDeathLogs.find(e => e.event === 'OwnerProclaimedDead');
- assert.isTrue(ownerDeadEvent.args.owner === owner);
- assert.isTrue(ownerDeadEvent.args.heir === heir);
- await increaseTime(4141);
- const claimHeirOwnershipLogs = (await heritable.claimHeirOwnership({ from: heir })).logs;
- const ownershipTransferredEvent = claimHeirOwnershipLogs.find(e => e.event === 'OwnershipTransferred');
- const heirOwnershipClaimedEvent = claimHeirOwnershipLogs.find(e => e.event === 'HeirOwnershipClaimed');
- assert.isTrue(ownershipTransferredEvent.args.previousOwner === owner);
- assert.isTrue(ownershipTransferredEvent.args.newOwner === heir);
- assert.isTrue(heirOwnershipClaimedEvent.args.previousOwner === owner);
- assert.isTrue(heirOwnershipClaimedEvent.args.newOwner === heir);
- });
- it('timeOfDeath can be queried', async function () {
- assert.equal(await heritable.timeOfDeath(), 0);
- });
- it('heartbeatTimeout can be queried', async function () {
- assert.equal(await heritable.heartbeatTimeout(), 4141);
- });
- });
|