mango-v3/program/tests/test_create_account.rs

63 lines
2.0 KiB
Rust

use solana_program_test::*;
use solana_sdk::signature::Signer;
use solana_sdk::signer::keypair::Keypair;
use mango::state::{MangoAccount, ZERO_I80F48};
use program_test::cookies::*;
use program_test::*;
mod program_test;
#[tokio::test]
async fn test_create_account() {
// === Arrange ===
let config = MangoProgramTestConfig::default_two_mints();
let mut test = MangoProgramTest::start_new(&config).await;
let mut mango_group_cookie = MangoGroupCookie::default(&mut test).await;
let num_precreated_mango_users = 0; // create manually
mango_group_cookie
.full_setup(&mut test, num_precreated_mango_users, config.num_mints - 1)
.await;
let mango_group_pk = &mango_group_cookie.address;
//
// paid for by owner (test.users[0])
//
let account0_pk = test.create_mango_account(mango_group_pk, 0, 0, None).await;
test.create_spot_open_orders(
mango_group_pk,
&mango_group_cookie.mango_group,
&account0_pk,
0,
0,
None,
)
.await;
//
// paid for by separate payer (test.users[1]) still owned by test.users[0]
//
let payer = Keypair::from_base58_string(&test.users[1].to_base58_string());
let payer_lamports = test.get_lamport_balance(payer.pubkey()).await;
let owner_lamports = test.get_lamport_balance(test.users[0].pubkey()).await;
let account1_pk = test.create_mango_account(mango_group_pk, 0, 1, Some(&payer)).await;
let account1 = test.load_account::<MangoAccount>(account1_pk).await;
assert_eq!(account1.owner, test.users[0].pubkey());
assert_eq!(test.get_lamport_balance(test.users[0].pubkey()).await, owner_lamports);
assert!(test.get_lamport_balance(payer.pubkey()).await < payer_lamports);
assert!(account0_pk != account1_pk);
test.create_spot_open_orders(
mango_group_pk,
&mango_group_cookie.mango_group,
&account1_pk,
0,
0,
Some(&payer),
)
.await;
assert_eq!(test.get_lamport_balance(test.users[0].pubkey()).await, owner_lamports);
}