UNPKG

@etherspot/contracts

Version:

Etherspot Solidity contracts

180 lines (179 loc) 8.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const hardhat_1 = require("hardhat"); const shared_1 = require("../shared"); const { getSigners, provider } = hardhat_1.ethers; describe('WrappedWeiToken', () => { let signers; let wrappedWeiToken; before(async () => { signers = await getSigners(); wrappedWeiToken = await (0, shared_1.deployContract)('WrappedWeiToken'); }); context('fallback()', () => { let owner; before(() => { owner = signers.pop(); }); it('expect to mint tokens', async () => { const amount = 1000; await (0, shared_1.processTx)(owner.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); await expect(wrappedWeiToken.balanceOf(owner.address)).resolves.toBeBN(amount); }); }); context('depositTo()', () => { let sender; before(() => { sender = signers.pop(); wrappedWeiToken = wrappedWeiToken.connect(sender); }); it('expect to mint tokens to holder', async () => { const owner = (0, shared_1.randomAddress)(); const amount = 1000; const { events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.depositTo(owner, { value: amount, })); expect(event.event).toBe('Transfer'); expect(event.args.from).toBeZeroAddress(); expect(event.args.to).toBe(owner); expect(event.args.value).toBeBN(amount); await expect(wrappedWeiToken.balanceOf(owner)).resolves.toBeBN(amount); }); }); context('withdraw()', () => { let owner; let amount = 1000; before(async () => { owner = signers.pop(); wrappedWeiToken = wrappedWeiToken.connect(owner); await (0, shared_1.processTx)(owner.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); }); it('expect to withdraw amount of wei', async () => { const value = 400; const balance = await owner.getBalance(); const { totalCost, events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.withdraw(value)); amount -= value; expect(event.event).toBe('Transfer'); expect(event.args.from).toBe(owner.address); expect(event.args.to).toBeZeroAddress(); expect(event.args.value).toBeBN(value); await expect(wrappedWeiToken.balanceOf(owner.address)).resolves.toBeBN(amount); await expect(owner.getBalance()).resolves.toBeBN(balance.sub(totalCost).add(value)); }); }); context('withdrawTo()', () => { let sender; let amount = 1000; before(async () => { sender = signers.pop(); wrappedWeiToken = wrappedWeiToken.connect(sender); await (0, shared_1.processTx)(sender.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); }); it('expect to withdraw amount of wei to address', async () => { const owner = (0, shared_1.randomAddress)(); const value = 400; const { events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.withdrawTo(owner, value)); amount -= value; expect(event.event).toBe('Transfer'); expect(event.args.from).toBe(sender.address); expect(event.args.to).toBeZeroAddress(); expect(event.args.value).toBeBN(value); await expect(wrappedWeiToken.balanceOf(sender.address)).resolves.toBeBN(amount); await expect(provider.getBalance(owner)).resolves.toBeBN(value); }); }); context('withdrawAll()', () => { const amount = 1000; let owner; before(async () => { owner = signers.pop(); wrappedWeiToken = wrappedWeiToken.connect(owner); await (0, shared_1.processTx)(owner.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); }); it('expect to withdraw all wei', async () => { const balance = await owner.getBalance(); const { totalCost, events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.withdrawAll()); expect(event.event).toBe('Transfer'); expect(event.args.from).toBe(owner.address); expect(event.args.to).toBeZeroAddress(); expect(event.args.value).toBeBN(amount); await expect(wrappedWeiToken.balanceOf(owner.address)).resolves.toBeBN(0); await expect(owner.getBalance()).resolves.toBeBN(balance.sub(totalCost).add(amount)); }); }); context('withdrawAllTo()', () => { let sender; const amount = 1000; before(async () => { sender = signers.pop(); wrappedWeiToken = wrappedWeiToken.connect(sender); await (0, shared_1.processTx)(sender.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); }); it('expect to withdraw all wei to address', async () => { const owner = (0, shared_1.randomAddress)(); const { events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.withdrawAllTo(owner)); expect(event.event).toBe('Transfer'); expect(event.args.from).toBe(sender.address); expect(event.args.to).toBeZeroAddress(); expect(event.args.value).toBeBN(amount); await expect(wrappedWeiToken.balanceOf(sender.address)).resolves.toBeBN(0); await expect(provider.getBalance(owner)).resolves.toBeBN(amount); }); }); context('transfer()', () => { const amount = 1000; let senderA; let senderB; let consumer; let consumerBalance; before(async () => { senderA = signers.pop(); senderB = signers.pop(); consumer = signers.pop(); await (0, shared_1.processTx)(senderA.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); await (0, shared_1.processTx)(senderB.sendTransaction({ to: wrappedWeiToken.address, value: amount, })); await (0, shared_1.processTx)(wrappedWeiToken.connect(consumer).startConsuming()); consumerBalance = await consumer.getBalance(); }); it('expect to transfer tokens to recipient', async () => { const recipient = (0, shared_1.randomAddress)(); const { events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.connect(senderA).transfer(recipient, amount)); expect(event.event).toBe('Transfer'); expect(event.args.from).toBe(senderA.address); expect(event.args.to).toBe(recipient); expect(event.args.value).toBeBN(amount); await expect(wrappedWeiToken.balanceOf(senderA.address)).resolves.toBeBN(0); await expect(wrappedWeiToken.balanceOf(recipient)).resolves.toBeBN(amount); }); it('expect to withdraw when transfer to consumer', async () => { const { events: [event], } = await (0, shared_1.processTx)(wrappedWeiToken.connect(senderB).transfer(consumer.address, amount)); expect(event.event).toBe('Transfer'); expect(event.args.from).toBe(senderB.address); expect(event.args.to).toBeZeroAddress(); expect(event.args.value).toBeBN(amount); await expect(wrappedWeiToken.balanceOf(senderB.address)).resolves.toBeBN(0); await expect(consumer.getBalance()).resolves.toBeBN(consumerBalance.add(amount)); }); }); });