DayLimit.js 3.2 KB

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