litesvm.test.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Program } from '@coral-xyz/anchor';
  2. import { Keypair, PublicKey } from '@solana/web3.js';
  3. import { LiteSVMProvider, fromWorkspace } from 'anchor-litesvm';
  4. import { assert } from 'chai';
  5. import { CloseAccountProgram } from '../target/types/close_account_program';
  6. const IDL = require('../target/idl/close_account_program.json');
  7. describe('close-an-account', async () => {
  8. let client: any;
  9. let provider: LiteSVMProvider;
  10. let program: Program<CloseAccountProgram>;
  11. let payer: Keypair;
  12. let userAccountAddress: PublicKey;
  13. before(async () => {
  14. client = fromWorkspace('');
  15. provider = new LiteSVMProvider(client);
  16. payer = provider.wallet.payer;
  17. program = new Program<CloseAccountProgram>(IDL, provider);
  18. // Derive the PDA for the user's account.
  19. [userAccountAddress] = PublicKey.findProgramAddressSync([Buffer.from('USER'), payer.publicKey.toBuffer()], program.programId);
  20. });
  21. it('Create Account', async () => {
  22. await program.methods
  23. .createUser('John Doe')
  24. .accounts({
  25. user: payer.publicKey,
  26. })
  27. .rpc();
  28. // Fetch the account data
  29. const userAccount = await program.account.userState.fetch(userAccountAddress);
  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. })
  39. .rpc();
  40. // The account should no longer exist, returning null.
  41. try {
  42. const userAccount = await program.account.userState.fetchNullable(userAccountAddress);
  43. assert.equal(userAccount, null);
  44. } catch (err) {
  45. // Won't return null and will throw an error in anchor-bankrun'
  46. assert.equal(err.message, `Could not find ${userAccountAddress}`);
  47. }
  48. });
  49. });