index.test.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import {
  2. PublicKey,
  3. Transaction,
  4. TransactionInstruction,
  5. } from "@solana/web3.js";
  6. import { assert } from "chai";
  7. import { ProgramTestContext, start } from "solana-bankrun";
  8. describe("hello-solana", () => {
  9. const PROGRAM_ID = PublicKey.unique();
  10. // load program in solana-bankrun
  11. let context: ProgramTestContext;
  12. before(async () => {
  13. context = await start(
  14. [{ name: "hello_solana_program_pinocchio", programId: PROGRAM_ID }],
  15. []
  16. );
  17. });
  18. it("Say hello!", async () => {
  19. const client = context.banksClient;
  20. const payer = context.payer;
  21. const blockhash = context.lastBlockhash;
  22. // We set up our instruction first.
  23. const ix = new TransactionInstruction({
  24. keys: [{ pubkey: payer.publicKey, isSigner: true, isWritable: true }],
  25. programId: PROGRAM_ID,
  26. data: Buffer.from([]), // No data
  27. });
  28. const tx = new Transaction();
  29. tx.recentBlockhash = blockhash;
  30. tx.add(ix).sign(payer);
  31. // Now we process the transaction
  32. const transaction = await client.processTransaction(tx);
  33. assert(transaction.logMessages[0].startsWith(`Program ${PROGRAM_ID}`));
  34. assert(transaction.logMessages[1] === "Program log: Hello, Solana!");
  35. assert(transaction.logMessages[2] === `Program log: ${PROGRAM_ID}`);
  36. assert(
  37. transaction.logMessages[3].startsWith(`Program ${PROGRAM_ID} consumed`)
  38. );
  39. assert(transaction.logMessages[4] === `Program ${PROGRAM_ID} success`);
  40. assert(transaction.logMessages.length === 5);
  41. });
  42. });