using Content.Server.GameTicking;
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 pair = await PoolManager.GetServerClient();
var server = 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(GameTicker.ObserverPrototypeName, new MapCoordinates(0, 0, map));
logger.Info($"Spawned followed observer: {entMan.ToPrettyString(followed)}");
// Spawn an observer to follow another observer.
var follower = entMan.SpawnEntity(GameTicker.ObserverPrototypeName, new MapCoordinates(0, 0, map));
logger.Info($"Spawned follower observer: {entMan.ToPrettyString(follower)}");
followerSystem.StartFollowingEntity(follower, followed);
entMan.DeleteEntity(mapMan.GetMapEntityId(map));
});
await pair.CleanReturnAsync();
}
}