SessionTest.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using GplSession.Program;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using Solana.Unity.Bolt.Test;
  4. using Solana.Unity.Programs;
  5. using Solana.Unity.Wallet;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Threading.Tasks;
  9. using World.Program;
  10. namespace SessionTest {
  11. public class Test {
  12. public static async Task Run(Framework framework) {
  13. await CreateSession(framework);
  14. await AddEntity(framework);
  15. await InitializePositionComponent(framework);
  16. await ApplyFlySystemOnComponentUsingSessionToken(framework);
  17. }
  18. public static async Task CreateSession(Framework framework) {
  19. framework.SessionToken = WorldProgram.FindSessionTokenPda(framework.SessionSigner.Account.PublicKey, framework.Wallet.Account.PublicKey);
  20. var createSession = new CreateSessionAccounts() {
  21. SessionToken = framework.SessionToken,
  22. SessionSigner = framework.SessionSigner.Account.PublicKey,
  23. Authority = framework.Wallet.Account.PublicKey,
  24. TargetProgram = new PublicKey(WorldProgram.ID)
  25. };
  26. var instruction = GplSessionProgram.CreateSession(createSession, true, null, 100000000);
  27. await framework.SendAndConfirmInstruction(instruction, new List<Account> { framework.Wallet.Account, framework.SessionSigner.Account });
  28. }
  29. public static async Task AddEntity(Framework framework) {
  30. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.SessionSigner.Account.PublicKey);
  31. framework.SessionEntityPda = addEntity.Pda;
  32. await framework.SendAndConfirmInstruction(addEntity.Instruction, new List<Account> { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey);
  33. }
  34. public static async Task InitializePositionComponent(Framework framework) {
  35. var initializeComponent = await Bolt.World.InitializeComponent(framework.SessionSigner.Account.PublicKey, framework.SessionEntityPda, framework.ExampleComponentPosition);
  36. framework.SessionComponentPositionPda = initializeComponent.Pda;
  37. await framework.SendAndConfirmInstruction(initializeComponent.Instruction, new List<Account> { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey);
  38. }
  39. public static async Task ApplyFlySystemOnComponentUsingSessionToken(Framework framework) {
  40. var instruction = Bolt.World.ApplySystem(
  41. framework.WorldPda,
  42. framework.SystemSimpleMovement,
  43. [new Bolt.World.EntityType(framework.SessionEntityPda, [framework.ExampleComponentPosition])],
  44. new { direction = "Right" },
  45. framework.SessionSigner.Account.PublicKey,
  46. framework.SessionToken
  47. );
  48. await framework.SendAndConfirmInstruction(instruction, new List<Account> { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey);
  49. var accountInfo = await framework.GetAccountInfo(framework.SessionComponentPositionPda);
  50. var data = Convert.FromBase64String(accountInfo.Data[0]);
  51. var position = Position.Accounts.Position.Deserialize(data);
  52. Assert.AreEqual(1, position.X);
  53. Assert.AreEqual(0, position.Y);
  54. Assert.AreEqual(0, position.Z);
  55. }
  56. }
  57. }