Skip to content

Commit

Permalink
refactor: renamed
Browse files Browse the repository at this point in the history
  • Loading branch information
nickfrosty committed Feb 16, 2025
1 parent a2600df commit 60d00a9
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,17 @@ import { Address } from "@solana/addresses";
import { IInstruction } from "@solana/instructions";
import { getCreateAccountInstruction } from "@solana-program/system";
import { getMinimumBalanceForRentExemption } from "../core";
import { getCreateMetadataAccountV3Instruction } from "../programs/token-metadata";
import {
getCreateMetadataAccountV3Instruction,
getTokenMetadataAddress,
} from "../programs/token-metadata";
import {
createTokenInstructions,
CreateTokenInstructionsArgs,
getCreateTokenInstructions,
GetCreateTokenInstructionsArgs,
} from "../programs/create-token-instructions";

import { TOKEN_PROGRAM_ADDRESS, getInitializeMintInstruction } from "@solana-program/token";
import {
TOKEN_2022_PROGRAM_ADDRESS,
getMintSize,
getInitializeMintInstruction as getInitializeMintInstructionToken22,
extension,
getInitializeTokenMetadataInstruction,
getInitializeMetadataPointerInstruction,
} from "@solana-program/token-2022";
Expand All @@ -26,11 +22,14 @@ const MOCK_SPACE = 122n;
const MOCK_RENT = 10000n;

jest.mock("../core", () => ({
// preserve all real implementations to only change the desired ones
...jest.requireActual("../core"),
getMinimumBalanceForRentExemption: jest.fn(),
}));

jest.mock("../programs/token-metadata", () => ({
getTokenMetadataAddress: jest.fn(),
// preserve all real implementations to only change the desired ones
...jest.requireActual("../programs/token-metadata"),
getCreateMetadataAccountV3Instruction: jest.fn(),
}));

Expand All @@ -39,20 +38,21 @@ jest.mock("@solana-program/system", () => ({
}));

jest.mock("@solana-program/token", () => ({
TOKEN_PROGRAM_ADDRESS: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
// preserve all real implementations to only change the desired ones
...jest.requireActual("@solana-program/token"),
getInitializeMintInstruction: jest.fn(),
}));

jest.mock("@solana-program/token-2022", () => ({
TOKEN_2022_PROGRAM_ADDRESS: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb",
// preserve all real implementations to only change the desired ones
...jest.requireActual("@solana-program/token-2022"),
getMintSize: jest.fn(),
getInitializeMintInstruction: jest.fn(),
extension: jest.fn(),
getInitializeMetadataPointerInstruction: jest.fn(),
getInitializeTokenMetadataInstruction: jest.fn(),
}));

describe("createTokenInstructions", () => {
describe("getCreateTokenInstructions", () => {
let mockPayer: KeyPairSigner;
let mockMint: KeyPairSigner;

Expand All @@ -69,7 +69,7 @@ describe("createTokenInstructions", () => {
let mockInitializeMetadataPointerInstruction: IInstruction;
let mockInitializeTokenMetadataInstruction: IInstruction;

const metadata: CreateTokenInstructionsArgs["metadata"] = {
const metadata: GetCreateTokenInstructionsArgs["metadata"] = {
name: "Test Token",
symbol: "TEST",
uri: "https://example.com/metadata.json",
Expand Down Expand Up @@ -125,26 +125,24 @@ describe("createTokenInstructions", () => {
(getInitializeTokenMetadataInstruction as jest.Mock).mockReturnValue(
mockInitializeTokenMetadataInstruction,
);
(extension as jest.Mock).mockReturnValue("");

(getMinimumBalanceForRentExemption as jest.Mock).mockReturnValue(MOCK_RENT);
(getMintSize as jest.Mock).mockReturnValue(MOCK_SPACE);
(getTokenMetadataAddress as jest.Mock).mockResolvedValue("metadataAddress123");
});

afterEach(() => {
jest.clearAllMocks();
});

it("should create basic token instructions with default values", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMetadataAddress,
metadata,
};

const instructions = createTokenInstructions(args);
const instructions = getCreateTokenInstructions(args);

expect(instructions).toHaveLength(3);
expect(instructions[0]).toBe(mockCreateAccountInstruction);
Expand Down Expand Up @@ -189,30 +187,30 @@ describe("createTokenInstructions", () => {
});

it("should throw error for unsupported token program", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMetadataAddress,
metadata,
tokenProgram: "UnsupportedProgramId" as Address,
};

expect(() => createTokenInstructions(args)).toThrow(
expect(() => getCreateTokenInstructions(args)).toThrow(
"Unsupported token program. Try 'TOKEN_PROGRAM_ADDRESS' or 'TOKEN_2022_PROGRAM_ADDRESS'",
);
});

describe("should use original token program", () => {
it("should use original token program when specified", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMetadataAddress,
tokenProgram: TOKEN_PROGRAM_ADDRESS,
metadata,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getCreateAccountInstruction).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -229,15 +227,15 @@ describe("createTokenInstructions", () => {
});

it("should use custom decimals when provided", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
metadataAddress: mockMetadataAddress,
mint: mockMint,
decimals: 6,
metadata,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getInitializeMintInstruction).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -248,7 +246,7 @@ describe("createTokenInstructions", () => {
});

it("should use custom mint and freeze authorities when provided", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMetadataAddress,
Expand All @@ -257,7 +255,7 @@ describe("createTokenInstructions", () => {
freezeAuthority: mockFreezeAuthority.address,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getInitializeMintInstruction).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -268,21 +266,21 @@ describe("createTokenInstructions", () => {
});

it("should add metadata instruction when metadata is provided", () => {
const metadata: CreateTokenInstructionsArgs["metadata"] = {
const metadata: GetCreateTokenInstructionsArgs["metadata"] = {
name: "Test Token",
symbol: "TEST",
uri: "https://example.com/metadata.json",
isMutable: false,
};

const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMetadataAddress,
metadata,
};

const instructions = createTokenInstructions(args);
const instructions = getCreateTokenInstructions(args);

expect(instructions).toHaveLength(3);
expect(instructions[2]).toBe(mockCreateMetadataInstruction);
Expand Down Expand Up @@ -312,15 +310,15 @@ describe("createTokenInstructions", () => {
it("should use custom metadata update authority", () => {
const customUpdateAuthority = { address: "customUpdateAuth" } as KeyPairSigner;

const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMetadataAddress,
updateAuthority: customUpdateAuthority,
metadata,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getCreateMetadataAccountV3Instruction).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -332,15 +330,15 @@ describe("createTokenInstructions", () => {

describe("should use token22 program", () => {
it("should use Token-2022 program when specified", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMint.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,
metadata,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getCreateAccountInstruction).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -357,7 +355,7 @@ describe("createTokenInstructions", () => {
});

it("should use custom decimals when provided", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMint.address,
Expand All @@ -366,7 +364,7 @@ describe("createTokenInstructions", () => {
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getInitializeMintInstructionToken22).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -377,7 +375,7 @@ describe("createTokenInstructions", () => {
});

it("should use custom mint and freeze authorities when provided", () => {
const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMint.address,
Expand All @@ -387,7 +385,7 @@ describe("createTokenInstructions", () => {
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,
};

createTokenInstructions(args);
getCreateTokenInstructions(args);

expect(getInitializeMintInstructionToken22).toHaveBeenCalledWith(
expect.objectContaining({
Expand All @@ -398,22 +396,22 @@ describe("createTokenInstructions", () => {
});

it("should add metadata instruction when metadata is provided", () => {
const metadata: CreateTokenInstructionsArgs["metadata"] = {
const metadata: GetCreateTokenInstructionsArgs["metadata"] = {
name: "Test Token22",
symbol: "TEST",
uri: "https://example.com/metadata.json",
isMutable: false,
};

const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMint.address,
metadata,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,
};

const instructions = createTokenInstructions(args);
const instructions = getCreateTokenInstructions(args);

expect(instructions).toHaveLength(4);
expect(instructions[1]).toBe(mockInitializeMetadataPointerInstruction);
Expand Down Expand Up @@ -451,7 +449,7 @@ describe("createTokenInstructions", () => {
it("should use custom metadata update authority", () => {
const customUpdateAuthority = { address: "customUpdateAuth" } as KeyPairSigner;

const args: CreateTokenInstructionsArgs = {
const args: GetCreateTokenInstructionsArgs = {
payer: mockPayer,
mint: mockMint,
metadataAddress: mockMint.address,
Expand All @@ -460,7 +458,7 @@ describe("createTokenInstructions", () => {
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS,
};

const instructions = createTokenInstructions(args);
const instructions = getCreateTokenInstructions(args);

expect(instructions).toHaveLength(4);
expect(instructions[1]).toBe(mockInitializeMetadataPointerInstruction);
Expand Down
20 changes: 10 additions & 10 deletions packages/gill/src/__typetests__/create-token-transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,29 @@ import type {
} from "@solana/transaction-messages";
import { signTransactionMessageWithSigners } from "@solana/signers";

import { CreateTokenInstructionsArgs, createTokenTransaction } from "../programs";
import { GetCreateTokenInstructionsArgs, getCreateTokenTransaction } from "../programs";

// [DESCRIBE] createTokenTransaction
// [DESCRIBE] getCreateTokenTransaction
async () => {
const signer = null as unknown as KeyPairSigner;
const latestBlockhash =
null as unknown as TransactionMessageWithBlockhashLifetime["lifetimeConstraint"];
const metadata = {} as unknown as CreateTokenInstructionsArgs["metadata"];
const metadata = {} as unknown as GetCreateTokenInstructionsArgs["metadata"];

// Legacy transaction
{
(await createTokenTransaction({
(await getCreateTokenTransaction({
payer: signer,
metadata,
})) satisfies BaseTransactionMessage<"legacy">;

(await createTokenTransaction({
(await getCreateTokenTransaction({
version: "legacy",
payer: signer,
metadata,
})) satisfies BaseTransactionMessage<"legacy">;

const txNotSignable = (await createTokenTransaction({
const txNotSignable = (await getCreateTokenTransaction({
version: "legacy",
payer: signer,
metadata,
Expand All @@ -39,7 +39,7 @@ async () => {
// @ts-expect-error Should not be a signable transaction
signTransactionMessageWithSigners(txNotSignable);

const txSignable = (await createTokenTransaction({
const txSignable = (await getCreateTokenTransaction({
version: "legacy",
payer: signer,
metadata,
Expand All @@ -52,13 +52,13 @@ async () => {

// Version 0 transaction
{
(await createTokenTransaction({
(await getCreateTokenTransaction({
version: 0,
payer: signer,
metadata,
})) satisfies BaseTransactionMessage<0>;

const txNotSignable = (await createTokenTransaction({
const txNotSignable = (await getCreateTokenTransaction({
version: 0,
payer: signer,
metadata,
Expand All @@ -68,7 +68,7 @@ async () => {
// @ts-expect-error Should not be a signable transaction
signTransactionMessageWithSigners(txNotSignable);

const txSignable = (await createTokenTransaction({
const txSignable = (await getCreateTokenTransaction({
version: 0,
payer: signer,
metadata,
Expand Down
Loading

0 comments on commit 60d00a9

Please sign in to comment.