serum-dex/safe/tests/burn-locked.rs

72 lines
2.0 KiB
Rust

use common::lifecycle::{self, LsrmMinted};
use serum_safe::accounts::{MintReceipt, Vesting};
use solana_client_gen::solana_sdk::instruction::AccountMeta;
use solana_client_gen::solana_sdk::signature::Signer;
mod common;
#[test]
fn burn() {
// Given.
//
// A vesting account with outstanding lSRM.
let LsrmMinted {
client,
vesting_acc,
lsrm,
lsrm_token_acc_owner,
..
} = lifecycle::mint_lsrm(2, 10, 100_000, 1000);
let lsrm1 = &lsrm[0];
// When.
//
// I burn my lSRM.
let accounts = &[
AccountMeta::new(lsrm_token_acc_owner.pubkey(), true),
AccountMeta::new(lsrm1.token_acc.pubkey(), false),
AccountMeta::new(lsrm1.mint.pubkey(), false),
AccountMeta::new(lsrm1.receipt, false),
AccountMeta::new(vesting_acc, false),
AccountMeta::new_readonly(spl_token::ID, false),
];
let signers = &[&lsrm_token_acc_owner, client.payer()];
client.burn_locked_with_signers(signers, accounts).unwrap();
// Then.
//
// The NFT mint supply should be zero.
{
let mint: spl_token::state::Mint =
serum_common::client::rpc::account_token_unpacked(client.rpc(), &lsrm1.mint.pubkey());
assert_eq!(mint.supply, 0);
}
// Then.
//
// My vesting account should be updated.
{
let vesting_acc: Vesting =
serum_common::client::rpc::account_unpacked(client.rpc(), &vesting_acc);
assert_eq!(vesting_acc.locked_outstanding, 1);
}
// Then.
//
// My lSRM receipt should be burned.
{
let receipt: MintReceipt =
serum_common::client::rpc::account_unpacked(client.rpc(), &lsrm1.receipt);
assert_eq!(receipt.burned, true);
}
// Then.
//
// I should no longer have lSRM in my account.
{
let account: spl_token::state::Account = serum_common::client::rpc::account_token_unpacked(
client.rpc(),
&lsrm1.token_acc.pubkey(),
);
assert_eq!(account.amount, 0);
}
}