diff --git a/test/helpers/test/time.test.js b/test/helpers/test/time.test.js new file mode 100644 index 00000000000..22199906c09 --- /dev/null +++ b/test/helpers/test/time.test.js @@ -0,0 +1,68 @@ +const time = require('../time'); +const shouldFail = require('../shouldFail'); +const { advanceBlock } = require('../advanceToBlock'); + +const BigNumber = web3.BigNumber; +require('chai') + .use(require('chai-bignumber')(BigNumber)) + .should(); + +describe('time', function () { + const TOLERANCE_SECONDS = 1; + + beforeEach(async function () { + await advanceBlock(); + this.start = await time.latest(); + }); + + describe('increase', function () { + it('increases time by a duration', async function () { + await time.increase(time.duration.hours(1)); + + const end = this.start + time.duration.hours(1); + (await time.latest()).should.be.closeTo(end, TOLERANCE_SECONDS); + }); + + it('throws with negative durations', async function () { + await shouldFail(time.increase(-1)); + }); + }); + + describe('increaseTo', function () { + it('increases time to a time in the future', async function () { + const end = this.start + time.duration.hours(1); + await time.increaseTo(end); + (await time.latest()).should.be.closeTo(end, TOLERANCE_SECONDS); + }); + + it('throws with a time in the past', async function () { + await shouldFail(time.increaseTo(this.start - 30)); + }); + }); + + describe('duration', function () { + it('converts seconds to seconds', function () { + time.duration.seconds(1).should.equal(1); + }); + + it('converts minutes to seconds', function () { + time.duration.minutes(1).should.equal(60); + }); + + it('converts hours to seconds', function () { + time.duration.hours(1).should.equal(60 * 60); + }); + + it('converts days to seconds', function () { + time.duration.days(1).should.equal(60 * 60 * 24); + }); + + it('converts weeks to seconds', function () { + time.duration.weeks(1).should.equal(60 * 60 * 24 * 7); + }); + + it('converts years to seconds', function () { + time.duration.years(1).should.equal(60 * 60 * 24 * 365); + }); + }); +}); diff --git a/test/helpers/time.js b/test/helpers/time.js index b7f3c000105..26109db30de 100644 --- a/test/helpers/time.js +++ b/test/helpers/time.js @@ -11,6 +11,8 @@ function increase (duration) { const id = Date.now(); return new Promise((resolve, reject) => { + if (duration < 0) throw Error(`Cannot increase time by a negative amount (${duration})`); + web3.currentProvider.sendAsync({ jsonrpc: '2.0', method: 'evm_increaseTime', @@ -40,7 +42,7 @@ function increase (duration) { async function increaseTo (target) { const now = (await latest()); - if (target < now) throw Error(`Cannot increase current time(${now}) to a moment in the past(${target})`); + if (target < now) throw Error(`Cannot increase current time (${now}) to a moment in the past (${target})`); const diff = target - now; return increase(diff); }