PullPayment.test.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const BigNumber = web3.BigNumber;
  2. require('chai')
  3. .use(require('chai-bignumber')(BigNumber))
  4. .should();
  5. const PullPaymentMock = artifacts.require('PullPaymentMock');
  6. contract('PullPayment', function (accounts) {
  7. const amount = web3.toWei(17.0, 'ether');
  8. beforeEach(async function () {
  9. this.contract = await PullPaymentMock.new({ value: amount });
  10. });
  11. it('can\'t call asyncSend externally', async function () {
  12. assert.isUndefined(this.contract.asyncSend);
  13. });
  14. it('can record an async payment correctly', async function () {
  15. const AMOUNT = 100;
  16. await this.contract.callTransfer(accounts[0], AMOUNT);
  17. const paymentsToAccount0 = await this.contract.payments(accounts[0]);
  18. paymentsToAccount0.should.be.bignumber.equal(AMOUNT);
  19. });
  20. it('can add multiple balances on one account', async function () {
  21. await this.contract.callTransfer(accounts[0], 200);
  22. await this.contract.callTransfer(accounts[0], 300);
  23. const paymentsToAccount0 = await this.contract.payments(accounts[0]);
  24. paymentsToAccount0.should.be.bignumber.equal(500);
  25. });
  26. it('can add balances on multiple accounts', async function () {
  27. await this.contract.callTransfer(accounts[0], 200);
  28. await this.contract.callTransfer(accounts[1], 300);
  29. const paymentsToAccount0 = await this.contract.payments(accounts[0]);
  30. paymentsToAccount0.should.be.bignumber.equal(200);
  31. const paymentsToAccount1 = await this.contract.payments(accounts[1]);
  32. paymentsToAccount1.should.be.bignumber.equal(300);
  33. });
  34. it('can withdraw payment', async function () {
  35. const payee = accounts[1];
  36. const initialBalance = web3.eth.getBalance(payee);
  37. await this.contract.callTransfer(payee, amount);
  38. const payment1 = await this.contract.payments(payee);
  39. payment1.should.be.bignumber.equal(amount);
  40. await this.contract.withdrawPayments({ from: payee });
  41. const payment2 = await this.contract.payments(payee);
  42. payment2.should.be.bignumber.equal(0);
  43. const balance = web3.eth.getBalance(payee);
  44. Math.abs(balance - initialBalance - amount).should.be.lt(1e16);
  45. });
  46. });