DayLimit.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. 'use strict';
  2. const assertJump = require('./helpers/assertJump');
  3. const timer = require('./helpers/timer');
  4. var DayLimitMock = artifacts.require('./helpers/DayLimitMock.sol');
  5. contract('DayLimit', function(accounts) {
  6. const day = 60 * 60 * 24;
  7. it('should construct with the passed daily limit', async function() {
  8. let initLimit = 10;
  9. let dayLimit = await DayLimitMock.new(initLimit);
  10. let dailyLimit = await dayLimit.dailyLimit();
  11. assert.equal(initLimit, dailyLimit);
  12. });
  13. it('should be able to spend if daily limit is not reached', async function() {
  14. let limit = 10;
  15. let dayLimit = await DayLimitMock.new(limit);
  16. await dayLimit.attemptSpend(8);
  17. let spentToday = await dayLimit.spentToday();
  18. assert.equal(spentToday, 8);
  19. await dayLimit.attemptSpend(2);
  20. spentToday = await dayLimit.spentToday();
  21. assert.equal(spentToday, 10);
  22. });
  23. it('should prevent spending if daily limit is reached', async function() {
  24. let limit = 10;
  25. let dayLimit = await DayLimitMock.new(limit);
  26. await dayLimit.attemptSpend(8);
  27. let spentToday = await dayLimit.spentToday();
  28. assert.equal(spentToday, 8);
  29. try {
  30. await dayLimit.attemptSpend(3);
  31. } catch(error) {
  32. assertJump(error);
  33. }
  34. });
  35. it('should allow spending if daily limit is reached and then set higher', async function() {
  36. let limit = 10;
  37. let dayLimit = await DayLimitMock.new(limit);
  38. await dayLimit.attemptSpend(8);
  39. let spentToday = await dayLimit.spentToday();
  40. assert.equal(spentToday, 8);
  41. try {
  42. await dayLimit.attemptSpend(3);
  43. } catch(error) {
  44. assertJump(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. let limit = 10;
  55. let dayLimit = await DayLimitMock.new(limit);
  56. await dayLimit.attemptSpend(8);
  57. let spentToday = await dayLimit.spentToday();
  58. assert.equal(spentToday, 8);
  59. try {
  60. await dayLimit.attemptSpend(3);
  61. } catch(error) {
  62. assertJump(error);
  63. }
  64. spentToday = await dayLimit.spentToday();
  65. assert.equal(spentToday, 8);
  66. await dayLimit.resetSpentToday(15);
  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. } catch(error) {
  80. assertJump(error);
  81. }
  82. spentToday = await dayLimit.spentToday();
  83. assert.equal(spentToday, 8);
  84. await timer(day);
  85. await dayLimit.attemptSpend(3);
  86. spentToday = await dayLimit.spentToday();
  87. assert.equal(spentToday, 3);
  88. });
  89. });