Skip to content

Commit

Permalink
Feature/use expect event in test logs assertions #1232 (#1343)
Browse files Browse the repository at this point in the history
* Add BigNumber support to expectEvent/inLogs (#1026)

* switched direct logs array check to expectEvent method in AllowanceCrowdsale.test.js

* Refactor expectEvent.inLogs function to use simple value number check

* Introduced should.be.bignumber method to compare BigNumber values

* Use expectEvent to test logs (#1232)

* Removed trailing space
  • Loading branch information
jbogacz authored and nventuro committed Sep 27, 2018
1 parent 75c0a59 commit 536262f
Show file tree
Hide file tree
Showing 12 changed files with 135 additions and 134 deletions.
14 changes: 6 additions & 8 deletions test/crowdsale/AllowanceCrowdsale.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,12 @@ contract('AllowanceCrowdsale', function ([_, investor, wallet, purchaser, tokenW
describe('high-level purchase', function () {
it('should log purchase', async function () {
const { logs } = await this.crowdsale.sendTransaction({ value: value, from: investor });
expectEvent.inLogs(
logs,
'TokensPurchased',
{
purchaser: investor,
beneficiary: investor,
value: value,
amount: expectedTokenAmount });
expectEvent.inLogs(logs, 'TokensPurchased', {
purchaser: investor,
beneficiary: investor,
value: value,
amount: expectedTokenAmount
});
});

it('should assign tokens to sender', async function () {
Expand Down
27 changes: 14 additions & 13 deletions test/crowdsale/Crowdsale.test.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
const expectEvent = require('../helpers/expectEvent');
const { assertRevert } = require('../helpers/assertRevert');
const { ether } = require('../helpers/ether');
const { ethGetBalance } = require('../helpers/web3');

const BigNumber = web3.BigNumber;

const should = require('chai')
require('chai')
.use(require('chai-bignumber')(BigNumber))
.should();

Expand Down Expand Up @@ -82,12 +83,12 @@ contract('Crowdsale', function ([_, investor, wallet, purchaser]) {
describe('high-level purchase', function () {
it('should log purchase', async function () {
const { logs } = await this.crowdsale.sendTransaction({ value: value, from: investor });
const event = logs.find(e => e.event === 'TokensPurchased');
should.exist(event);
event.args.purchaser.should.equal(investor);
event.args.beneficiary.should.equal(investor);
event.args.value.should.be.bignumber.equal(value);
event.args.amount.should.be.bignumber.equal(expectedTokenAmount);
expectEvent.inLogs(logs, 'TokensPurchased', {
purchaser: investor,
beneficiary: investor,
value: value,
amount: expectedTokenAmount
});
});

it('should assign tokens to sender', async function () {
Expand All @@ -106,12 +107,12 @@ contract('Crowdsale', function ([_, investor, wallet, purchaser]) {
describe('low-level purchase', function () {
it('should log purchase', async function () {
const { logs } = await this.crowdsale.buyTokens(investor, { value: value, from: purchaser });
const event = logs.find(e => e.event === 'TokensPurchased');
should.exist(event);
event.args.purchaser.should.equal(purchaser);
event.args.beneficiary.should.equal(investor);
event.args.value.should.be.bignumber.equal(value);
event.args.amount.should.be.bignumber.equal(expectedTokenAmount);
expectEvent.inLogs(logs, 'TokensPurchased', {
purchaser: purchaser,
beneficiary: investor,
value: value,
amount: expectedTokenAmount
});
});

it('should assign tokens to beneficiary', async function () {
Expand Down
6 changes: 3 additions & 3 deletions test/crowdsale/FinalizableCrowdsale.test.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const expectEvent = require('../helpers/expectEvent');
const { advanceBlock } = require('../helpers/advanceToBlock');
const { increaseTimeTo, duration } = require('../helpers/increaseTime');
const { latestTime } = require('../helpers/latestTime');
Expand All @@ -6,7 +7,7 @@ const { EVMRevert } = require('../helpers/EVMRevert');

const BigNumber = web3.BigNumber;

const should = require('chai')
require('chai')
.use(require('chai-bignumber')(BigNumber))
.should();

Expand Down Expand Up @@ -50,7 +51,6 @@ contract('FinalizableCrowdsale', function ([_, wallet, anyone]) {
it('logs finalized', async function () {
await increaseTimeTo(this.afterClosingTime);
const { logs } = await this.crowdsale.finalize({ from: anyone });
const event = logs.find(e => e.event === 'CrowdsaleFinalized');
should.exist(event);
expectEvent.inLogs(logs, 'CrowdsaleFinalized');
});
});
15 changes: 8 additions & 7 deletions test/crowdsale/MintedCrowdsale.behavior.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const expectEvent = require('../helpers/expectEvent');
const { ethGetBalance } = require('../helpers/web3');

const BigNumber = web3.BigNumber;

const should = require('chai')
require('chai')
.use(require('chai-bignumber')(BigNumber))
.should();

Expand All @@ -20,12 +21,12 @@ function shouldBehaveLikeMintedCrowdsale ([_, investor, wallet, purchaser], rate
describe('high-level purchase', function () {
it('should log purchase', async function () {
const { logs } = await this.crowdsale.sendTransaction({ value: value, from: investor });
const event = logs.find(e => e.event === 'TokensPurchased');
should.exist(event);
event.args.purchaser.should.equal(investor);
event.args.beneficiary.should.equal(investor);
event.args.value.should.be.bignumber.equal(value);
event.args.amount.should.be.bignumber.equal(expectedTokenAmount);
expectEvent.inLogs(logs, 'TokensPurchased', {
purchaser: investor,
beneficiary: investor,
value: value,
amount: expectedTokenAmount
});
});

it('should assign tokens to sender', async function () {
Expand Down
18 changes: 10 additions & 8 deletions test/payment/Escrow.behavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ function shouldBehaveLikeEscrow (primary, [payee1, payee2]) {
});

it('emits a deposited event', async function () {
const receipt = await this.escrow.deposit(payee1, { from: primary, value: amount });

const event = expectEvent.inLogs(receipt.logs, 'Deposited', { payee: payee1 });
event.args.weiAmount.should.be.bignumber.equal(amount);
const { logs } = await this.escrow.deposit(payee1, { from: primary, value: amount });
expectEvent.inLogs(logs, 'Deposited', {
payee: payee1,
weiAmount: amount
});
});

it('can add multiple deposits on a single account', async function () {
Expand Down Expand Up @@ -83,10 +84,11 @@ function shouldBehaveLikeEscrow (primary, [payee1, payee2]) {

it('emits a withdrawn event', async function () {
await this.escrow.deposit(payee1, { from: primary, value: amount });
const receipt = await this.escrow.withdraw(payee1, { from: primary });

const event = expectEvent.inLogs(receipt.logs, 'Withdrawn', { payee: payee1 });
event.args.weiAmount.should.be.bignumber.equal(amount);
const { logs } = await this.escrow.withdraw(payee1, { from: primary });
expectEvent.inLogs(logs, 'Withdrawn', {
payee: payee1,
weiAmount: amount
});
});
});
});
Expand Down
10 changes: 4 additions & 6 deletions test/payment/RefundEscrow.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,8 @@ contract('RefundEscrow', function ([_, primary, beneficiary, refundee1, refundee
it('only the primary account can enter closed state', async function () {
await expectThrow(this.escrow.close({ from: beneficiary }), EVMRevert);

const receipt = await this.escrow.close({ from: primary });

expectEvent.inLogs(receipt.logs, 'Closed');
const { logs } = await this.escrow.close({ from: primary });
expectEvent.inLogs(logs, 'Closed');
});

context('closed state', function () {
Expand Down Expand Up @@ -93,9 +92,8 @@ contract('RefundEscrow', function ([_, primary, beneficiary, refundee1, refundee
it('only the primary account can enter refund state', async function () {
await expectThrow(this.escrow.enableRefunds({ from: beneficiary }), EVMRevert);

const receipt = await this.escrow.enableRefunds({ from: primary });

expectEvent.inLogs(receipt.logs, 'RefundsEnabled');
const { logs } = await this.escrow.enableRefunds({ from: primary });
expectEvent.inLogs(logs, 'RefundsEnabled');
});

context('refund state', function () {
Expand Down
65 changes: 32 additions & 33 deletions test/token/ERC20/ERC20.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits a transfer event', async function () {
const { logs } = await this.token.transfer(to, amount, { from: owner });

const event = expectEvent.inLogs(logs, 'Transfer', {
expectEvent.inLogs(logs, 'Transfer', {
from: owner,
to: to,
value: amount
});

event.args.value.should.be.bignumber.equal(amount);
});
});
});
Expand All @@ -91,11 +90,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits an approval event', async function () {
const { logs } = await this.token.approve(spender, amount, { from: owner });

logs.length.should.equal(1);
logs[0].event.should.equal('Approval');
logs[0].args.owner.should.equal(owner);
logs[0].args.spender.should.equal(spender);
logs[0].args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(logs, 'Approval', {
owner: owner,
spender: spender,
value: amount
});
});

describe('when there was no approved amount before', function () {
Expand Down Expand Up @@ -125,11 +124,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits an approval event', async function () {
const { logs } = await this.token.approve(spender, amount, { from: owner });

logs.length.should.equal(1);
logs[0].event.should.equal('Approval');
logs[0].args.owner.should.equal(owner);
logs[0].args.spender.should.equal(spender);
logs[0].args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(logs, 'Approval', {
owner: owner,
spender: spender,
value: amount
});
});

describe('when there was no approved amount before', function () {
Expand Down Expand Up @@ -195,11 +194,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits a transfer event', async function () {
const { logs } = await this.token.transferFrom(owner, to, amount, { from: spender });

logs.length.should.equal(1);
logs[0].event.should.equal('Transfer');
logs[0].args.from.should.equal(owner);
logs[0].args.to.should.equal(to);
logs[0].args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(logs, 'Transfer', {
from: owner,
to: to,
value: amount
});
});
});

Expand Down Expand Up @@ -270,11 +269,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits an approval event', async function () {
const { logs } = await this.token.decreaseAllowance(spender, approvedAmount, { from: owner });

logs.length.should.equal(1);
logs[0].event.should.equal('Approval');
logs[0].args.owner.should.equal(owner);
logs[0].args.spender.should.equal(spender);
logs[0].args.value.should.be.bignumber.equal(0);
expectEvent.inLogs(logs, 'Approval', {
owner: owner,
spender: spender,
value: 0
});
});

it('decreases the spender allowance subtracting the requested amount', async function () {
Expand Down Expand Up @@ -327,11 +326,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits an approval event', async function () {
const { logs } = await this.token.increaseAllowance(spender, amount, { from: owner });

logs.length.should.equal(1);
logs[0].event.should.equal('Approval');
logs[0].args.owner.should.equal(owner);
logs[0].args.spender.should.equal(spender);
logs[0].args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(logs, 'Approval', {
owner: owner,
spender: spender,
value: amount
});
});

describe('when there was no approved amount before', function () {
Expand Down Expand Up @@ -361,11 +360,11 @@ contract('ERC20', function ([_, owner, recipient, anotherAccount]) {
it('emits an approval event', async function () {
const { logs } = await this.token.increaseAllowance(spender, amount, { from: owner });

logs.length.should.equal(1);
logs[0].event.should.equal('Approval');
logs[0].args.owner.should.equal(owner);
logs[0].args.spender.should.equal(spender);
logs[0].args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(logs, 'Approval', {
owner: owner,
spender: spender,
value: amount
});
});

describe('when there was no approved amount before', function () {
Expand Down
7 changes: 3 additions & 4 deletions test/token/ERC20/ERC20Pausable.test.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const expectEvent = require('../../helpers/expectEvent');
const { assertRevert } = require('../../helpers/assertRevert');

const ERC20PausableMock = artifacts.require('ERC20PausableMock');
Expand Down Expand Up @@ -30,8 +31,7 @@ contract('ERC20Pausable', function ([_, pauser, otherPauser, recipient, anotherA
it('emits a Pause event', async function () {
const { logs } = await this.token.pause({ from });

logs.length.should.equal(1);
logs[0].event.should.equal('Paused');
expectEvent.inLogs(logs, 'Paused');
});
});

Expand Down Expand Up @@ -72,8 +72,7 @@ contract('ERC20Pausable', function ([_, pauser, otherPauser, recipient, anotherA
it('emits an Unpause event', async function () {
const { logs } = await this.token.unpause({ from });

logs.length.should.equal(1);
logs[0].event.should.equal('Unpaused');
expectEvent.inLogs(logs, 'Unpaused');
});
});

Expand Down
18 changes: 10 additions & 8 deletions test/token/ERC20/behaviors/ERC20Burnable.behavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,11 @@ function shouldBehaveLikeERC20Burnable (owner, initialBalance, [burner]) {
});

it('emits a transfer event', async function () {
const event = expectEvent.inLogs(this.logs, 'Transfer');
event.args.from.should.equal(owner);
event.args.to.should.equal(ZERO_ADDRESS);
event.args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(this.logs, 'Transfer', {
from: owner,
to: ZERO_ADDRESS,
value: amount
});
});
}
});
Expand Down Expand Up @@ -74,10 +75,11 @@ function shouldBehaveLikeERC20Burnable (owner, initialBalance, [burner]) {
});

it('emits a transfer event', async function () {
const event = expectEvent.inLogs(this.logs, 'Transfer');
event.args.from.should.equal(owner);
event.args.to.should.equal(ZERO_ADDRESS);
event.args.value.should.be.bignumber.equal(amount);
expectEvent.inLogs(this.logs, 'Transfer', {
from: owner,
to: ZERO_ADDRESS,
value: amount
});
});
}
});
Expand Down
4 changes: 2 additions & 2 deletions test/token/ERC20/behaviors/ERC20Mintable.behavior.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ function shouldBehaveLikeERC20Mintable (minter, [anyone]) {
});

it('emits a mint and a transfer event', async function () {
const transferEvent = expectEvent.inLogs(this.logs, 'Transfer', {
expectEvent.inLogs(this.logs, 'Transfer', {
from: ZERO_ADDRESS,
to: anyone,
value: amount
});
transferEvent.args.value.should.be.bignumber.equal(amount);
});
}
});
Expand Down
Loading

0 comments on commit 536262f

Please sign in to comment.