using Content.Shared.Follower; using Robust.Shared.GameObjects; using Robust.Shared.Log; using Robust.Shared.Map; namespace Content.IntegrationTests.Tests; [TestFixture, TestOf(typeof(FollowerSystem))] public sealed class FollowerSystemTest { /// /// This test ensures that deleting a map while an entity follows another doesn't throw any exceptions. /// [Test] public async Task FollowerMapDeleteTest() { await using var pairTracker = await PoolManager.GetServerClient(new() { NoClient = true }); var server = pairTracker.Pair.Server; var entMan = server.ResolveDependency(); var mapMan = server.ResolveDependency(); var sysMan = server.ResolveDependency(); var logMan = server.ResolveDependency(); var logger = logMan.RootSawmill; await server.WaitPost(() => { var followerSystem = sysMan.GetEntitySystem(); // Create a map to spawn the observers on. var map = mapMan.CreateMap(); // Spawn an observer to be followed. var followed = entMan.SpawnEntity("MobObserver", new MapCoordinates(0, 0, map)); logger.Info($"Spawned followed observer: {entMan.ToPrettyString(followed)}"); // Spawn an observer to follow another observer. var follower = entMan.SpawnEntity("MobObserver", new MapCoordinates(0, 0, map)); logger.Info($"Spawned follower observer: {entMan.ToPrettyString(follower)}"); followerSystem.StartFollowingEntity(follower, followed); entMan.DeleteEntity(mapMan.GetMapEntityId(map)); }); await pairTracker.CleanReturnAsync(); } }