123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- const assert = require("assert");
- const anchor = require("@project-serum/anchor");
- describe("basic-1", () => {
- // Use a local provider.
- const provider = anchor.Provider.local();
- // Configure the client to use the local cluster.
- anchor.setProvider(provider);
- it("Creates and initializes an account in two different transactions", async () => {
- // The program owning the account to create.
- const program = anchor.workspace.Basic1;
- // The Account to create.
- const myAccount = anchor.web3.Keypair.generate();
- // Create account transaction.
- const tx = new anchor.web3.Transaction();
- tx.add(
- anchor.web3.SystemProgram.createAccount({
- fromPubkey: provider.wallet.publicKey,
- newAccountPubkey: myAccount.publicKey,
- space: 8 + 8,
- lamports: await provider.connection.getMinimumBalanceForRentExemption(
- 8 + 8
- ),
- programId: program.programId,
- })
- );
- // Execute the transaction against the cluster.
- await provider.send(tx, [myAccount]);
- // Execute the RPC.
- // #region code-separated
- await program.rpc.initialize(new anchor.BN(1234), {
- accounts: {
- myAccount: myAccount.publicKey,
- rent: anchor.web3.SYSVAR_RENT_PUBKEY,
- },
- });
- // #endregion code-separated
- // Fetch the newly created account from the cluster.
- const account = await program.account.myAccount.fetch(myAccount.publicKey);
- // Check it's state was initialized.
- assert.ok(account.data.eq(new anchor.BN(1234)));
- });
- // Reference to an account to use between multiple tests.
- let _myAccount = undefined;
- it("Creates and initializes an account in a single atomic transaction", async () => {
- // The program to execute.
- const program = anchor.workspace.Basic1;
- // #region code
- // The Account to create.
- const myAccount = anchor.web3.Keypair.generate();
- // Atomically create the new account and initialize it with the program.
- await program.rpc.initialize(new anchor.BN(1234), {
- accounts: {
- myAccount: myAccount.publicKey,
- rent: anchor.web3.SYSVAR_RENT_PUBKEY,
- },
- signers: [myAccount],
- instructions: [
- anchor.web3.SystemProgram.createAccount({
- fromPubkey: provider.wallet.publicKey,
- newAccountPubkey: myAccount.publicKey,
- space: 8 + 8, // Add 8 for the account discriminator.
- lamports: await provider.connection.getMinimumBalanceForRentExemption(
- 8 + 8
- ),
- programId: program.programId,
- }),
- ],
- });
- // Fetch the newly created account from the cluster.
- const account = await program.account.myAccount.fetch(myAccount.publicKey);
- // Check it's state was initialized.
- assert.ok(account.data.eq(new anchor.BN(1234)));
- // #endregion code
- });
- it("Creates and initializes an account in a single atomic transaction (simplified)", async () => {
- // The program to execute.
- const program = anchor.workspace.Basic1;
- // The Account to create.
- const myAccount = anchor.web3.Keypair.generate();
- // Atomically create the new account and initialize it with the program.
- // #region code-simplified
- await program.rpc.initialize(new anchor.BN(1234), {
- accounts: {
- myAccount: myAccount.publicKey,
- rent: anchor.web3.SYSVAR_RENT_PUBKEY,
- },
- signers: [myAccount],
- instructions: [await program.account.myAccount.createInstruction(myAccount)],
- });
- // #endregion code-simplified
- // Fetch the newly created account from the cluster.
- const account = await program.account.myAccount.fetch(myAccount.publicKey);
- // Check it's state was initialized.
- assert.ok(account.data.eq(new anchor.BN(1234)));
- // Store the account for the next test.
- _myAccount = myAccount;
- });
- it("Updates a previously created account", async () => {
- const myAccount = _myAccount;
- // #region update-test
- // The program to execute.
- const program = anchor.workspace.Basic1;
- // Invoke the update rpc.
- await program.rpc.update(new anchor.BN(4321), {
- accounts: {
- myAccount: myAccount.publicKey,
- },
- });
- // Fetch the newly updated account.
- const account = await program.account.myAccount.fetch(myAccount.publicKey);
- // Check it's state was mutated.
- assert.ok(account.data.eq(new anchor.BN(4321)));
- // #endregion update-test
- });
- });
|