DayLimit.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. let dayLimit;
  8. let initLimit = 10;
  9. beforeEach( async function() {
  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. try {
  29. await dayLimit.attemptSpend(3);
  30. assert.fail('should have thrown before');
  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. await dayLimit.attemptSpend(8);
  37. let spentToday = await dayLimit.spentToday();
  38. assert.equal(spentToday, 8);
  39. try {
  40. await dayLimit.attemptSpend(3);
  41. assert.fail('should have thrown before');
  42. } catch(error) {
  43. assertJump(error);
  44. }
  45. spentToday = await dayLimit.spentToday();
  46. assert.equal(spentToday, 8);
  47. await dayLimit.setDailyLimit(15);
  48. await dayLimit.attemptSpend(3);
  49. spentToday = await dayLimit.spentToday();
  50. assert.equal(spentToday, 11);
  51. });
  52. it('should allow spending if daily limit is reached and then amount spent is reset', async function() {
  53. await dayLimit.attemptSpend(8);
  54. let spentToday = await dayLimit.spentToday();
  55. assert.equal(spentToday, 8);
  56. try {
  57. await dayLimit.attemptSpend(3);
  58. assert.fail('should have thrown before');
  59. } catch(error) {
  60. assertJump(error);
  61. }
  62. spentToday = await dayLimit.spentToday();
  63. assert.equal(spentToday, 8);
  64. await dayLimit.resetSpentToday();
  65. await dayLimit.attemptSpend(3);
  66. spentToday = await dayLimit.spentToday();
  67. assert.equal(spentToday, 3);
  68. });
  69. it('should allow spending if daily limit is reached and then the next has come', async function() {
  70. let limit = 10;
  71. let dayLimit = await DayLimitMock.new(limit);
  72. await dayLimit.attemptSpend(8);
  73. let spentToday = await dayLimit.spentToday();
  74. assert.equal(spentToday, 8);
  75. try {
  76. await dayLimit.attemptSpend(3);
  77. assert.fail('should have thrown before');
  78. } catch(error) {
  79. assertJump(error);
  80. }
  81. spentToday = await dayLimit.spentToday();
  82. assert.equal(spentToday, 8);
  83. await timer(day);
  84. await dayLimit.attemptSpend(3);
  85. spentToday = await dayLimit.spentToday();
  86. assert.equal(spentToday, 3);
  87. });
  88. });