import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; import { expect } from "chai"; import { ethers } from "hardhat"; import { MockToken, P2PIX } from "../src/types"; describe("P2PIX deposit test", () => { let owner: SignerWithAddress; let wallet2: SignerWithAddress; // let wallet3: SignerWithAddress; // let wallet4: SignerWithAddress; let p2pix: P2PIX; // Contract instance let erc20: MockToken; // Token instance it("Will deploy contracts", async () => { [owner, wallet2 /* wallet3, wallet4 */] = await ethers.getSigners(); const ERC20Factory = await ethers.getContractFactory( "MockToken", ); erc20 = await ERC20Factory.deploy( ethers.utils.parseEther("20000000"), ); await erc20.deployed(); // Check initial balance expect(await erc20.balanceOf(owner.address)).to.equal( ethers.utils.parseEther("20000000"), ); const P2PIX = await ethers.getContractFactory("P2PIX"); p2pix = await P2PIX.deploy(2, [ owner.address, wallet2.address, ]); await p2pix.deployed(); const ownerKey = await p2pix._castAddrToKey(owner.address); const wallet2Key = await p2pix._castAddrToKey(wallet2.address); // Verify values at deployment expect( await p2pix.callStatic.validBacenSigners(ownerKey), ).to.equal(true); expect( await p2pix.validBacenSigners(wallet2Key), ).to.equal(true); }); it("Should allow create a deposit", async () => { let transaction = await erc20.approve( p2pix.address, ethers.utils.parseEther("2000"), ); await expect(transaction) .to.emit(erc20, "Approval") .withArgs( owner.address, p2pix.address, ethers.utils.parseEther("2000"), ); transaction = await p2pix.deposit( erc20.address, ethers.utils.parseEther("1000"), "SELLER PIX KEY", // { value: ethers.utils.parseEther("0.1") }, ); await expect(transaction) .to.emit(p2pix, "DepositAdded") .withArgs( owner.address, 0, erc20.address, // ethers.utils.parseEther("0.1"), ethers.utils.parseEther("1000"), ); }); it("Should allow create second deposit", async () => { const transaction = await p2pix.deposit( erc20.address, ethers.utils.parseEther("1000"), "SELLER PIX KEY", // { value: ethers.utils.parseEther("0.1") }, ); await expect(transaction) .to.emit(p2pix, "DepositAdded") .withArgs( owner.address, 1, erc20.address, // ethers.utils.parseEther("0.1"), ethers.utils.parseEther("1000"), ); }); it("Should allow cancel first deposit", async () => { const transaction = await p2pix.cancelDeposit(0); await expect(transaction) .to.emit(p2pix, "DepositClosed") .withArgs(owner.address, 0); }); it("Should allow withdraw the deposit", async () => { const transaction = await p2pix.withdraw(0, []); await expect(transaction) .to.emit(p2pix, "DepositWithdrawn") .withArgs( owner.address, 0, ethers.utils.parseEther("1000"), ); }); });