descro resolvers extension
This commit is contained in:
108
programs/descro_ext_resolvers/tests/common/mod.rs
Normal file
108
programs/descro_ext_resolvers/tests/common/mod.rs
Normal file
@@ -0,0 +1,108 @@
|
||||
use {
|
||||
anchor_lang::{
|
||||
solana_program::{instruction::Instruction, system_program},
|
||||
AccountDeserialize, InstructionData, ToAccountMetas,
|
||||
},
|
||||
descro_ext_resolvers::{ResolverEntry, ResolverType},
|
||||
litesvm::LiteSVM,
|
||||
solana_keypair::Keypair,
|
||||
solana_message::{Message, VersionedMessage},
|
||||
solana_signer::Signer,
|
||||
solana_transaction::versioned::VersionedTransaction,
|
||||
};
|
||||
pub use anchor_lang::prelude::Pubkey;
|
||||
|
||||
pub fn setup() -> (LiteSVM, Keypair) {
|
||||
let program_id = descro_ext_resolvers::id();
|
||||
let mut svm = LiteSVM::new();
|
||||
let bytes = include_bytes!("../../../../target/deploy/descro_ext_resolvers.so");
|
||||
svm.add_program(program_id, bytes).unwrap();
|
||||
|
||||
let authority = Keypair::new();
|
||||
svm.airdrop(&authority.pubkey(), 10_000_000_000).unwrap();
|
||||
|
||||
(svm, authority)
|
||||
}
|
||||
|
||||
pub fn resolver_entry_pda(authority: &Pubkey) -> Pubkey {
|
||||
Pubkey::find_program_address(
|
||||
&[b"resolver", authority.as_ref()],
|
||||
&descro_ext_resolvers::id(),
|
||||
)
|
||||
.0
|
||||
}
|
||||
|
||||
pub fn send(svm: &mut LiteSVM, ix: Instruction, payer: &Keypair) {
|
||||
let blockhash = svm.latest_blockhash();
|
||||
let msg = Message::new_with_blockhash(&[ix], Some(&payer.pubkey()), &blockhash);
|
||||
let tx = VersionedTransaction::try_new(VersionedMessage::Legacy(msg), &[payer]).unwrap();
|
||||
svm.send_transaction(tx).expect("transaction failed");
|
||||
}
|
||||
|
||||
pub fn try_send(svm: &mut LiteSVM, ix: Instruction, payer: &Keypair) -> bool {
|
||||
let blockhash = svm.latest_blockhash();
|
||||
let msg = Message::new_with_blockhash(&[ix], Some(&payer.pubkey()), &blockhash);
|
||||
let tx = VersionedTransaction::try_new(VersionedMessage::Legacy(msg), &[payer]).unwrap();
|
||||
svm.send_transaction(tx).is_ok()
|
||||
}
|
||||
|
||||
pub fn ix_register(
|
||||
authority: &Pubkey,
|
||||
resolver_type: ResolverType,
|
||||
name: &str,
|
||||
description: &str,
|
||||
fee_bps: u16,
|
||||
fee_recipient: Pubkey,
|
||||
metadata_uri: &str,
|
||||
) -> Instruction {
|
||||
let entry = resolver_entry_pda(authority);
|
||||
Instruction::new_with_bytes(
|
||||
descro_ext_resolvers::id(),
|
||||
&descro_ext_resolvers::instruction::RegisterResolver {
|
||||
resolver_type,
|
||||
name: name.to_string(),
|
||||
description: description.to_string(),
|
||||
fee_bps,
|
||||
fee_recipient,
|
||||
metadata_uri: metadata_uri.to_string(),
|
||||
}
|
||||
.data(),
|
||||
descro_ext_resolvers::accounts::RegisterResolver {
|
||||
authority: *authority,
|
||||
resolver_entry: entry,
|
||||
system_program: system_program::ID,
|
||||
}
|
||||
.to_account_metas(None),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn ix_update(
|
||||
authority: &Pubkey,
|
||||
name: &str,
|
||||
description: &str,
|
||||
fee_bps: u16,
|
||||
metadata_uri: &str,
|
||||
) -> Instruction {
|
||||
let entry = resolver_entry_pda(authority);
|
||||
Instruction::new_with_bytes(
|
||||
descro_ext_resolvers::id(),
|
||||
&descro_ext_resolvers::instruction::UpdateResolver {
|
||||
name: name.to_string(),
|
||||
description: description.to_string(),
|
||||
fee_bps,
|
||||
metadata_uri: metadata_uri.to_string(),
|
||||
}
|
||||
.data(),
|
||||
descro_ext_resolvers::accounts::UpdateResolver {
|
||||
authority: *authority,
|
||||
resolver_entry: entry,
|
||||
}
|
||||
.to_account_metas(None),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn read_entry(svm: &LiteSVM, authority: &Pubkey) -> ResolverEntry {
|
||||
let pda = resolver_entry_pda(authority);
|
||||
let account = svm.get_account(&pda).expect("resolver entry not found");
|
||||
ResolverEntry::try_deserialize(&mut account.data.as_slice()).unwrap()
|
||||
}
|
||||
Reference in New Issue
Block a user