#![cfg(feature = "test-bpf")] pub mod utils; use mpl_token_auth_rules::{ instruction::{builders::ValidateBuilder, InstructionBuilder, ValidateArgs}, payload::Payload, state::{Rule, RuleSetV1}, }; use solana_program_test::tokio; use solana_sdk::{signature::Signer, signer::keypair::Keypair}; use utils::{program_test, Operation}; #[tokio::test] async fn test_pass() { let mut context = program_test().start_with_context().await; // -------------------------------- // Create RuleSet // -------------------------------- // Create a Pass Rule. let pass_rule = Rule::Pass; // Create a RuleSet. let mut rule_set = RuleSetV1::new("test rule_set".to_string(), context.payer.pubkey()); rule_set .add(Operation::SimpleOwnerTransfer.to_string(), pass_rule) .unwrap(); println!("{:#?}", rule_set); // Put the RuleSet on chain. let rule_set_addr = create_rule_set_on_chain!(&mut context, rule_set, "test rule_set".to_string()).await; // -------------------------------- // Validate pass // -------------------------------- // Create a Keypair to simulate a token mint address. let mint = Keypair::new().pubkey(); // Create a `validate` instruction. let validate_ix = ValidateBuilder::new() .rule_set_pda(rule_set_addr) .mint(mint) .additional_rule_accounts(vec![]) .build(ValidateArgs::V1 { operation: Operation::SimpleOwnerTransfer.to_string(), payload: Payload::default(), update_rule_state: false, rule_set_revision: None, }) .unwrap() .instruction(); // Validate Transfer operation. process_passing_validate_ix!(&mut context, validate_ix, vec![], None).await; }