test.rs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. use close_account_api::prelude::*;
  2. use solana_program::hash::Hash;
  3. use solana_program_test::{processor, BanksClient, ProgramTest};
  4. use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
  5. use steel::*;
  6. async fn setup() -> (BanksClient, Keypair, Hash) {
  7. let mut program_test = ProgramTest::new(
  8. "close-account",
  9. close_account_api::ID,
  10. processor!(close_account_program::process_instruction),
  11. );
  12. program_test.prefer_bpf(true);
  13. program_test.start().await
  14. }
  15. #[tokio::test]
  16. async fn run_test() {
  17. // Setup test
  18. let (mut banks, payer, blockhash) = setup().await;
  19. let name = "foobarbaz";
  20. let account = User::new(name).unwrap();
  21. // Submit initialize transaction.
  22. let ix = close_account_api::sdk::create_account(payer.pubkey(), CreateAccount(account.name));
  23. let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
  24. let res = banks.process_transaction(tx).await;
  25. assert!(res.is_ok());
  26. let user_pda = User::pda(payer.pubkey()).0;
  27. let pda_account = banks.get_account(user_pda).await.unwrap().unwrap();
  28. let name_deser = User::try_from_bytes(&pda_account.data).unwrap();
  29. assert_eq!(pda_account.owner, close_account_api::ID);
  30. assert_eq!(name_deser.to_string().unwrap().as_str(), name);
  31. // Test Closing an Account
  32. // Submit initialize transaction.
  33. let ix = close_account_api::sdk::close_account(payer.pubkey());
  34. let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
  35. let res = banks.process_transaction(tx).await;
  36. assert!(res.is_ok());
  37. let pda_account = banks.get_account(user_pda).await.unwrap();
  38. assert!(pda_account.is_none());
  39. }