DayLimit.test.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import latestTime from './helpers/latestTime';
  2. import { increaseTimeTo, duration } from './helpers/increaseTime';
  3. import assertRevert from './helpers/assertRevert';
  4. const DayLimitMock = artifacts.require('mocks/DayLimitMock.sol');
  5. contract('DayLimit', function (accounts) {
  6. let dayLimit;
  7. let initLimit = 10;
  8. beforeEach(async function () {
  9. this.startTime = latestTime();
  10. dayLimit = await DayLimitMock.new(initLimit);
  11. });
  12. it('should construct with the passed daily limit', async function () {
  13. let dailyLimit = await dayLimit.dailyLimit();
  14. assert.equal(initLimit, dailyLimit);
  15. });
  16. it('should be able to spend if daily limit is not reached', async function () {
  17. await dayLimit.attemptSpend(8);
  18. let spentToday = await dayLimit.spentToday();
  19. assert.equal(spentToday, 8);
  20. await dayLimit.attemptSpend(2);
  21. spentToday = await dayLimit.spentToday();
  22. assert.equal(spentToday, 10);
  23. });
  24. it('should prevent spending if daily limit is reached', async function () {
  25. await dayLimit.attemptSpend(8);
  26. let spentToday = await dayLimit.spentToday();
  27. assert.equal(spentToday, 8);
  28. await assertRevert(dayLimit.attemptSpend(3));
  29. });
  30. it('should allow spending if daily limit is reached and then set higher', async function () {
  31. await dayLimit.attemptSpend(8);
  32. let spentToday = await dayLimit.spentToday();
  33. assert.equal(spentToday, 8);
  34. await assertRevert(dayLimit.attemptSpend(3));
  35. spentToday = await dayLimit.spentToday();
  36. assert.equal(spentToday, 8);
  37. await dayLimit.setDailyLimit(15);
  38. await dayLimit.attemptSpend(3);
  39. spentToday = await dayLimit.spentToday();
  40. assert.equal(spentToday, 11);
  41. });
  42. it('should allow spending if daily limit is reached and then amount spent is reset', async function () {
  43. await dayLimit.attemptSpend(8);
  44. let spentToday = await dayLimit.spentToday();
  45. assert.equal(spentToday, 8);
  46. await assertRevert(dayLimit.attemptSpend(3));
  47. spentToday = await dayLimit.spentToday();
  48. assert.equal(spentToday, 8);
  49. await dayLimit.resetSpentToday();
  50. await dayLimit.attemptSpend(3);
  51. spentToday = await dayLimit.spentToday();
  52. assert.equal(spentToday, 3);
  53. });
  54. it('should allow spending if daily limit is reached and then the next has come', async function () {
  55. let limit = 10;
  56. let dayLimit = await DayLimitMock.new(limit);
  57. await dayLimit.attemptSpend(8);
  58. let spentToday = await dayLimit.spentToday();
  59. assert.equal(spentToday, 8);
  60. await assertRevert(dayLimit.attemptSpend(3));
  61. spentToday = await dayLimit.spentToday();
  62. assert.equal(spentToday, 8);
  63. await increaseTimeTo(this.startTime + duration.days(1));
  64. await dayLimit.attemptSpend(3);
  65. spentToday = await dayLimit.spentToday();
  66. assert.equal(spentToday, 3);
  67. });
  68. });