SessionTest.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. }
  17. public static async Task CreateSession(Framework framework) {
  18. framework.SessionToken = WorldProgram.FindSessionTokenPda(framework.SessionSigner.Account.PublicKey, framework.Wallet.Account.PublicKey);
  19. var createSession = new CreateSessionAccounts() {
  20. SessionToken = framework.SessionToken,
  21. SessionSigner = framework.SessionSigner.Account.PublicKey,
  22. Authority = framework.Wallet.Account.PublicKey,
  23. TargetProgram = new PublicKey(WorldProgram.ID)
  24. };
  25. var instruction = GplSessionProgram.CreateSession(createSession, true, 1000, 100000000);
  26. await framework.SendAndConfirmInstruction(instruction, new List<Account> { framework.Wallet.Account, framework.SessionSigner.Account });
  27. }
  28. public static async Task AddEntity(Framework framework) {
  29. var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.SessionSigner.Account.PublicKey);
  30. framework.SessionEntityPda = addEntity.Pda;
  31. await framework.SendAndConfirmInstruction(addEntity.Instruction, new List<Account> { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey);
  32. }
  33. public static async Task InitializePositionComponent(Framework framework) {
  34. var initializeComponent = await Bolt.World.InitializeComponent(framework.SessionSigner.Account.PublicKey, framework.SessionEntityPda, framework.ExampleComponentPosition);
  35. framework.SessionComponentPositionPda = initializeComponent.Pda;
  36. await framework.SendAndConfirmInstruction(initializeComponent.Instruction, new List<Account> { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey);
  37. }
  38. public static async Task ApplyFlySystemOnComponentUsingSessionToken(Framework framework) {
  39. var instruction = Bolt.World.ApplySystem(
  40. framework.WorldPda,
  41. framework.SystemSimpleMovement,
  42. new Bolt.World.EntityType[] {
  43. new Bolt.World.EntityType(framework.SessionEntityPda, new PublicKey[] { framework.ExampleComponentPosition })
  44. },
  45. new { direction = "Right" },
  46. framework.SessionSigner.Account.PublicKey,
  47. framework.SessionToken
  48. );
  49. await framework.SendAndConfirmInstruction(instruction, new List<Account> { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey);
  50. var accountInfo = await framework.GetAccountInfo(framework.SessionComponentPositionPda);
  51. var data = Convert.FromBase64String(accountInfo.Data[0]);
  52. var position = Position.Accounts.Position.Deserialize(data);
  53. Assert.AreEqual(1, position.X);
  54. Assert.AreEqual(0, position.Y);
  55. Assert.AreEqual(0, position.Z);
  56. }
  57. }
  58. }