component.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { assert, expect } from "chai";
  2. import {
  3. anchor,
  4. AddEntity,
  5. ApplySystem,
  6. InitializeComponent,
  7. } from "../../../clients/bolt-sdk/lib";
  8. import { Keypair } from "@solana/web3.js";
  9. export function component(framework) {
  10. describe("Component authority", () => {
  11. let entity: anchor.web3.PublicKey;
  12. let component: anchor.web3.PublicKey;
  13. it("Add authority test entity", async () => {
  14. const addEntity = await AddEntity({
  15. payer: framework.provider.wallet.publicKey,
  16. world: framework.worldPda,
  17. connection: framework.provider.connection,
  18. });
  19. await framework.provider.sendAndConfirm(addEntity.transaction);
  20. entity = addEntity.entityPda; // Saved for later
  21. });
  22. it("Initialize position component with authority on authority test entity", async () => {
  23. const initializeComponent = await InitializeComponent({
  24. payer: framework.provider.wallet.publicKey,
  25. entity: entity,
  26. componentId: framework.exampleComponentPosition.programId,
  27. authority: framework.provider.wallet.publicKey,
  28. });
  29. await framework.provider.sendAndConfirm(initializeComponent.transaction);
  30. component = initializeComponent.componentPda; // Saved for later
  31. });
  32. it("Shouldn't apply fly system on authority test entity with wrong authority", async () => {
  33. const positionBefore =
  34. await framework.exampleComponentPosition.account.position.fetch(
  35. component,
  36. );
  37. const keypair = Keypair.generate();
  38. const applySystem = await ApplySystem({
  39. authority: keypair.publicKey,
  40. systemId: framework.systemFly.programId,
  41. world: framework.worldPda,
  42. entities: [
  43. {
  44. entity: entity,
  45. components: [
  46. { componentId: framework.exampleComponentPosition.programId },
  47. ],
  48. },
  49. ],
  50. });
  51. try {
  52. await framework.provider.sendAndConfirm(applySystem.transaction, [
  53. keypair,
  54. ]);
  55. assert.fail(
  56. "Shouldn't apply fly system on authority test entity with wrong authority",
  57. );
  58. } catch (error) {
  59. expect(error.logs.join("\n")).to.contain(
  60. "Error Code: InvalidAuthority",
  61. );
  62. }
  63. const positionAfter =
  64. await framework.exampleComponentPosition.account.position.fetch(
  65. component,
  66. );
  67. expect(positionBefore.x.toNumber()).to.equal(positionAfter.x.toNumber());
  68. expect(positionBefore.y.toNumber()).to.equal(positionAfter.y.toNumber());
  69. expect(positionBefore.z.toNumber()).to.equal(positionAfter.z.toNumber());
  70. });
  71. it("Apply Fly System on authority test entity should succeed with correct authority", async () => {
  72. const positionBefore =
  73. await framework.exampleComponentPosition.account.position.fetch(
  74. component,
  75. );
  76. const applySystem = await ApplySystem({
  77. authority: framework.provider.wallet.publicKey,
  78. systemId: framework.systemFly.programId,
  79. world: framework.worldPda,
  80. entities: [
  81. {
  82. entity,
  83. components: [
  84. { componentId: framework.exampleComponentPosition.programId },
  85. ],
  86. },
  87. ],
  88. });
  89. await framework.provider.sendAndConfirm(applySystem.transaction);
  90. const positionAfter =
  91. await framework.exampleComponentPosition.account.position.fetch(
  92. component,
  93. );
  94. expect(positionAfter.x.toNumber()).to.equal(positionBefore.x.toNumber());
  95. expect(positionAfter.y.toNumber()).to.equal(positionBefore.y.toNumber());
  96. expect(positionAfter.z.toNumber()).to.equal(
  97. positionBefore.z.toNumber() + 1,
  98. );
  99. });
  100. });
  101. }