From b786feffb61c49bd5979d9972bbb4c50dab8319f Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> Date: Wed, 9 Mar 2022 14:41:24 +0100 Subject: [PATCH] Adds an integration test for FollowerSystem. (#7048) --- .../Tests/FollowerSystemTest.cs | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Content.IntegrationTests/Tests/FollowerSystemTest.cs diff --git a/Content.IntegrationTests/Tests/FollowerSystemTest.cs b/Content.IntegrationTests/Tests/FollowerSystemTest.cs new file mode 100644 index 0000000000..fa8c1968d0 --- /dev/null +++ b/Content.IntegrationTests/Tests/FollowerSystemTest.cs @@ -0,0 +1,63 @@ +using System.Linq; +using System.Threading.Tasks; +using Content.Shared.Follower; +using NUnit.Framework; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Map; + +namespace Content.IntegrationTests.Tests; + +[TestFixture, TestOf(typeof(FollowerSystem))] +public sealed class FollowerSystemTest : ContentIntegrationTest +{ + /// + /// This test ensures that deleting a map while an entity follows another doesn't throw any exceptions. + /// + [Test] + public async Task FollowerMapDeleteTest() + { + var server = StartServerDummyTicker(); + await server.WaitIdleAsync(); + + await server.WaitPost(() => + { + var mapMan = IoCManager.Resolve(); + var entMan = IoCManager.Resolve(); + var sysMan = IoCManager.Resolve(); + var logger = IoCManager.Resolve().RootSawmill; + 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); + + foreach (var ent in entMan.GetEntities().ToArray()) + { + // Let's skip entities that have been deleted, as we want to get their TransformComp for extra info. + if (entMan.Deleted(ent)) + { + logger.Info($"Skipping {entMan.ToPrettyString(ent)}..."); + continue; + } + + // Log some information about the entity before we delete it. + var transform = entMan.GetComponent(ent); + logger.Info($"Deleting entity {entMan.ToPrettyString(ent)}... Parent: {entMan.ToPrettyString(transform.ParentUid)} | Children: {string.Join(", ", transform.Children.Select(c => entMan.ToPrettyString(c.Owner)))}"); + + // Actually delete the entity now. + entMan.DeleteEntity(ent); + } + }); + } +}