Преглед на файлове

Feature/use expect event in test logs assertions #1232 (#1343)

* 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
Jakub Bogacz преди 7 години
родител
ревизия
536262f2ec

+ 6 - 8
test/crowdsale/AllowanceCrowdsale.test.js

@@ -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 () {

+ 14 - 13
test/crowdsale/Crowdsale.test.js

@@ -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();
 
@@ -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 () {
@@ -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 () {

+ 3 - 3
test/crowdsale/FinalizableCrowdsale.test.js

@@ -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');
@@ -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();
 
@@ -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');
   });
 });

+ 8 - 7
test/crowdsale/MintedCrowdsale.behavior.js

@@ -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();
 
@@ -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 () {

+ 10 - 8
test/payment/Escrow.behavior.js

@@ -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 () {
@@ -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
+        });
       });
     });
   });

+ 4 - 6
test/payment/RefundEscrow.test.js

@@ -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 () {
@@ -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 () {

+ 32 - 33
test/token/ERC20/ERC20.test.js

@@ -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);
         });
       });
     });
@@ -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 () {
@@ -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 () {
@@ -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
+            });
           });
         });
 
@@ -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 () {
@@ -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 () {
@@ -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 () {

+ 3 - 4
test/token/ERC20/ERC20Pausable.test.js

@@ -1,3 +1,4 @@
+const expectEvent = require('../../helpers/expectEvent');
 const { assertRevert } = require('../../helpers/assertRevert');
 
 const ERC20PausableMock = artifacts.require('ERC20PausableMock');
@@ -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');
         });
       });
 
@@ -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');
         });
       });
 

+ 10 - 8
test/token/ERC20/behaviors/ERC20Burnable.behavior.js

@@ -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
+          });
         });
       }
     });
@@ -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
+          });
         });
       }
     });

+ 2 - 2
test/token/ERC20/behaviors/ERC20Mintable.behavior.js

@@ -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);
           });
         }
       });

+ 36 - 35
test/token/ERC721/ERC721.behavior.js

@@ -1,3 +1,4 @@
+const expectEvent = require('../../helpers/expectEvent');
 const { shouldSupportInterfaces } = require('../../introspection/SupportsInterface.behavior');
 const { assertRevert } = require('../../helpers/assertRevert');
 const { decodeLogs } = require('../../helpers/decodeLogs');
@@ -88,19 +89,19 @@ function shouldBehaveLikeERC721 (
 
         if (approved) {
           it('emit only a transfer event', async function () {
-            logs.length.should.be.equal(1);
-            logs[0].event.should.be.equal('Transfer');
-            logs[0].args.from.should.be.equal(owner);
-            logs[0].args.to.should.be.equal(this.toWhom);
-            logs[0].args.tokenId.should.be.bignumber.equal(tokenId);
+            expectEvent.inLogs(logs, 'Transfer', {
+              from: owner,
+              to: this.toWhom,
+              tokenId: tokenId
+            });
           });
         } else {
           it('emits only a transfer event', async function () {
-            logs.length.should.be.equal(1);
-            logs[0].event.should.be.equal('Transfer');
-            logs[0].args.from.should.be.equal(owner);
-            logs[0].args.to.should.be.equal(this.toWhom);
-            logs[0].args.tokenId.should.be.bignumber.equal(tokenId);
+            expectEvent.inLogs(logs, 'Transfer', {
+              from: owner,
+              to: this.toWhom,
+              tokenId: tokenId
+            });
           });
         }
 
@@ -161,11 +162,11 @@ function shouldBehaveLikeERC721 (
           });
 
           it('emits only a transfer event', async function () {
-            logs.length.should.be.equal(1);
-            logs[0].event.should.be.equal('Transfer');
-            logs[0].args.from.should.be.equal(owner);
-            logs[0].args.to.should.be.equal(owner);
-            logs[0].args.tokenId.should.be.bignumber.equal(tokenId);
+            expectEvent.inLogs(logs, 'Transfer', {
+              from: owner,
+              to: owner,
+              tokenId: tokenId
+            });
           });
 
           it('keeps the owner balance', async function () {
@@ -337,11 +338,11 @@ function shouldBehaveLikeERC721 (
 
       const itEmitsApprovalEvent = function (address) {
         it('emits an approval event', async function () {
-          logs.length.should.be.equal(1);
-          logs[0].event.should.be.equal('Approval');
-          logs[0].args.owner.should.be.equal(owner);
-          logs[0].args.approved.should.be.equal(address);
-          logs[0].args.tokenId.should.be.bignumber.equal(tokenId);
+          expectEvent.inLogs(logs, 'Approval', {
+            owner: owner,
+            approved: address,
+            tokenId: tokenId
+          });
         });
       };
 
@@ -447,11 +448,11 @@ function shouldBehaveLikeERC721 (
           it('emits an approval event', async function () {
             const { logs } = await this.token.setApprovalForAll(operator, true, { from: owner });
 
-            logs.length.should.be.equal(1);
-            logs[0].event.should.be.equal('ApprovalForAll');
-            logs[0].args.owner.should.be.equal(owner);
-            logs[0].args.operator.should.be.equal(operator);
-            logs[0].args.approved.should.equal(true);
+            expectEvent.inLogs(logs, 'ApprovalForAll', {
+              owner: owner,
+              operator: operator,
+              approved: true
+            });
           });
         });
 
@@ -469,11 +470,11 @@ function shouldBehaveLikeERC721 (
           it('emits an approval event', async function () {
             const { logs } = await this.token.setApprovalForAll(operator, true, { from: owner });
 
-            logs.length.should.be.equal(1);
-            logs[0].event.should.be.equal('ApprovalForAll');
-            logs[0].args.owner.should.be.equal(owner);
-            logs[0].args.operator.should.be.equal(operator);
-            logs[0].args.approved.should.equal(true);
+            expectEvent.inLogs(logs, 'ApprovalForAll', {
+              owner: owner,
+              operator: operator,
+              approved: true
+            });
           });
 
           it('can unset the operator approval', async function () {
@@ -497,11 +498,11 @@ function shouldBehaveLikeERC721 (
           it('emits an approval event', async function () {
             const { logs } = await this.token.setApprovalForAll(operator, true, { from: owner });
 
-            logs.length.should.be.equal(1);
-            logs[0].event.should.be.equal('ApprovalForAll');
-            logs[0].args.owner.should.be.equal(owner);
-            logs[0].args.operator.should.be.equal(operator);
-            logs[0].args.approved.should.equal(true);
+            expectEvent.inLogs(logs, 'ApprovalForAll', {
+              owner: owner,
+              operator: operator,
+              approved: true
+            });
           });
         });
       });

+ 7 - 7
test/token/ERC721/ERC721MintBurn.behavior.js

@@ -42,11 +42,11 @@ function shouldBehaveLikeMintAndBurnERC721 (
         });
 
         it('emits a transfer and minted event', async function () {
-          await expectEvent.inLogs(logs, 'Transfer', {
+          expectEvent.inLogs(logs, 'Transfer', {
             from: ZERO_ADDRESS,
             to: newOwner,
+            tokenId: thirdTokenId
           });
-          logs[0].args.tokenId.should.be.bignumber.equal(thirdTokenId);
         });
       });
 
@@ -87,11 +87,11 @@ function shouldBehaveLikeMintAndBurnERC721 (
         });
 
         it('emits a burn event', async function () {
-          logs.length.should.be.equal(1);
-          logs[0].event.should.be.equal('Transfer');
-          logs[0].args.from.should.be.equal(owner);
-          logs[0].args.to.should.be.equal(ZERO_ADDRESS);
-          logs[0].args.tokenId.should.be.bignumber.equal(tokenId);
+          expectEvent.inLogs(logs, 'Transfer', {
+            from: owner,
+            to: ZERO_ADDRESS,
+            tokenId: tokenId
+          });
         });
       });