123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- import * as anchor from "@coral-xyz/anchor";
- import { Program } from "@coral-xyz/anchor";
- import { Keypair, LAMPORTS_PER_SOL } from "@solana/web3.js";
- import { CloseAccountProgram } from "../target/types/close_account_program";
- import {
- BlockheightBasedTransactionConfirmationStrategy,
- PublicKey,
- } from "@solana/web3.js";
- import assert from "assert";
- describe("close-an-account", () => {
- // Configure the client to use the local cluster.
- anchor.setProvider(anchor.AnchorProvider.env());
- const program = anchor.workspace
- .CloseAccountProgram as Program<CloseAccountProgram>;
- const connection = program.provider.connection;
- const payer = Keypair.generate();
- async function airdrop(receiver: PublicKey, amount: number) {
- const sig = await program.provider.connection.requestAirdrop(
- receiver,
- amount
- );
- const blockStats = await program.provider.connection.getLatestBlockhash();
- const strategy: BlockheightBasedTransactionConfirmationStrategy = {
- signature: sig,
- blockhash: blockStats.blockhash,
- lastValidBlockHeight: blockStats.lastValidBlockHeight,
- };
- await program.provider.connection.confirmTransaction(strategy, "confirmed");
- }
- function getUserAccount(user: PublicKey): [PublicKey, number] {
- return PublicKey.findProgramAddressSync(
- [Buffer.from("USER"), user.toBuffer()],
- program.programId
- );
- }
- it("Airdrop", async () => {
- const balanceBefore = await connection.getBalance(payer.publicKey);
- await airdrop(payer.publicKey, LAMPORTS_PER_SOL);
- const balanceAfter = await connection.getBalance(payer.publicKey);
- assert.equal(balanceAfter, balanceBefore + LAMPORTS_PER_SOL);
- });
- it("Create Account", async () => {
- const [userAccountAddress] = getUserAccount(payer.publicKey);
- const userAccountBefore = await program.account.user.fetchNullable(
- userAccountAddress,
- "confirmed"
- );
- assert.equal(userAccountBefore, null);
- await program.methods
- .createUser({
- name: "John Doe",
- })
- .accounts({
- payer: payer.publicKey,
- userAccount: userAccountAddress,
- })
- .signers([payer])
- .rpc({ commitment: "confirmed", skipPreflight: true });
- const userAccountAfter = await program.account.user.fetchNullable(
- userAccountAddress,
- "confirmed"
- );
- assert.notEqual(userAccountAfter, null);
- assert.equal(userAccountAfter.name, "John Doe");
- assert.equal(userAccountAfter.user.toBase58(), payer.publicKey.toBase58());
- });
- it("Close Account", async () => {
- const [userAccountAddress] = getUserAccount(payer.publicKey);
- const userAccountBefore = await program.account.user.fetchNullable(
- userAccountAddress,
- "confirmed"
- );
- assert.notEqual(userAccountBefore, null);
- await program.methods
- .closeUser()
- .accounts({
- user: payer.publicKey,
- userAccount: userAccountAddress,
- })
- .signers([payer])
- .rpc({ commitment: "confirmed" });
- const userAccountAfter = await program.account.user.fetchNullable(
- userAccountAddress,
- "processed"
- );
- assert.equal(userAccountAfter, null);
- });
- });
|