use crate::{TestRewarder, tests::common::init_test_environment};
use anyhow::Result;
use testsvm::prelude::*;
#[test]
fn test_complete_quarry_integration() -> Result<()> {
let mut env = init_test_environment()?;
let authority = env.new_wallet("quarry_authority")?;
let test_rewarder = TestRewarder::new_rewarder(&mut env, "main", &authority)?;
println!(" ✓ Created rewarder: {}", test_rewarder.rewarder);
println!(
" ✓ Created mint wrapper: {}",
test_rewarder.mint_wrapper.mint_wrapper
);
println!(
" ✓ Created reward token: {}",
test_rewarder.mint_wrapper.reward_token_mint
);
let staked_token_mint = env.create_mint("staked_token", 6, &authority.pubkey())?;
println!("\n📍 Creating primary quarry...");
let primary_quarry = test_rewarder.create_primary_quarry(
&mut env,
"primary",
&staked_token_mint.key,
&authority,
)?;
println!(" ✓ Created primary quarry: {}", primary_quarry.quarry);
println!(" ✓ Quarry label: {}", primary_quarry.label);
let replica_token_mint = env.create_mint("replica_token", 6, &authority.pubkey())?;
println!("\n📍 Creating replica quarry...");
let replica_quarry =
test_rewarder.create_quarry(&mut env, "replica", &replica_token_mint.key, &authority)?;
println!(" ✓ Created replica quarry: {}", replica_quarry.quarry);
println!(" ✓ Quarry label: {}", replica_quarry.label);
assert!(
test_rewarder
.mint_wrapper
.reward_token_mint
.maybe_load(&env)?
.is_some(),
"Reward token mint should exist"
);
assert!(
test_rewarder
.mint_wrapper
.mint_wrapper
.maybe_load(&env)?
.is_some(),
"Mint wrapper should exist"
);
assert!(
test_rewarder.rewarder.maybe_load(&env)?.is_some(),
"Rewarder should exist"
);
assert!(
primary_quarry.quarry.maybe_load(&env)?.is_some(),
"Primary quarry should exist"
);
assert!(
replica_quarry.quarry.maybe_load(&env)?.is_some(),
"Replica quarry should exist"
);
println!("\n🔬 Verifying account data...");
let mint_wrapper = test_rewarder.fetch_mint_wrapper(&env)?;
assert_eq!(
mint_wrapper.token_mint, test_rewarder.mint_wrapper.reward_token_mint.key,
"MintWrapper should have correct token mint"
);
assert_eq!(
mint_wrapper.admin,
authority.pubkey(),
"MintWrapper should have correct admin"
);
println!(" ✓ MintWrapper data verified");
let rewarder = test_rewarder.fetch_rewarder(&env)?;
assert_eq!(
rewarder.authority,
authority.pubkey(),
"Rewarder should have correct authority"
);
assert_eq!(
rewarder.mint_wrapper, test_rewarder.mint_wrapper.mint_wrapper.key,
"Rewarder should reference correct mint wrapper"
);
println!(" ✓ Rewarder data verified");
let primary_quarry_data = primary_quarry.fetch_quarry(&env)?;
assert_eq!(
primary_quarry_data.token_mint_key, staked_token_mint.key,
"Primary quarry should have correct token mint"
);
assert_eq!(
primary_quarry_data.rewarder, test_rewarder.rewarder.key,
"Primary quarry should reference correct rewarder"
);
let replica_quarry_data = replica_quarry.fetch_quarry(&env)?;
assert_eq!(
replica_quarry_data.token_mint_key, replica_token_mint.key,
"Replica quarry should have correct token mint"
);
assert_eq!(
replica_quarry_data.rewarder, test_rewarder.rewarder.key,
"Replica quarry should reference correct rewarder"
);
Ok(())
}
#[test]
fn test_merge_miner_integration() -> Result<()> {
let mut env = init_test_environment()?;
let authority = env.new_wallet("quarry_authority")?;
let test_rewarder = TestRewarder::new_rewarder(&mut env, "main", &authority)?;
let staked_token_mint = env.create_mint("staked_token", 6, &authority.pubkey())?;
println!("\n📍 Creating primary quarry...");
let primary_quarry = test_rewarder.create_primary_quarry(
&mut env,
"primary",
&staked_token_mint.key,
&authority,
)?;
println!("\n🏊 Creating merge pool...");
let test_merge_pool =
crate::TestMergePool::new(&mut env, "test_merge_pool", staked_token_mint)?;
println!(" ✓ Created merge pool: {}", test_merge_pool.pool);
println!(
" ✓ Created replica mint: {}",
test_merge_pool.replica_mint
);
let owner = env.new_wallet("merge_miner_owner")?;
let merge_miner =
test_merge_pool.create_merge_miner(&mut env, "test_merge_miner", owner.pubkey())?;
assert!(
test_merge_pool.pool.maybe_load(&env)?.is_some(),
"Merge pool should exist"
);
assert!(
test_merge_pool.replica_mint.maybe_load(&env)?.is_some(),
"Replica mint should exist"
);
assert!(
merge_miner.merge_miner.maybe_load(&env)?.is_some(),
"Merge miner should exist"
);
test_rewarder.create_replica_quarry(&mut env, "replica", &test_merge_pool, &authority)?;
let merge_pool_data = test_merge_pool.pool.load(&env)?;
assert_eq!(
merge_pool_data.primary_mint, staked_token_mint.key,
"Merge pool should have correct primary mint"
);
let merge_miner_data = merge_miner.merge_miner.load(&env)?;
assert_eq!(
merge_miner_data.pool, test_merge_pool.pool.key,
"Merge miner should reference correct pool"
);
assert_eq!(
merge_miner_data.owner,
owner.pubkey(),
"Merge miner should have correct owner"
);
let (create_owner_ata_ix, owner_token_account) = env.create_ata_ix(
"owner_staked_tokens",
&owner.pubkey(),
&staked_token_mint.into(),
)?;
env.execute_ixs(&[create_owner_ata_ix])?;
let mint_ix = anchor_spl::token::spl_token::instruction::mint_to(
&anchor_spl::token::ID,
&staked_token_mint.key,
&owner_token_account.into(),
&authority.pubkey(),
&[],
1_000_000_000, )?;
env.execute_ixs_with_signers(&[mint_ix], &[&authority])?;
test_merge_pool.setup_staking_accounts(
&mut env,
&merge_miner.merge_miner,
&primary_quarry.quarry.key,
)?;
Ok(())
}