session.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import { Keypair } from "@solana/web3.js";
  2. import {
  3. AddEntity,
  4. CreateSession,
  5. InitializeComponent,
  6. ApplySystem,
  7. anchor,
  8. BN,
  9. Session,
  10. } from "../../clients/bolt-sdk/lib";
  11. import { expect } from "chai";
  12. // TODO: Create the API for it.
  13. export function session(framework) {
  14. describe("Session", () => {
  15. let session: Session;
  16. let entity: anchor.web3.PublicKey;
  17. let component: anchor.web3.PublicKey;
  18. let entityWithAuthority: anchor.web3.PublicKey;
  19. let componentWithAuthority: anchor.web3.PublicKey;
  20. it("Create Session", async () => {
  21. const createSession = await CreateSession({
  22. authority: framework.provider.wallet.publicKey,
  23. topUp: new BN(1000000000),
  24. });
  25. session = createSession.session;
  26. await framework.provider.sendAndConfirm(createSession.transaction, [
  27. session.signer,
  28. ]);
  29. });
  30. it("Add entity 1", async () => {
  31. const addEntity = await AddEntity({
  32. payer: framework.provider.wallet.publicKey,
  33. world: framework.worldPda,
  34. connection: framework.provider.connection,
  35. });
  36. await framework.provider.sendAndConfirm(addEntity.transaction);
  37. entity = addEntity.entityPda;
  38. });
  39. it("Initialize position component", async () => {
  40. const initializeComponent = await InitializeComponent({
  41. payer: session.signer.publicKey,
  42. entity: entity,
  43. componentId: framework.exampleComponentPosition.programId,
  44. });
  45. await framework.provider.sendAndConfirm(initializeComponent.transaction, [
  46. session.signer,
  47. ]);
  48. component = initializeComponent.componentPda;
  49. });
  50. it("Apply Fly System on component using session token", async () => {
  51. const positionBefore =
  52. await framework.exampleComponentPosition.account.position.fetch(
  53. component,
  54. );
  55. const applySystem = await ApplySystem({
  56. authority: session.signer.publicKey,
  57. systemId: framework.systemFly.programId,
  58. world: framework.worldPda,
  59. session,
  60. entities: [
  61. {
  62. entity: entity,
  63. components: [
  64. { componentId: framework.exampleComponentPosition.programId },
  65. ],
  66. },
  67. ],
  68. });
  69. await framework.provider.sendAndConfirm(applySystem.transaction, [
  70. session.signer,
  71. ]);
  72. const positionAfter =
  73. await framework.exampleComponentPosition.account.position.fetch(
  74. component,
  75. );
  76. expect(positionAfter.x.toNumber()).to.equal(positionBefore.x.toNumber());
  77. expect(positionAfter.y.toNumber()).to.equal(positionBefore.y.toNumber());
  78. expect(positionAfter.z.toNumber()).to.equal(
  79. positionBefore.z.toNumber() + 1,
  80. );
  81. });
  82. it("Add entity for authority test", async () => {
  83. const addEntity = await AddEntity({
  84. payer: framework.provider.wallet.publicKey,
  85. world: framework.worldPda,
  86. connection: framework.provider.connection,
  87. });
  88. await framework.provider.sendAndConfirm(addEntity.transaction);
  89. entityWithAuthority = addEntity.entityPda;
  90. });
  91. it("Initialize position component with authority", async () => {
  92. const initializeComponent = await InitializeComponent({
  93. payer: session.signer.publicKey,
  94. entity: entityWithAuthority,
  95. componentId: framework.exampleComponentPosition.programId,
  96. authority: framework.provider.wallet.publicKey,
  97. });
  98. await framework.provider.sendAndConfirm(initializeComponent.transaction, [
  99. session.signer,
  100. ]);
  101. componentWithAuthority = initializeComponent.componentPda;
  102. });
  103. it("Apply Fly System on component with authority using session token", async () => {
  104. const positionBefore =
  105. await framework.exampleComponentPosition.account.position.fetch(
  106. componentWithAuthority,
  107. );
  108. const applySystem = await ApplySystem({
  109. authority: session.signer.publicKey,
  110. systemId: framework.systemFly.programId,
  111. world: framework.worldPda,
  112. session,
  113. entities: [
  114. {
  115. entity: entityWithAuthority,
  116. components: [
  117. { componentId: framework.exampleComponentPosition.programId },
  118. ],
  119. },
  120. ],
  121. });
  122. await framework.provider.sendAndConfirm(applySystem.transaction, [
  123. session.signer,
  124. ]);
  125. const positionAfter =
  126. await framework.exampleComponentPosition.account.position.fetch(
  127. componentWithAuthority,
  128. );
  129. expect(positionAfter.x.toNumber()).to.equal(positionBefore.x.toNumber());
  130. expect(positionAfter.y.toNumber()).to.equal(positionBefore.y.toNumber());
  131. expect(positionAfter.z.toNumber()).to.equal(
  132. positionBefore.z.toNumber() + 1,
  133. );
  134. });
  135. });
  136. }