DayLimit.test.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import latestTime from './helpers/latestTime';
  2. import { increaseTimeTo, duration } from './helpers/increaseTime';
  3. const assertRevert = require('./helpers/assertRevert');
  4. const DayLimitMock = artifacts.require('mocks/DayLimitMock.sol');
  5. contract('DayLimit', function (accounts) {
  6. let dayLimit;
  7. let initLimit = 10;
  8. beforeEach(async function () {
  9. this.startTime = latestTime();
  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. assertRevert(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. assertRevert(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. assertRevert(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. assertRevert(error);
  80. }
  81. spentToday = await dayLimit.spentToday();
  82. assert.equal(spentToday, 8);
  83. await increaseTimeTo(this.startTime + duration.days(1));
  84. await dayLimit.attemptSpend(3);
  85. spentToday = await dayLimit.spentToday();
  86. assert.equal(spentToday, 3);
  87. });
  88. });