DayLimit.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. assertJump(error);
  32. }
  33. });
  34. it('should allow spending if daily limit is reached and then set higher', async function() {
  35. await dayLimit.attemptSpend(8);
  36. let spentToday = await dayLimit.spentToday();
  37. assert.equal(spentToday, 8);
  38. try {
  39. await dayLimit.attemptSpend(3);
  40. } catch(error) {
  41. assertJump(error);
  42. }
  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. assert.equal(spentToday, 11);
  49. });
  50. it('should allow spending if daily limit is reached and then amount spent is reset', async function() {
  51. await dayLimit.attemptSpend(8);
  52. let spentToday = await dayLimit.spentToday();
  53. assert.equal(spentToday, 8);
  54. try {
  55. await dayLimit.attemptSpend(3);
  56. } catch(error) {
  57. assertJump(error);
  58. }
  59. spentToday = await dayLimit.spentToday();
  60. assert.equal(spentToday, 8);
  61. await dayLimit.resetSpentToday(15);
  62. await dayLimit.attemptSpend(3);
  63. spentToday = await dayLimit.spentToday();
  64. assert.equal(spentToday, 3);
  65. });
  66. it('should allow spending if daily limit is reached and then the next has come', async function() {
  67. let limit = 10;
  68. let dayLimit = await DayLimitMock.new(limit);
  69. await dayLimit.attemptSpend(8);
  70. let spentToday = await dayLimit.spentToday();
  71. assert.equal(spentToday, 8);
  72. try {
  73. await dayLimit.attemptSpend(3);
  74. } catch(error) {
  75. assertJump(error);
  76. }
  77. spentToday = await dayLimit.spentToday();
  78. assert.equal(spentToday, 8);
  79. await timer(day);
  80. await dayLimit.attemptSpend(3);
  81. spentToday = await dayLimit.spentToday();
  82. assert.equal(spentToday, 3);
  83. });
  84. });