close-account.ts 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import * as anchor from "@project-serum/anchor";
  2. import { Program } from "@project-serum/anchor";
  3. import {Keypair, LAMPORTS_PER_SOL} from "@solana/web3.js";
  4. import { CloseAccountProgram } from "../target/types/close_account_program";
  5. import {BlockheightBasedTransactionConfirmationStrategy, PublicKey} from "@solana/web3.js";
  6. import assert from "assert";
  7. describe("close-an-account", () => {
  8. // Configure the client to use the local cluster.
  9. anchor.setProvider(anchor.AnchorProvider.env());
  10. const program = anchor.workspace.CloseAccountProgram as Program<CloseAccountProgram>;
  11. const connection = program.provider.connection;
  12. const payer = Keypair.generate();
  13. async function airdrop(receiver: PublicKey, amount: number) {
  14. const sig = await program.provider.connection.requestAirdrop(receiver, amount);
  15. const blockStats = await program.provider.connection.getLatestBlockhash();
  16. const strategy: BlockheightBasedTransactionConfirmationStrategy = {
  17. signature: sig,
  18. blockhash: blockStats.blockhash,
  19. lastValidBlockHeight: blockStats.lastValidBlockHeight
  20. }
  21. await program.provider.connection.confirmTransaction(strategy, "confirmed");
  22. }
  23. function getUserAccount(user: PublicKey): [PublicKey, number] {
  24. return PublicKey.findProgramAddressSync(
  25. [
  26. Buffer.from("USER"),
  27. user.toBuffer()
  28. ], program.programId)
  29. }
  30. it("Airdrop", async () => {
  31. const balanceBefore = await connection.getBalance(payer.publicKey);
  32. await airdrop(payer.publicKey, LAMPORTS_PER_SOL);
  33. const balanceAfter = await connection.getBalance(payer.publicKey);
  34. assert.equal(balanceAfter, balanceBefore + LAMPORTS_PER_SOL);
  35. });
  36. it("Create Account", async () => {
  37. const [userAccountAddress] = getUserAccount(payer.publicKey);
  38. const userAccountBefore = await program.account.user.fetchNullable(userAccountAddress, "confirmed");
  39. assert.equal(userAccountBefore, null);
  40. await program.methods
  41. .createUser({
  42. name: "John Doe"
  43. })
  44. .accounts({
  45. payer: payer.publicKey,
  46. userAccount: userAccountAddress
  47. })
  48. .signers([payer])
  49. .rpc({commitment: "confirmed", skipPreflight: true});
  50. const userAccountAfter = await program.account.user.fetchNullable(userAccountAddress, "confirmed");
  51. assert.notEqual(userAccountAfter, null);
  52. assert.equal(userAccountAfter.name, "John Doe");
  53. assert.equal(userAccountAfter.user.toBase58(), payer.publicKey.toBase58());
  54. })
  55. it("Close Account", async () => {
  56. const [userAccountAddress] = getUserAccount(payer.publicKey);
  57. const userAccountBefore = await program.account.user.fetchNullable(userAccountAddress, "confirmed");
  58. assert.notEqual(userAccountBefore, null);
  59. await program.methods
  60. .closeUser()
  61. .accounts({
  62. user: payer.publicKey,
  63. userAccount: userAccountAddress
  64. })
  65. .signers([payer])
  66. .rpc({commitment: "confirmed"});
  67. const userAccountAfter = await program.account.user.fetchNullable(userAccountAddress, "processed");
  68. assert.equal(userAccountAfter, null);
  69. })
  70. });