diff --git a/flex_marketplace/src/lib.cairo b/flex_marketplace/src/lib.cairo index aaae449..17d8e2a 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)) } } diff --git a/flex_marketplace/src/marketplace/transfer_selector_NFT.cairo b/flex_marketplace/src/marketplace/transfer_selector_NFT.cairo index b1b776d..cdb4130 100644 --- a/flex_marketplace/src/marketplace/transfer_selector_NFT.cairo +++ b/flex_marketplace/src/marketplace/transfer_selector_NFT.cairo @@ -1,5 +1,6 @@ use starknet::ContractAddress; + #[starknet::interface] trait ITransferSelectorNFT { fn initializer( @@ -123,7 +124,7 @@ mod TransferSelectorNFT { let transfer_manager = self.transfer_manager_selector_for_collection.read(collection); assert!( !transfer_manager.is_zero(), - "TransferSelectorNFT: invalid transfer manager {}", + "TransferSelectorNFT: tried to remove an invalid transfer manager: {}", transfer_manager ); self @@ -138,10 +139,12 @@ mod TransferSelectorNFT { } fn update_TRANSFER_MANAGER_ERC721(ref self: ContractState, manager: ContractAddress) { + self.ownable.assert_only_owner(); self.TRANSFER_MANAGER_ERC721.write(manager); } fn update_TRANSFER_MANAGER_ERC1155(ref self: ContractState, manager: ContractAddress) { + self.ownable.assert_only_owner(); self.TRANSFER_MANAGER_ERC1155.write(manager); } diff --git a/flex_marketplace/tests/transfer_selector_nft_test.cairo b/flex_marketplace/tests/transfer_selector_nft_test.cairo index 1e4644f..023f424 100644 --- a/flex_marketplace/tests/transfer_selector_nft_test.cairo +++ b/flex_marketplace/tests/transfer_selector_nft_test.cairo @@ -1,58 +1,107 @@ -use tests::utils::{setup, initialize_test}; +use starknet::{ContractAddress, contract_address_const}; +use snforge_std::{start_prank, CheatTarget}; +use flex::marketplace::transfer_selector_NFT::{ + TransferSelectorNFT, ITransferSelectorNFTDispatcher, ITransferSelectorNFTDispatcherTrait +}; +use tests::utils::{setup, initialize_test, OWNER, ZERO_ADDRESS, ACCOUNT1}; + +fn COLLECTION() -> ContractAddress { + contract_address_const::<'COLLECTION'>() +} #[test] fn test_add_collection_transfer_manager_success() { let dsp = setup(); initialize_test(dsp); -// TODO + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp + .transfer_selector + .add_collection_transfer_manager( + COLLECTION(), dsp.transfer_manager_erc721.contract_address + ); + + let actual_transfer_manager = dsp + .transfer_selector + .get_transfer_manager_selector_for_collection(COLLECTION()); + assert!( + actual_transfer_manager == dsp.transfer_manager_erc721.contract_address, + "Wrong transfer manager set" + ); } #[test] -#[should_panic()] +#[should_panic(expected: ("TransferSelectorNFT: invalid collection 0",))] fn test_add_collection_transfer_manager_fails_invalid_collection() { let dsp = setup(); initialize_test(dsp); - assert(false, ''); -// TODO + + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp + .transfer_selector + .add_collection_transfer_manager( + ZERO_ADDRESS(), dsp.transfer_manager_erc721.contract_address + ); } #[test] -#[should_panic()] +#[should_panic(expected: ("TransferSelectorNFT: invalid transfer manager 0",))] fn test_add_collection_transfer_manager_fails_invalid_transfer_manager() { let dsp = setup(); initialize_test(dsp); - assert(false, ''); -// TODO + + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp.transfer_selector.add_collection_transfer_manager(COLLECTION(), ZERO_ADDRESS()); } #[test] fn test_remove_collection_transfer_manager_success() { let dsp = setup(); initialize_test(dsp); -// TODO + + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp + .transfer_selector + .add_collection_transfer_manager( + COLLECTION(), dsp.transfer_manager_erc721.contract_address + ); + + dsp.transfer_selector.remove_collection_transfer_manager(COLLECTION()); + let actual_transfer_manager = dsp + .transfer_selector + .get_transfer_manager_selector_for_collection(COLLECTION()); + assert!(actual_transfer_manager == ZERO_ADDRESS(), "Wrong transfer manager removed"); } #[test] -#[should_panic()] +#[should_panic(expected: ("TransferSelectorNFT: tried to remove an invalid transfer manager: 0",))] fn test_remove_collection_transfer_manager_fails_invalid_transfer_manager() { let dsp = setup(); initialize_test(dsp); - assert(false, ''); -// TODO + + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp.transfer_selector.remove_collection_transfer_manager(COLLECTION()); } #[test] fn test_update_TRANSFER_MANAGER_ERC721_success() { let dsp = setup(); initialize_test(dsp); -// TODO + + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp.transfer_selector.update_TRANSFER_MANAGER_ERC721(ACCOUNT1()); + let new_manager = dsp.transfer_selector.get_TRANSFER_MANAGER_ERC721(); + assert(new_manager == ACCOUNT1(), 'wrong new manager'); } #[test] fn test_update_TRANSFER_MANAGER_ERC1155_success() { let dsp = setup(); initialize_test(dsp); -// TODO + + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp.transfer_selector.update_TRANSFER_MANAGER_ERC1155(ACCOUNT1()); + let new_manager = dsp.transfer_selector.get_TRANSFER_MANAGER_ERC1155(); + assert(new_manager == ACCOUNT1(), 'wrong new manager'); } // TESTS VIEWS @@ -60,36 +109,32 @@ fn test_update_TRANSFER_MANAGER_ERC1155_success() { fn test_get_INTERFACE_ID_ERC721() { let dsp = setup(); initialize_test(dsp); -// TODO + + assert!(dsp.transfer_selector.get_INTERFACE_ID_ERC721() == 0x80ac58cd, "wrong interface 721"); } + #[test] fn test_get_INTERFACE_ID_ERC1155() { let dsp = setup(); initialize_test(dsp); -// TODO -} -#[test] -fn test_get_TRANSFER_MANAGER_ERC721() { - let dsp = setup(); - initialize_test(dsp); -// TODO -} -#[test] -fn test_get_TRANSFER_MANAGER_ERC1155() { - let dsp = setup(); - initialize_test(dsp); -// TODO -} -#[test] -fn test_get_transfer_manager_selector_for_collection() { - let dsp = setup(); - initialize_test(dsp); -// TODO + + assert!(dsp.transfer_selector.get_INTERFACE_ID_ERC1155() == 0xd9b67a26, "wrong interface 1155"); } + #[test] fn test_check_transfer_manager_for_token() { let dsp = setup(); initialize_test(dsp); -// TODO + start_prank(CheatTarget::One(dsp.transfer_selector.contract_address), OWNER()); + dsp + .transfer_selector + .add_collection_transfer_manager( + COLLECTION(), dsp.transfer_manager_erc721.contract_address + ); + + let actual_manager = dsp.transfer_selector.check_transfer_manager_for_token(COLLECTION()); + assert( + actual_manager == dsp.transfer_manager_erc721.contract_address, 'wrong transfer manager' + ); } diff --git a/flex_marketplace/tests/utils.cairo b/flex_marketplace/tests/utils.cairo index 045e2e2..ecf1b5f 100644 --- a/flex_marketplace/tests/utils.cairo +++ b/flex_marketplace/tests/utils.cairo @@ -71,6 +71,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'); @@ -143,9 +146,9 @@ fn initialize_test(dsp: Dispatchers) { dsp .transfer_selector .initializer( - PROXY_ADMIN(), dsp.transfer_manager_erc721.contract_address, - dsp.transfer_manager_erc1155.contract_address + dsp.transfer_manager_erc1155.contract_address, + OWNER(), ); // Initialise TransferManagerNFT dsp