#![cfg(all(feature = "proc-macros", feature = "metaplex"))]
use hopper::prelude::*;
#[hopper::context]
#[instruction(
_name: &'static str,
_symbol: &'static str,
_uri: &'static str,
_sfbp: u16,
_max_supply: u64,
)]
pub struct MintNft {
#[account(signer, mut)]
pub authority: AccountView,
#[account(mut)]
pub mint: AccountView,
#[account(
metadata::mint = mint,
metadata::mint_authority = authority,
metadata::payer = authority,
metadata::update_authority = authority,
metadata::system_program = system_program,
metadata::name = _name,
metadata::symbol = _symbol,
metadata::uri = _uri,
metadata::seller_fee_basis_points = _sfbp,
metadata::is_mutable = true,
)]
pub metadata: AccountView,
#[account(
master_edition::mint = mint,
master_edition::metadata = metadata,
master_edition::update_authority = authority,
master_edition::mint_authority = authority,
master_edition::payer = authority,
master_edition::token_program = token_program,
master_edition::system_program = system_program,
master_edition::max_supply = _max_supply,
)]
pub master_edition: AccountView,
pub token_program: AccountView,
pub system_program: AccountView,
}
#[test]
fn metaplex_data_v2_context_validation_accepts_limits() {
hopper::hopper_metaplex::DataV2::simple(
"01234567890123456789012345678901",
"SYMBOL1234",
"https://example.com/nft.json",
500,
)
.validate_for_context()
.unwrap();
}
#[test]
fn master_edition_max_supply_accepts_u64_and_option() {
let finite: Option<u64> =
hopper::hopper_metaplex::IntoMasterEditionMaxSupply::into_master_edition_max_supply(0u64);
let unlimited: Option<u64> =
hopper::hopper_metaplex::IntoMasterEditionMaxSupply::into_master_edition_max_supply(
None::<u64>,
);
assert_eq!(finite, Some(0));
assert_eq!(unlimited, None);
}