use solana_sdk::signer::Signer;
use solana_test_framework::*;
use crate::common::test_runner::TestRunner;
pub mod common;
use solana_program::pubkey::Pubkey;
use access_protocol::state::Tag;
#[tokio::test]
async fn create_and_activate_pool() {
let mut tr = TestRunner::new(1_000_000).await.unwrap();
let stake_pool_owner = tr.create_user_with_ata().await.unwrap();
tr.create_pool(&stake_pool_owner, 10000)
.await
.unwrap();
let stats = tr.pool_stats(stake_pool_owner.pubkey()).await.unwrap();
assert_eq!(
Pubkey::from(stats.header.owner).to_string(),
stake_pool_owner.pubkey().to_string()
);
assert_eq!(stats.header.tag, Tag::InactiveStakePool as u8);
tr.activate_stake_pool(&stake_pool_owner.pubkey())
.await
.unwrap();
let stats = tr.pool_stats(stake_pool_owner.pubkey()).await.unwrap();
assert_eq!(
Pubkey::from(stats.header.owner).to_string(),
stake_pool_owner.pubkey().to_string()
);
assert_eq!(stats.header.tag, Tag::StakePool as u8);
}
#[tokio::test]
async fn cannot_change_stakers_part_to_invalid() {
let mut tr = TestRunner::new(1_000_000).await.unwrap();
let stake_pool_owner = tr.create_user_with_ata().await.unwrap();
tr.create_pool(&stake_pool_owner, 10000)
.await
.unwrap();
tr.activate_stake_pool(&stake_pool_owner.pubkey())
.await
.unwrap();
tr.change_pool_multiplier(&stake_pool_owner, 0)
.await
.unwrap();
let result = tr.change_pool_multiplier(&stake_pool_owner, 10000).await;
assert!(result.is_err());
}
#[tokio::test]
async fn cannot_be_activated_if_not_created() {
let mut tr = TestRunner::new(1_000_000).await.unwrap();
let stake_pool_owner = tr.create_user_with_ata().await.unwrap();
let result = tr.activate_stake_pool(&stake_pool_owner.pubkey()).await;
assert!(result.is_err());
}
#[tokio::test]
async fn cannot_be_created_twice() {
let mut tr = TestRunner::new(1_000_000).await.unwrap();
let stake_pool_owner = tr.create_user_with_ata().await.unwrap();
tr.create_pool(&stake_pool_owner, 10000)
.await
.unwrap();
let result = tr.create_pool(&stake_pool_owner, 1000).await;
assert!(result.is_err());
}
#[tokio::test]
async fn cannot_be_activated_twice() {
let mut tr = TestRunner::new(1_000_000).await.unwrap();
let stake_pool_owner = tr.create_user_with_ata().await.unwrap();
tr.create_pool(&stake_pool_owner, 10000)
.await
.unwrap();
tr.activate_stake_pool(&stake_pool_owner.pubkey())
.await
.unwrap();
tr.sleep(1).await.unwrap();
let result = tr.activate_stake_pool(&stake_pool_owner.pubkey()).await;
assert!(result.is_err());
}
#[tokio::test]
async fn cannot_be_called_before_activation() {
let mut tr = TestRunner::new(1_000_000).await.unwrap();
let stake_pool_owner = tr.create_user_with_ata().await.unwrap();
let staker = tr.create_user_with_ata().await.unwrap();
tr.mint(&staker.pubkey(), 100_000_000_000).await.unwrap();
tr.create_pool(&stake_pool_owner, 10000)
.await
.unwrap();
let result = tr.stake(&stake_pool_owner.pubkey(), &staker, 100000).await;
assert!(result.is_err());
let result = tr
.create_bond(&stake_pool_owner.pubkey(), &staker.pubkey(), 10000, 1, 1, 1)
.await;
assert!(result.is_err());
}