From b5abf844bcf91914ca64324d10b26b3be7ed5b6b Mon Sep 17 00:00:00 2001 From: Alex Metelli Date: Fri, 12 Jan 2024 06:48:54 +0800 Subject: [PATCH] Added Test for TM ERC721 --- .github/workflows/test.yml | 2 +- flex_marketplace/src/lib.cairo | 7 ++- flex_marketplace/src/mocks/erc721.cairo | 20 +++++++++ .../tests/transfer_manager_erc721_test.cairo | 44 +++++++++++++------ flex_marketplace/tests/utils.cairo | 9 ++++ 5 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 flex_marketplace/src/mocks/erc721.cairo diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d0709c6..97b79c6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,7 +4,7 @@ on: [push, pull_request] env: SCARB_VERSION: 2.4.0 - SNFORGE_VERSION: 0.13.0 + SNFORGE_VERSION: 0.13.1 jobs: check: diff --git a/flex_marketplace/src/lib.cairo b/flex_marketplace/src/lib.cairo index aaae449..4afd9e6 100644 --- a/flex_marketplace/src/lib.cairo +++ b/flex_marketplace/src/lib.cairo @@ -1,8 +1,9 @@ use core::fmt::{Display, Error, Formatter, Debug}; +use starknet::contract_address_to_felt252; impl DisplayContractAddress of Display { fn fmt(self: @starknet::ContractAddress, ref f: Formatter) -> Result<(), Error> { - write!(f, "{}", *self) + write!(f, "{}", contract_address_to_felt252(*self)) } } @@ -49,3 +50,7 @@ mod marketplace { mod transfer_manager_ERC1155; mod transfer_selector_NFT; } + +mod mocks { + mod erc721; +} diff --git a/flex_marketplace/src/mocks/erc721.cairo b/flex_marketplace/src/mocks/erc721.cairo new file mode 100644 index 0000000..74e05c4 --- /dev/null +++ b/flex_marketplace/src/mocks/erc721.cairo @@ -0,0 +1,20 @@ +#[starknet::interface] +trait IER721CamelOnly { + fn transferFrom(ref self: TState, from: starknet::ContractAddress, to: starknet::ContractAddress, token_id: u256); +} + +#[starknet::contract] +mod ERC721 { + use starknet::{ContractAddress, get_caller_address}; + + #[storage] + struct Storage { + } + + #[external(v0)] + impl IERC721CamelOnlyImpl of super::IER721CamelOnly{ + fn transferFrom(ref self: ContractState, from: starknet::ContractAddress, to: starknet::ContractAddress, token_id: u256) {} + } + + +} diff --git a/flex_marketplace/tests/transfer_manager_erc721_test.cairo b/flex_marketplace/tests/transfer_manager_erc721_test.cairo index 981a1a2..33e7b42 100644 --- a/flex_marketplace/tests/transfer_manager_erc721_test.cairo +++ b/flex_marketplace/tests/transfer_manager_erc721_test.cairo @@ -1,33 +1,51 @@ -use tests::utils::{setup, initialize_test}; +use snforge_std::{start_prank, stop_prank, PrintTrait, CheatTarget}; +use tests::utils::{setup, initialize_test, deploy_mock_nft, ACCOUNT1, ACCOUNT2, OWNER, ZERO_ADDRESS}; +use flex::marketplace::transfer_manager_ERC721::{ITransferManagerNFTDispatcher, ITransferManagerNFTDispatcherTrait}; + +const TOKEN_ID: u256 = 1; #[test] fn test_transfer_non_fungible_token_success() { let dsp = setup(); initialize_test(dsp); -// TODO + let collection = deploy_mock_nft(); + + start_prank( + CheatTarget::One(dsp.transfer_manager_erc721.contract_address), + dsp.marketplace.contract_address + ); + dsp + .transfer_manager_erc721 + .transfer_non_fungible_token(collection, ACCOUNT1(), ACCOUNT2(), TOKEN_ID, 1); } #[test] -#[should_panic()] +#[should_panic(expected: ("TransferManagerNFT: caller 0 is not MarketPlace", ))] fn test_transfer_non_fungible_token_fails_caller_not_marketplace() { let dsp = setup(); initialize_test(dsp); - assert(false, ''); -// TODO + let collection = deploy_mock_nft(); + + start_prank(CheatTarget::One(dsp.transfer_manager_erc721.contract_address), ZERO_ADDRESS()); + dsp + .transfer_manager_erc721 + .transfer_non_fungible_token( + collection, ACCOUNT1(), ACCOUNT2(), TOKEN_ID, 1 + ); } #[test] fn test_update_marketplace_success() { let dsp = setup(); initialize_test(dsp); -// TODO -} + let collection = deploy_mock_nft(); + let new_marketplace = starknet::contract_address_const::<'new_marketplace'>(); + start_prank(CheatTarget::One(dsp.transfer_manager_erc721.contract_address), dsp.marketplace.contract_address); + dsp.transfer_manager_erc721.update_marketplace(new_marketplace); -// TESTS VIEWSqs -#[test] -fn test_get_marketplace() { - let dsp = setup(); - initialize_test(dsp); -// TODO + let actual_marketplace = dsp.transfer_manager_erc721.get_marketplace(); + + assert(actual_marketplace == new_marketplace, 'update marketplace failed'); } + diff --git a/flex_marketplace/tests/utils.cairo b/flex_marketplace/tests/utils.cairo index 045e2e2..f8c6430 100644 --- a/flex_marketplace/tests/utils.cairo +++ b/flex_marketplace/tests/utils.cairo @@ -33,6 +33,7 @@ use flex::marketplace::{ TransferSelectorNFT, ITransferSelectorNFTDispatcher, ITransferSelectorNFTDispatcherTrait }, }; +use flex::mocks::erc721::ERC721; const HASH_DOMAIN: felt252 = 'HASH_DOMAIN'; const FEE_LIMIT: u128 = 1_000; @@ -71,6 +72,9 @@ fn ACCOUNT4() -> ContractAddress { fn PROXY_ADMIN() -> ContractAddress { contract_address_const::<'PROXY_ADMIN'>() } +fn ZERO_ADDRESS() -> ContractAddress { + contract_address_const::<0>() +} fn setup() -> Dispatchers { let contract = declare('MarketPlace'); @@ -155,6 +159,11 @@ fn initialize_test(dsp: Dispatchers) { dsp.transfer_manager_erc1155.initializer(dsp.marketplace.contract_address, OWNER()); } +fn deploy_mock_nft() -> ContractAddress { + let contract = declare('ERC721'); + contract.deploy(@array![]).expect('failed ERC721') +} + #[test] fn deploy_test() { let dsp = setup();