DayLimit.js 3.1 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. } catch(error) {
  31. return assertJump(error);
  32. }
  33. assert.fail('should have thrown before');
  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. } catch(error) {
  42. assertJump(error);
  43. spentToday = await dayLimit.spentToday();
  44. assert.equal(spentToday, 8);
  45. await dayLimit.setDailyLimit(15);
  46. await dayLimit.attemptSpend(3);
  47. spentToday = await dayLimit.spentToday();
  48. return assert.equal(spentToday, 11);
  49. }
  50. assert.fail('should have thrown before');
  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. } catch(error) {
  59. assertJump(error);
  60. spentToday = await dayLimit.spentToday();
  61. assert.equal(spentToday, 8);
  62. await dayLimit.resetSpentToday(15);
  63. await dayLimit.attemptSpend(3);
  64. spentToday = await dayLimit.spentToday();
  65. return assert.equal(spentToday, 3);
  66. }
  67. assert.fail('should have thrown before');
  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. } catch(error) {
  78. assertJump(error);
  79. spentToday = await dayLimit.spentToday();
  80. assert.equal(spentToday, 8);
  81. await timer(day);
  82. await dayLimit.attemptSpend(3);
  83. spentToday = await dayLimit.spentToday();
  84. return assert.equal(spentToday, 3);
  85. }
  86. assert.fail('should have thrown before');
  87. });
  88. });