test.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import * as anchor from "@coral-xyz/anchor";
  2. import { AnchorProgramExample } from "../target/types/anchor_program_example";
  3. describe("PDAs", () => {
  4. const provider = anchor.AnchorProvider.env();
  5. anchor.setProvider(provider);
  6. const payer = provider.wallet as anchor.Wallet;
  7. const program = anchor.workspace
  8. .AnchorProgramExample as anchor.Program<AnchorProgramExample>;
  9. let testUser = anchor.web3.Keypair.generate();
  10. it("Create a test user", async () => {
  11. let ix = anchor.web3.SystemProgram.createAccount({
  12. fromPubkey: payer.publicKey,
  13. lamports: await provider.connection.getMinimumBalanceForRentExemption(0),
  14. newAccountPubkey: testUser.publicKey,
  15. programId: anchor.web3.SystemProgram.programId,
  16. space: 0,
  17. });
  18. await anchor.web3.sendAndConfirmTransaction(
  19. provider.connection,
  20. new anchor.web3.Transaction().add(ix),
  21. [payer.payer, testUser]
  22. );
  23. console.log(`Local Wallet: ${payer.publicKey}`);
  24. console.log(`Created User: ${testUser.publicKey}`);
  25. });
  26. function derivePageVisitsPda(userPubkey: anchor.web3.PublicKey) {
  27. return anchor.web3.PublicKey.findProgramAddressSync(
  28. [Buffer.from("page_visits"), userPubkey.toBuffer()],
  29. program.programId
  30. )[0];
  31. }
  32. it("Create the page visits tracking PDA", async () => {
  33. await program.methods
  34. .createPageVisits()
  35. .accounts({
  36. pageVisits: derivePageVisitsPda(testUser.publicKey),
  37. user: testUser.publicKey,
  38. payer: payer.publicKey,
  39. systemProgram: anchor.web3.SystemProgram.programId,
  40. })
  41. .signers([payer.payer])
  42. .rpc();
  43. });
  44. it("Visit the page!", async () => {
  45. await program.methods
  46. .incrementPageVisits()
  47. .accounts({
  48. pageVisits: derivePageVisitsPda(testUser.publicKey),
  49. user: testUser.publicKey,
  50. payer: payer.publicKey,
  51. })
  52. .signers([payer.payer])
  53. .rpc();
  54. });
  55. it("Visit the page!", async () => {
  56. await program.methods
  57. .incrementPageVisits()
  58. .accounts({
  59. pageVisits: derivePageVisitsPda(testUser.publicKey),
  60. user: testUser.publicKey,
  61. payer: payer.publicKey,
  62. })
  63. .signers([payer.payer])
  64. .rpc();
  65. });
  66. it("View page visits", async () => {
  67. const pageVisits = await program.account.pageVisits.fetch(
  68. await derivePageVisitsPda(testUser.publicKey)
  69. );
  70. console.log(`Number of page visits: ${pageVisits.pageVisits}`);
  71. });
  72. });