1
0

ActionsAddedTest.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Linq;
  2. using Content.Shared.Actions;
  3. using Content.Shared.CombatMode;
  4. using Robust.Server.Player;
  5. using Robust.Shared.GameObjects;
  6. namespace Content.IntegrationTests.Tests.Actions;
  7. /// <summary>
  8. /// This tests checks that actions properly get added to an entity's actions component..
  9. /// </summary>
  10. [TestFixture]
  11. public sealed class ActionsAddedTest
  12. {
  13. // TODO add magboot test (inventory action)
  14. // TODO add ghost toggle-fov test (client-side action)
  15. [Test]
  16. public async Task TestCombatActionsAdded()
  17. {
  18. await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true, DummyTicker = false });
  19. var server = pair.Server;
  20. var client = pair.Client;
  21. var sEntMan = server.ResolveDependency<IEntityManager>();
  22. var cEntMan = client.ResolveDependency<IEntityManager>();
  23. var clientSession = client.Session;
  24. var serverSession = server.ResolveDependency<IPlayerManager>().Sessions.Single();
  25. var sActionSystem = server.System<SharedActionsSystem>();
  26. var cActionSystem = client.System<SharedActionsSystem>();
  27. // Dummy ticker is disabled - client should be in control of a normal mob.
  28. Assert.That(serverSession.AttachedEntity, Is.Not.Null);
  29. var serverEnt = serverSession.AttachedEntity!.Value;
  30. var clientEnt = clientSession!.AttachedEntity!.Value;
  31. Assert.That(sEntMan.EntityExists(serverEnt));
  32. Assert.That(cEntMan.EntityExists(clientEnt));
  33. Assert.That(sEntMan.HasComponent<ActionsComponent>(serverEnt));
  34. Assert.That(cEntMan.HasComponent<ActionsComponent>(clientEnt));
  35. Assert.That(sEntMan.HasComponent<CombatModeComponent>(serverEnt));
  36. Assert.That(cEntMan.HasComponent<CombatModeComponent>(clientEnt));
  37. var sComp = sEntMan.GetComponent<ActionsComponent>(serverEnt);
  38. var cComp = cEntMan.GetComponent<ActionsComponent>(clientEnt);
  39. // Mob should have a combat-mode action.
  40. // This action should have a non-null event both on the server & client.
  41. var evType = typeof(ToggleCombatActionEvent);
  42. var sActions = sActionSystem.GetActions(serverEnt).Where(
  43. x => x.Comp is InstantActionComponent act && act.Event?.GetType() == evType).ToArray();
  44. var cActions = cActionSystem.GetActions(clientEnt).Where(
  45. x => x.Comp is InstantActionComponent act && act.Event?.GetType() == evType).ToArray();
  46. Assert.That(sActions.Length, Is.EqualTo(1));
  47. Assert.That(cActions.Length, Is.EqualTo(1));
  48. var sAct = sActions[0].Comp;
  49. var cAct = cActions[0].Comp;
  50. Assert.That(sAct, Is.Not.Null);
  51. Assert.That(cAct, Is.Not.Null);
  52. // Finally, these two actions are not the same object
  53. // required, because integration tests do not respect the [NonSerialized] attribute and will simply events by reference.
  54. Assert.That(ReferenceEquals(sAct, cAct), Is.False);
  55. Assert.That(ReferenceEquals(sAct.BaseEvent, cAct.BaseEvent), Is.False);
  56. await pair.CleanReturnAsync();
  57. }
  58. }