using System.Linq; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Robust.Server.Player; using Robust.Shared.GameObjects; using Robust.Shared.Map; namespace Content.IntegrationTests.Tests.Hands; [TestFixture] public sealed class HandTests { [Test] public async Task TestPickupDrop() { await using var pair = await PoolManager.GetServerClient(new PoolSettings { Connected = true, DummyTicker = false }); var server = pair.Server; var entMan = server.ResolveDependency(); var playerMan = server.ResolveDependency(); var mapMan = server.ResolveDependency(); var sys = entMan.System(); var data = await pair.CreateTestMap(); await pair.RunTicksSync(5); EntityUid item = default; EntityUid player = default; HandsComponent hands = default!; await server.WaitPost(() => { player = playerMan.Sessions.First().AttachedEntity!.Value; var xform = entMan.GetComponent(player); item = entMan.SpawnEntity("Crowbar", xform.MapPosition); hands = entMan.GetComponent(player); sys.TryPickup(player, item, hands.ActiveHand!); }); // run ticks here is important, as errors may happen within the container system's frame update methods. await pair.RunTicksSync(5); Assert.That(hands.ActiveHandEntity, Is.EqualTo(item)); await server.WaitPost(() => { sys.TryDrop(player, item, null!); }); await pair.RunTicksSync(5); Assert.That(hands.ActiveHandEntity, Is.Null); await server.WaitPost(() => mapMan.DeleteMap(data.MapId)); await pair.CleanReturnAsync(); } }