#![cfg(feature = "test-sbf")] pub mod setup; use mpl_core::types::{Creator, Plugin, PluginAuthority, PluginAuthorityPair, Royalties, RuleSet}; pub use setup::*; use solana_program_test::tokio; use solana_sdk::{native_token::LAMPORTS_PER_SOL, signature::Keypair, signer::Signer}; #[tokio::test] async fn test_create_collection() { let mut context = program_test().start_with_context().await; let collection = Keypair::new(); create_collection( &mut context, CreateCollectionHelperArgs { collection: &collection, update_authority: None, payer: None, name: None, uri: None, plugins: vec![], external_plugin_adapters: vec![], }, ) .await .unwrap(); let update_authority = context.payer.pubkey(); assert_collection( &mut context, AssertCollectionHelperArgs { collection: collection.pubkey(), update_authority, name: None, uri: None, num_minted: 0, current_size: 0, plugins: vec![], external_plugin_adapters: vec![], }, ) .await; } #[tokio::test] async fn create_collection_with_different_payer() { let mut context = program_test().start_with_context().await; let collection = Keypair::new(); let payer = Keypair::new(); airdrop(&mut context, &payer.pubkey(), LAMPORTS_PER_SOL) .await .unwrap(); create_collection( &mut context, CreateCollectionHelperArgs { collection: &collection, update_authority: None, payer: Some(&payer), name: None, uri: None, plugins: vec![], external_plugin_adapters: vec![], }, ) .await .unwrap(); assert_collection( &mut context, AssertCollectionHelperArgs { collection: collection.pubkey(), update_authority: payer.pubkey(), name: None, uri: None, num_minted: 0, current_size: 0, plugins: vec![], external_plugin_adapters: vec![], }, ) .await; } #[tokio::test] async fn create_collection_with_plugins() { let mut context = program_test().start_with_context().await; let collection = Keypair::new(); let update_authority = context.payer.pubkey(); create_collection( &mut context, CreateCollectionHelperArgs { collection: &collection, update_authority: None, payer: None, name: None, uri: None, plugins: vec![PluginAuthorityPair { authority: None, plugin: Plugin::Royalties(Royalties { basis_points: 500, creators: vec![Creator { address: update_authority, percentage: 100, }], rule_set: RuleSet::ProgramDenyList(vec![]), }), }], external_plugin_adapters: vec![], }, ) .await .unwrap(); assert_collection( &mut context, AssertCollectionHelperArgs { collection: collection.pubkey(), update_authority, name: None, uri: None, num_minted: 0, current_size: 0, plugins: vec![PluginAuthorityPair { authority: None, plugin: Plugin::Royalties(Royalties { basis_points: 500, creators: vec![Creator { address: update_authority, percentage: 100, }], rule_set: RuleSet::ProgramDenyList(vec![]), }), }], external_plugin_adapters: vec![], }, ) .await; } #[tokio::test] async fn create_collection_with_different_update_authority() { let mut context = program_test().start_with_context().await; let collection = Keypair::new(); let payer = Keypair::new(); airdrop(&mut context, &payer.pubkey(), LAMPORTS_PER_SOL) .await .unwrap(); let update_authority = Keypair::new(); create_collection( &mut context, CreateCollectionHelperArgs { collection: &collection, update_authority: Some(update_authority.pubkey()), payer: Some(&payer), name: None, uri: None, plugins: vec![], external_plugin_adapters: vec![], }, ) .await .unwrap(); assert_collection( &mut context, AssertCollectionHelperArgs { collection: collection.pubkey(), update_authority: update_authority.pubkey(), name: None, uri: None, num_minted: 0, current_size: 0, plugins: vec![], external_plugin_adapters: vec![], }, ) .await; } #[tokio::test] async fn create_collection_with_plugins_with_different_plugin_authority() { let mut context = program_test().start_with_context().await; let collection = Keypair::new(); let update_authority = context.payer.pubkey(); let royalties_authority = Keypair::new(); create_collection( &mut context, CreateCollectionHelperArgs { collection: &collection, update_authority: Some(update_authority), payer: None, name: None, uri: None, plugins: vec![PluginAuthorityPair { authority: Some(PluginAuthority::Address { address: royalties_authority.pubkey(), }), plugin: Plugin::Royalties(Royalties { basis_points: 500, creators: vec![Creator { address: update_authority, percentage: 100, }], rule_set: RuleSet::ProgramDenyList(vec![]), }), }], external_plugin_adapters: vec![], }, ) .await .unwrap(); assert_collection( &mut context, AssertCollectionHelperArgs { collection: collection.pubkey(), update_authority, name: None, uri: None, num_minted: 0, current_size: 0, plugins: vec![PluginAuthorityPair { authority: Some(PluginAuthority::Address { address: royalties_authority.pubkey(), }), plugin: Plugin::Royalties(Royalties { basis_points: 500, creators: vec![Creator { address: update_authority, percentage: 100, }], rule_set: RuleSet::ProgramDenyList(vec![]), }), }], external_plugin_adapters: vec![], }, ) .await; }