123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- use solana_program::hash::Hash;
- use solana_program_test::{processor, BanksClient, ProgramTest};
- use solana_sdk::{
- program_pack::Pack, signature::Keypair, signer::Signer, transaction::Transaction,
- };
- use steel::*;
- use steel_api::prelude::*;
- async fn setup() -> (BanksClient, Keypair, Hash) {
- let mut program_test = ProgramTest::new(
- "steel_program",
- steel_api::ID,
- processor!(steel_program::process_instruction),
- );
- program_test.add_program("token_metadata", mpl_token_metadata::ID, None);
- program_test.prefer_bpf(true);
- program_test.start().await
- }
- #[tokio::test]
- async fn run_test() {
- // Setup test
- let (mut banks, payer, blockhash) = setup().await;
- //SPL TOKEN
- let token_mint_keypair = Keypair::new();
- let name = string_to_bytes::<32>("Solana Gold").unwrap();
- let symbol = string_to_bytes::<8>("GOLDSOL").unwrap();
- let uri = string_to_bytes::<128>("https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json").unwrap();
- let decimals = 9;
- // Submit create transaction for spl_token.
- let ix = create_token(
- payer.pubkey(),
- token_mint_keypair.pubkey(),
- name,
- symbol,
- uri,
- decimals,
- );
- let tx = Transaction::new_signed_with_payer(
- &[ix],
- Some(&payer.pubkey()),
- &[&payer, &token_mint_keypair],
- blockhash,
- );
- let res = banks.process_transaction(tx).await;
- assert!(res.is_ok());
- // Check token mint account data
- let mint_account_data = banks
- .get_account(token_mint_keypair.pubkey())
- .await
- .unwrap()
- .unwrap()
- .data;
- let deserialized_mint_data = spl_token::state::Mint::unpack(&mint_account_data).unwrap();
- assert!(deserialized_mint_data.is_initialized);
- assert_eq!(deserialized_mint_data.decimals, decimals);
- assert_eq!(
- deserialized_mint_data.mint_authority.unwrap(),
- payer.pubkey()
- );
- // Check token metadata account data
- let metadata_account_data = banks
- .get_account(metadata_pda(token_mint_keypair.pubkey()).0)
- .await
- .unwrap()
- .unwrap()
- .data;
- let deserialized_metadata_data =
- mpl_token_metadata::accounts::Metadata::from_bytes(&metadata_account_data).unwrap();
- assert_eq!(deserialized_metadata_data.update_authority, payer.pubkey());
- assert_eq!(deserialized_metadata_data.mint, token_mint_keypair.pubkey());
- assert_eq!(
- deserialized_metadata_data.name.trim_end_matches('\0'),
- "Solana Gold"
- );
- assert_eq!(
- deserialized_metadata_data.symbol.trim_end_matches('\0'),
- "GOLDSOL"
- );
- assert_eq!(deserialized_metadata_data.uri.trim_end_matches('\0'), "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json" );
- //NFT
- let nft_mint_keypair = Keypair::new();
- let name = string_to_bytes::<32>("Homer NFT").unwrap();
- let symbol = string_to_bytes::<8>("HOMR").unwrap();
- let uri = string_to_bytes::<128>("https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json").unwrap();
- let decimals = 0;
- //Submit create transaction for nft
- let ix = create_token(
- payer.pubkey(),
- nft_mint_keypair.pubkey(),
- name,
- symbol,
- uri,
- decimals,
- );
- let tx = Transaction::new_signed_with_payer(
- &[ix],
- Some(&payer.pubkey()),
- &[&payer, &nft_mint_keypair],
- blockhash,
- );
- let res = banks.process_transaction(tx).await;
- assert!(res.is_ok());
- //Check nft mint account data
- let mint_account_data = banks
- .get_account(nft_mint_keypair.pubkey())
- .await
- .unwrap()
- .unwrap()
- .data;
- let deserialized_mint_data = spl_token::state::Mint::unpack(&mint_account_data).unwrap();
- assert!(deserialized_mint_data.is_initialized);
- assert_eq!(deserialized_mint_data.decimals, decimals);
- assert_eq!(
- deserialized_mint_data.mint_authority.unwrap(),
- payer.pubkey()
- );
- //Check nft metadata account data
- let metadata_account_data = banks
- .get_account(metadata_pda(nft_mint_keypair.pubkey()).0)
- .await
- .unwrap()
- .unwrap()
- .data;
- let deserialized_metadata_data =
- mpl_token_metadata::accounts::Metadata::from_bytes(&metadata_account_data).unwrap();
- assert_eq!(deserialized_metadata_data.update_authority, payer.pubkey());
- assert_eq!(deserialized_metadata_data.mint, nft_mint_keypair.pubkey());
- assert_eq!(
- deserialized_metadata_data.name.trim_end_matches('\0'),
- "Homer NFT"
- );
- assert_eq!(
- deserialized_metadata_data.symbol.trim_end_matches('\0'),
- "HOMR"
- );
- assert_eq!(deserialized_metadata_data.uri.trim_end_matches('\0'), "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json" );
- }
|