diff --git a/flex_marketplace/src/lib.cairo b/flex_marketplace/src/lib.cairo index 986d1f2..2e5fb18 100644 --- a/flex_marketplace/src/lib.cairo +++ b/flex_marketplace/src/lib.cairo @@ -53,4 +53,5 @@ mod marketplace { mod mocks { mod erc1155; + mod erc721; } diff --git a/flex_marketplace/src/mocks/erc721.cairo b/flex_marketplace/src/mocks/erc721.cairo new file mode 100644 index 0000000..a2db45a --- /dev/null +++ b/flex_marketplace/src/mocks/erc721.cairo @@ -0,0 +1,27 @@ +#[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..dba362e 100644 --- a/flex_marketplace/tests/transfer_manager_erc721_test.cairo +++ b/flex_marketplace/tests/transfer_manager_erc721_test.cairo @@ -1,33 +1,56 @@ -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 2f9cff0..a0e5e48 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; use flex::mocks::erc1155::ERC1155; @@ -165,6 +166,11 @@ fn deploy_mock_1155() -> ContractAddress { contract.deploy(@array![]).expect('failed marketplace') } +fn deploy_mock_nft() -> ContractAddress { + let contract = declare('ERC721'); + contract.deploy(@array![]).expect('failed ERC721') +} + #[test] fn deploy_test() { let dsp = setup();