-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
175 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 88 additions & 0 deletions
88
token/src/components/tests/mocks/erc721/erc721_metadata_hooks_mock.cairo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
use dojo::world::IWorldDispatcher; | ||
|
||
#[starknet::interface] | ||
// trait IERC721EnumMintBurnPreset { | ||
trait IERC721MetadataHooksMock<TContractState> { | ||
// IWorldProvider | ||
fn world(self: @TContractState,) -> IWorldDispatcher; | ||
} | ||
|
||
#[dojo::contract] | ||
mod erc721_metadata_hooks_mock { | ||
|
||
use starknet::{get_contract_address}; | ||
use token::components::token::erc721::erc721_approval::erc721_approval_component; | ||
use token::components::token::erc721::erc721_balance::erc721_balance_component; | ||
use token::components::token::erc721::erc721_metadata::erc721_metadata_component; | ||
use token::components::token::erc721::erc721_mintable::erc721_mintable_component; | ||
use token::components::token::erc721::erc721_owner::erc721_owner_component; | ||
|
||
component!( | ||
path: erc721_approval_component, storage: erc721_approval, event: ERC721ApprovalEvent | ||
); | ||
component!(path: erc721_balance_component, storage: erc721_balance, event: ERC721BalanceEvent); | ||
component!( | ||
path: erc721_metadata_component, storage: erc721_metadata, event: ERC721MetadataEvent | ||
); | ||
component!( | ||
path: erc721_mintable_component, storage: erc721_mintable, event: ERC721MintableEvent | ||
); | ||
component!(path: erc721_owner_component, storage: erc721_owner, event: ERC721OwnerEvent); | ||
|
||
#[abi(embed_v0)] | ||
impl ERC721MetadataImpl = | ||
erc721_metadata_component::ERC721MetadataImpl<ContractState>; | ||
|
||
impl ERC721ApprovalInternalImpl = erc721_approval_component::InternalImpl<ContractState>; | ||
impl ERC721BalanceInternalImpl = erc721_balance_component::InternalImpl<ContractState>; | ||
impl ERC721MetadataInternalImpl = erc721_metadata_component::InternalImpl<ContractState>; | ||
impl ERC721MintableInternalImpl = erc721_mintable_component::InternalImpl<ContractState>; | ||
impl ERC721OwnerInternalImpl = erc721_owner_component::InternalImpl<ContractState>; | ||
|
||
#[storage] | ||
struct Storage { | ||
#[substorage(v0)] | ||
erc721_approval: erc721_approval_component::Storage, | ||
#[substorage(v0)] | ||
erc721_balance: erc721_balance_component::Storage, | ||
#[substorage(v0)] | ||
erc721_metadata: erc721_metadata_component::Storage, | ||
#[substorage(v0)] | ||
erc721_mintable: erc721_mintable_component::Storage, | ||
#[substorage(v0)] | ||
erc721_owner: erc721_owner_component::Storage, | ||
} | ||
|
||
#[event] | ||
#[derive(Drop, starknet::Event)] | ||
enum Event { | ||
ERC721ApprovalEvent: erc721_approval_component::Event, | ||
ERC721BalanceEvent: erc721_balance_component::Event, | ||
ERC721MetadataEvent: erc721_metadata_component::Event, | ||
ERC721MintableEvent: erc721_mintable_component::Event, | ||
ERC721OwnerEvent: erc721_owner_component::Event | ||
} | ||
|
||
|
||
// | ||
// Metadata Hooks | ||
// | ||
use super::{IERC721MetadataHooksMockDispatcher, IERC721MetadataHooksMockDispatcherTrait}; | ||
impl ERC721MetadataHooksImpl<TContractState> of erc721_metadata_component::ERC721MetadataHooksTrait<TContractState> { | ||
fn custom_uri( | ||
self: @erc721_metadata_component::ComponentState<TContractState>, | ||
base_uri: @ByteArray, | ||
token_id: u256, | ||
) -> ByteArray { | ||
// | ||
// example on how to access the world | ||
// (does not work for testing, throws 'CONTRACT_NOT_DEPLOYED') | ||
// | ||
// let contract_address = get_contract_address(); | ||
// let selfie = IERC721MetadataHooksMockDispatcher{ contract_address }; | ||
// let _world = selfie.world(); | ||
|
||
format!("CUSTOM{}{}", base_uri, token_id) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
token/src/components/tests/token/erc721/test_erc721_metadata_hooks.cairo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
use integer::BoundedInt; | ||
use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; | ||
use dojo::test_utils::spawn_test_world; | ||
use token::tests::constants::{OWNER}; | ||
|
||
use token::components::token::erc721::erc721_metadata::{erc_721_meta_model, ERC721MetaModel,}; | ||
use token::components::token::erc721::erc721_metadata::erc721_metadata_component::{ | ||
ERC721MetadataImpl, ERC721MetadataCamelImpl, InternalImpl | ||
}; | ||
use token::components::token::erc721::erc721_mintable::erc721_mintable_component::InternalImpl as ERC721MintableInternalImpl; | ||
|
||
use token::components::tests::mocks::erc721::erc721_metadata_hooks_mock::erc721_metadata_hooks_mock; | ||
use starknet::storage::{StorageMemberAccessTrait}; | ||
|
||
|
||
fn STATE() -> (IWorldDispatcher, erc721_metadata_hooks_mock::ContractState) { | ||
let world = spawn_test_world(array![erc_721_meta_model::TEST_CLASS_HASH,]); | ||
|
||
let mut state = erc721_metadata_hooks_mock::contract_state_for_testing(); | ||
state.world_dispatcher.write(world); | ||
|
||
(world, state) | ||
} | ||
|
||
#[test] | ||
fn test_erc721_metadata_hooks_initialize() { | ||
let (_world, mut state) = STATE(); | ||
|
||
let NAME: ByteArray = "NAME"; | ||
let SYMBOL: ByteArray = "SYMBOL"; | ||
let URI: ByteArray = "URI"; | ||
|
||
state.erc721_metadata.initialize(NAME, SYMBOL, URI); | ||
|
||
assert(state.erc721_metadata.name() == "NAME", 'Should be NAME'); | ||
assert(state.erc721_metadata.symbol() == "SYMBOL", 'Should be SYMBOL'); | ||
|
||
state.erc721_mintable.mint(OWNER(), 1); | ||
assert(state.erc721_metadata.token_uri(1) == "CUSTOMURI1", 'Should be CUSTOMURI1'); | ||
assert(state.erc721_metadata.tokenURI(1) == "CUSTOMURI1", 'Should be CUSTOMURI1'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
token/src/components/token/erc721/erc721_metadata_hooks.cairo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
|
||
/// | ||
/// An empty implementation of the ERC721MetadataHooksTrait | ||
/// | ||
/// When the hook is not required, import together with the component: | ||
/// use token::components::token::erc721::erc721_metadata::erc721_metadata_component; | ||
/// use token::components::token::erc721::erc721_metadata_hooks::ERC721MetadataHooksEmptyImpl; | ||
/// | ||
/// Or implement your own (example on erc721_metadata_hooks_mock.cairo) | ||
/// | ||
|
||
use token::components::token::erc721::erc721_metadata::erc721_metadata_component; | ||
|
||
impl ERC721MetadataHooksEmptyImpl<TContractState> of erc721_metadata_component::ERC721MetadataHooksTrait<TContractState> { | ||
fn custom_uri( | ||
self: @erc721_metadata_component::ComponentState<TContractState>, | ||
base_uri: @ByteArray, | ||
token_id: u256, | ||
) -> ByteArray { "" } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters