test.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. use solana_program::hash::Hash;
  2. use solana_program_test::{processor, BanksClient, ProgramTest};
  3. use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
  4. use steel::*;
  5. use steel_api::prelude::*;
  6. async fn setup() -> (BanksClient, Keypair, Hash) {
  7. let mut program_test = ProgramTest::new(
  8. "steel_program",
  9. steel_api::ID,
  10. processor!(steel_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 favorite_number: u64 = 23;
  20. let favorite_color: &str = "purple";
  21. let mut favorite_hobbies: Vec<&str> = Vec::new();
  22. favorite_hobbies.push("skiing");
  23. favorite_hobbies.push("skydiving");
  24. favorite_hobbies.push("biking");
  25. // Submit set favorites transaction.
  26. let ix = set_favorites(
  27. payer.pubkey(),
  28. favorite_number,
  29. favorite_color,
  30. favorite_hobbies,
  31. );
  32. let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
  33. let res = banks.process_transaction(tx).await;
  34. assert!(res.is_ok());
  35. // Verify favorites was updated.
  36. let favorites_address = favorites_pda().0;
  37. let favorites_account = banks.get_account(favorites_address).await.unwrap().unwrap();
  38. let favorites = Favorites::try_from_bytes(&favorites_account.data).unwrap();
  39. let favorites_number = favorites.number;
  40. let favorites_color = bytes32_to_string(&favorites.color).unwrap();
  41. let favorites_hobbies = bytes32_array_to_strings(&favorites.hobbies).unwrap();
  42. assert_eq!(favorites_account.owner, steel_api::ID);
  43. assert_eq!(favorites_number, 23);
  44. assert_eq!(favorites_color, "purple");
  45. assert_eq!(favorites_hobbies[0], "skiing");
  46. }