test.ts 2.4 KB

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