anchor/tests/custom-coder/tests/spl-associated-token-coder.ts

66 lines
2.0 KiB
TypeScript

import { Native, AnchorProvider, setProvider } from "@coral-xyz/anchor";
import { splAssociatedTokenAccountProgram } from "@coral-xyz/spl-associated-token-account";
import { splTokenProgram } from "@coral-xyz/spl-token";
import { Keypair, PublicKey, SYSVAR_RENT_PUBKEY } from "@solana/web3.js";
import * as assert from "assert";
describe("spl-associated-token-coder", () => {
// Configure the client to use the local cluster.
const provider = AnchorProvider.env();
setProvider(provider);
// Client.
const program = splAssociatedTokenAccountProgram({
provider,
});
const systemProgram = Native.system();
const tokenProgram = splTokenProgram({
provider,
});
it("Creates an account", async () => {
// arrange
const mintKeypair = Keypair.generate();
const mintDecimals = 6;
const [associatedToken] = await PublicKey.findProgramAddress(
[
provider.publicKey.toBuffer(),
tokenProgram.programId.toBuffer(),
mintKeypair.publicKey.toBuffer(),
],
program.programId
);
// act
await program.methods
.create()
.accounts({
associatedAccountAddress: associatedToken,
fundingAddress: provider.wallet.publicKey,
systemProgram: systemProgram.programId,
tokenMintAddress: mintKeypair.publicKey,
tokenProgram: tokenProgram.programId,
walletAddress: provider.wallet.publicKey,
})
.preInstructions(
await Promise.all([
tokenProgram.account.mint.createInstruction(mintKeypair),
tokenProgram.methods
.initializeMint(mintDecimals, provider.wallet.publicKey, null)
.accounts({
mint: mintKeypair.publicKey,
rent: SYSVAR_RENT_PUBKEY,
})
.instruction(),
])
)
.signers([mintKeypair])
.rpc();
// assert
const tokenAccount = await tokenProgram.account.account.fetch(
associatedToken
);
assert.ok(tokenAccount.mint.equals(mintKeypair.publicKey));
});
});