From 1348579963105fa879371b7af552f3e1e04ee060 Mon Sep 17 00:00:00 2001 From: Nenad Date: Fri, 20 Sep 2024 10:43:29 +0200 Subject: [PATCH] Add additional failure tests --- examples/safe-erc20/tests/safe-erc20.rs | 46 ++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/examples/safe-erc20/tests/safe-erc20.rs b/examples/safe-erc20/tests/safe-erc20.rs index 38dfd01b..997d747d 100644 --- a/examples/safe-erc20/tests/safe-erc20.rs +++ b/examples/safe-erc20/tests/safe-erc20.rs @@ -2,7 +2,7 @@ use alloy::primitives::uint; use alloy_primitives::U256; -use e2e::{receipt, watch, Account, ReceiptExt}; +use e2e::{receipt, send, watch, Account, ReceiptExt, Revert}; use abi::SafeErc20; use mock::{erc20, erc20::ERC20Mock}; @@ -45,3 +45,47 @@ async fn safe_transfers(alice: Account, bob: Account) -> eyre::Result<()> { Ok(()) } + +#[e2e::test] +async fn safe_transfer_rejects_with_eoa_as_token( + alice: Account, + bob: Account, +) -> eyre::Result<()> { + let contract_addr = alice.as_deployer().deploy().await?.address()?; + let contract_alice = SafeErc20::new(contract_addr, &alice.wallet); + let alice_addr = bob.address(); + let bob_addr = bob.address(); + + let value = uint!(1_U256); + + let err = send!(contract_alice.safeTransfer(alice_addr, bob_addr, value)) + .expect_err("should not be able to invoke 'transfer' on EOA"); + assert!(err.reverted_with(SafeErc20::SafeErc20FailedOperation { + token: bob_addr + })); + + Ok(()) +} + +#[e2e::test] +async fn safe_transfer_rejects_insufficient_balance( + alice: Account, + bob: Account, +) -> eyre::Result<()> { + let contract_addr = alice.as_deployer().deploy().await?.address()?; + let contract_alice = SafeErc20::new(contract_addr, &alice.wallet); + let bob_addr = bob.address(); + + let value = uint!(1_U256); + + let erc20_address = erc20::deploy(&alice.wallet).await?; + + let err = + send!(contract_alice.safeTransfer(erc20_address, bob_addr, value)) + .expect_err("should not transfer when insufficient balance"); + assert!(err.reverted_with(SafeErc20::SafeErc20FailedOperation { + token: erc20_address + })); + + Ok(()) +}