#![cfg(feature = "test-sbf")]
pub mod setup;
pub use setup::*;
use mpl_bubblegum::types::{
Creator, MetadataArgs, MetadataArgsV2, TokenProgramVersion, TokenStandard,
};
use solana_program_test::tokio;
use solana_sdk::signature::Keypair;
use solana_sdk::signature::Signer;
mod transfer {
use super::*;
#[tokio::test]
async fn transfer_asset() {
let mut program_test = create_program_test();
program_test.set_compute_max_units(400_000);
let mut context = program_test.start_with_context().await;
let mut tree_manager = TreeManager::<5, 8>::default();
tree_manager.create(&mut context).await.unwrap();
let mut assets = vec![];
for _ in 0..10 {
let owner = Keypair::new();
let metadata = MetadataArgs {
name: String::from("cNFT"),
uri: String::from("https://c.nft"),
symbol: String::from("cNFT"),
creators: vec![Creator {
address: context.payer.pubkey(),
share: 100,
verified: false,
}],
edition_nonce: None,
is_mutable: true,
primary_sale_happened: true,
seller_fee_basis_points: 500,
token_program_version: TokenProgramVersion::Original,
token_standard: Some(TokenStandard::NonFungible),
collection: None,
uses: None,
};
let owner_pubkey = owner.pubkey();
assets.push((
owner,
tree_manager
.mint(&mut context, owner_pubkey, metadata)
.await
.unwrap(),
));
}
let receiver = Keypair::new().pubkey();
let (owner, asset) = assets.pop().unwrap();
let leaf = tree_manager
.transfer(&mut context, &owner, receiver, &asset)
.await
.unwrap();
assert_eq!(leaf.owner(), receiver);
tree_manager.assert_root(&mut context).await;
}
#[tokio::test]
async fn transfer_v2_asset() {
let mut program_test = create_program_test();
program_test.set_compute_max_units(400_000);
let mut context = program_test.start_with_context().await;
let mut tree_manager = TreeManager::<5, 8>::default();
tree_manager.create_v2(&mut context).await.unwrap();
let mut assets = vec![];
for _ in 0..10 {
let owner = Keypair::new();
let metadata = MetadataArgsV2 {
name: String::from("cNFT"),
symbol: String::from("cNFT"),
uri: String::from("https://c.nft"),
seller_fee_basis_points: 500,
primary_sale_happened: true,
is_mutable: true,
token_standard: Some(TokenStandard::NonFungible),
creators: vec![Creator {
address: context.payer.pubkey(),
share: 100,
verified: false,
}],
collection: None,
};
let owner_pubkey = owner.pubkey();
assets.push((
owner,
tree_manager
.mint_v2(&mut context, owner_pubkey, metadata)
.await
.unwrap(),
));
}
let receiver = Keypair::new().pubkey();
let (owner, asset) = assets.pop().unwrap();
let leaf = tree_manager
.transfer_v2(&mut context, &owner, receiver, &asset)
.await
.unwrap();
assert_eq!(leaf.owner(), receiver);
tree_manager.assert_root(&mut context).await;
}
}