close-account.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import * as anchor from "@coral-xyz/anchor"
  2. import { Program } from "@coral-xyz/anchor"
  3. import { CloseAccountProgram } from "../target/types/close_account_program"
  4. import { PublicKey } from "@solana/web3.js"
  5. import assert from "assert"
  6. describe("close-an-account", () => {
  7. // Configure the client to use the local cluster.
  8. const provider = anchor.AnchorProvider.env()
  9. anchor.setProvider(provider)
  10. const program = anchor.workspace
  11. .CloseAccountProgram as Program<CloseAccountProgram>
  12. const payer = provider.wallet as anchor.Wallet
  13. // Derive the PDA for the user's account.
  14. const [userAccountAddress] = PublicKey.findProgramAddressSync(
  15. [Buffer.from("USER"), payer.publicKey.toBuffer()],
  16. program.programId
  17. )
  18. it("Create Account", async () => {
  19. await program.methods
  20. .createUser("John Doe")
  21. .accounts({
  22. user: payer.publicKey,
  23. userAccount: userAccountAddress,
  24. })
  25. .rpc()
  26. // Fetch the account data
  27. const userAccount = await program.account.userState.fetch(
  28. userAccountAddress
  29. )
  30. assert.equal(userAccount.name, "John Doe")
  31. assert.equal(userAccount.user.toBase58(), payer.publicKey.toBase58())
  32. })
  33. it("Close Account", async () => {
  34. await program.methods
  35. .closeUser()
  36. .accounts({
  37. user: payer.publicKey,
  38. userAccount: userAccountAddress,
  39. })
  40. .rpc()
  41. // The account should no longer exist, returning null.
  42. const userAccount = await program.account.userState.fetchNullable(
  43. userAccountAddress
  44. )
  45. assert.equal(userAccount, null)
  46. })
  47. })