DayLimit.js 3.2 KB

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