test.rs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 transfer_tokens_api::prelude::*;
  5. async fn setup() -> (BanksClient, Keypair, Hash) {
  6. let mut program_test = ProgramTest::new(
  7. "transfer_tokens_program",
  8. transfer_tokens_api::ID,
  9. processor!(transfer_tokens_program::process_instruction),
  10. );
  11. program_test.add_program("token_metadata", mpl_token_metadata::ID, None);
  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 mint_keypair = Keypair::new();
  20. let name = str_to_bytes::<32>("Solana Gold");
  21. let symbol = str_to_bytes::<8>("GOLDSOL");
  22. let uri = str_to_bytes::<64>("https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json");
  23. let decimals = 9;
  24. // Submit create transaction.
  25. let ix = create(
  26. payer.pubkey(),
  27. mint_keypair.pubkey(),
  28. name,
  29. symbol,
  30. uri,
  31. decimals,
  32. );
  33. let tx = Transaction::new_signed_with_payer(
  34. &[ix],
  35. Some(&payer.pubkey()),
  36. &[&payer, &mint_keypair],
  37. blockhash,
  38. );
  39. let res = banks.process_transaction(tx).await;
  40. assert!(res.is_ok());
  41. let recipient = Keypair::new();
  42. let to_ata = spl_associated_token_account::get_associated_token_address(
  43. &payer.pubkey(),
  44. &mint_keypair.pubkey(),
  45. );
  46. // Submit mint transaction.
  47. let ix = mint(
  48. payer.pubkey(),
  49. payer.pubkey(),
  50. mint_keypair.pubkey(),
  51. to_ata,
  52. 100,
  53. );
  54. let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
  55. let res = banks.process_transaction(tx).await;
  56. assert!(res.is_ok());
  57. let recipient_ata = spl_associated_token_account::get_associated_token_address(
  58. &recipient.pubkey(),
  59. &mint_keypair.pubkey(),
  60. );
  61. // Submit transfer transaction.
  62. let ix = transfer(
  63. payer.pubkey(),
  64. recipient.pubkey(),
  65. mint_keypair.pubkey(),
  66. to_ata,
  67. recipient_ata,
  68. 100,
  69. );
  70. let tx = Transaction::new_signed_with_payer(
  71. &[ix],
  72. Some(&payer.pubkey()),
  73. &[&payer, &recipient],
  74. blockhash,
  75. );
  76. let res = banks.process_transaction(tx).await;
  77. assert!(res.is_ok());
  78. }