From c390e94da6d0198b4ff190b131aa4b212650eef7 Mon Sep 17 00:00:00 2001 From: Arseniy Klempner Date: Tue, 6 Dec 2016 11:45:02 -0800 Subject: [PATCH] Create tests for DayLimit --- contracts/test-helpers/DayLimitMock.sol | 15 ++++++ test/DayLimit.js | 72 +++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 contracts/test-helpers/DayLimitMock.sol create mode 100644 test/DayLimit.js diff --git a/contracts/test-helpers/DayLimitMock.sol b/contracts/test-helpers/DayLimitMock.sol new file mode 100644 index 000000000..6383652df --- /dev/null +++ b/contracts/test-helpers/DayLimitMock.sol @@ -0,0 +1,15 @@ +pragma solidity ^0.4.4; +import "../DayLimit.sol"; + +contract DayLimitMock is DayLimit { + uint public totalSpending; + + function DayLimitMock(uint _value, address[] _owners, uint _required) DayLimit(_value) Shareable(_owners, _required) { + totalSpending = 0; + } + + function attemptSpend(uint _value) external limitedDaily(_value) { + totalSpending += _value; + } + +} diff --git a/test/DayLimit.js b/test/DayLimit.js new file mode 100644 index 000000000..3bb93f580 --- /dev/null +++ b/test/DayLimit.js @@ -0,0 +1,72 @@ +contract('DayLimit', function(accounts) { + + it('should construct with the passed daily limit', async function() { + let initLimit = 10; + let dayLimit = await DayLimitMock.new(initLimit, accounts, 2); + let dailyLimit = await dayLimit.dailyLimit(); + assert.equal(initLimit, dailyLimit); + }); + + it('should be able to spend if daily limit is not reached', async function() { + let limit = 10; + let dayLimit = await DayLimitMock.new(limit, accounts, 1); + + await dayLimit.attemptSpend(8); + let spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + + await dayLimit.attemptSpend(2); + spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 10); + }); + + it('should prevent spending if daily limit is reached', async function() { + let limit = 10; + let dayLimit = await DayLimitMock.new(limit, accounts, 1); + + await dayLimit.attemptSpend(8); + let spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + + await dayLimit.attemptSpend(3); + spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + }); + + it('should allow spending if daily limit is reached and then set higher', async function() { + let limit = 10; + let dayLimit = await DayLimitMock.new(limit, accounts, 1); + + await dayLimit.attemptSpend(8); + let spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + + await dayLimit.attemptSpend(3); + spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + + await dayLimit.setDailyLimit(15); + await dayLimit.attemptSpend(3); + spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 11); + }); + + it('should allow spending if daily limit is reached and then amount spent is reset', async function() { + let limit = 10; + let dayLimit = await DayLimitMock.new(limit, accounts, 1); + + await dayLimit.attemptSpend(8); + let spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + + await dayLimit.attemptSpend(3); + spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 8); + + await dayLimit.resetSpentToday(15); + await dayLimit.attemptSpend(3); + spentToday = await dayLimit.spentToday(); + assert.equal(spentToday, 3); + }); + +});