diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs index 414cf4bb56..37dca72137 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifier.cs @@ -3,6 +3,7 @@ using Content.Shared.Stacks; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Prototypes; +using static Robust.UnitTesting.RobustIntegrationTest; namespace Content.IntegrationTests.Tests.Interaction; @@ -54,7 +55,7 @@ public abstract partial class InteractionTest /// /// Convert applicable entity prototypes into stack prototypes. /// - public void ConvertToStack(IPrototypeManager protoMan, IComponentFactory factory) + public async Task ConvertToStack(IPrototypeManager protoMan, IComponentFactory factory, ServerIntegrationInstance server) { if (Converted) return; @@ -73,11 +74,14 @@ public abstract partial class InteractionTest return; } - if (entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), - out var stackComp)) + StackComponent? stack = null; + await server.WaitPost(() => { - Prototype = stackComp.StackTypeId; - } + entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), out stack); + }); + + if (stack != null) + Prototype = stack.StackTypeId; } } @@ -100,11 +104,14 @@ public abstract partial class InteractionTest return default; } - if (entProto.TryGetComponent(Factory.GetComponentName(typeof(StackComponent)), - out var stackComp)) + StackComponent? stack = null; + await Server.WaitPost(() => { - return await SpawnEntity((stackComp.StackTypeId, spec.Quantity), coords); - } + entProto.TryGetComponent(Factory.GetComponentName(typeof(StackComponent)), out stack); + }); + + if (stack != null) + return await SpawnEntity((stack.StackTypeId, spec.Quantity), coords); Assert.That(spec.Quantity, Is.EqualTo(1), "SpawnEntity only supports returning a singular entity"); await Server.WaitPost(() => uid = SEntMan.SpawnEntity(spec.Prototype, coords)); diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs index 520d2699c1..7f7de3318b 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.EntitySpecifierCollection.cs @@ -5,6 +5,7 @@ using Content.Shared.Stacks; using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; using Robust.Shared.Utility; +using static Robust.UnitTesting.RobustIntegrationTest; namespace Content.IntegrationTests.Tests.Interaction; @@ -111,7 +112,7 @@ public abstract partial class InteractionTest /// /// Convert applicable entity prototypes into stack prototypes. /// - public void ConvertToStacks(IPrototypeManager protoMan, IComponentFactory factory) + public async Task ConvertToStacks(IPrototypeManager protoMan, IComponentFactory factory, ServerIntegrationInstance server) { if (Converted) return; @@ -130,14 +131,17 @@ public abstract partial class InteractionTest continue; } - if (!entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), - out var stackComp)) + StackComponent? stack = null; + await server.WaitPost(() => { + entProto.TryGetComponent(factory.GetComponentName(typeof(StackComponent)), out stack); + }); + + if (stack == null) continue; - } toRemove.Add(id); - toAdd.Add((stackComp.StackTypeId, quantity)); + toAdd.Add((stack.StackTypeId, quantity)); } foreach (var id in toRemove) diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs index 95cf8a06df..19ca83a971 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs @@ -5,12 +5,9 @@ using System.Linq; using System.Numerics; using System.Reflection; using Content.Client.Construction; -using Content.Server.Atmos; -using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; using Content.Server.Construction.Components; using Content.Server.Gravity; -using Content.Server.Item; using Content.Server.Power.Components; using Content.Shared.Atmos; using Content.Shared.Construction.Prototypes; @@ -634,7 +631,7 @@ public abstract partial class InteractionTest var entities = await DoEntityLookup(flags); var found = ToEntityCollection(entities); expected.Remove(found); - expected.ConvertToStacks(ProtoMan, Factory); + await expected.ConvertToStacks(ProtoMan, Factory, Server); if (expected.Entities.Count == 0) return; @@ -670,7 +667,7 @@ public abstract partial class InteractionTest LookupFlags flags = LookupFlags.Uncontained | LookupFlags.Contained, bool shouldSucceed = true) { - spec.ConvertToStack(ProtoMan, Factory); + await spec.ConvertToStack(ProtoMan, Factory, Server); var entities = await DoEntityLookup(flags); foreach (var uid in entities) diff --git a/Content.IntegrationTests/Tests/StorageTest.cs b/Content.IntegrationTests/Tests/StorageTest.cs index 659b310661..2d28534347 100644 --- a/Content.IntegrationTests/Tests/StorageTest.cs +++ b/Content.IntegrationTests/Tests/StorageTest.cs @@ -92,23 +92,32 @@ namespace Content.IntegrationTests.Tests var allSizes = protoMan.EnumeratePrototypes().ToList(); allSizes.Sort(); - Assert.Multiple(() => + await Assert.MultipleAsync(async () => { foreach (var proto in pair.GetPrototypesWithComponent()) { if (proto.HasComponent(compFact)) continue; - if (!proto.TryGetComponent("Storage", out var storage)) + StorageComponent? storage = null; + ItemComponent? item = null; + StorageFillComponent fill = default!; + var size = 0; + await server.WaitAssertion(() => { - Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); + if (!proto.TryGetComponent("Storage", out storage)) + { + Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); + return; + } + + proto.TryGetComponent("Item", out item); + fill = (StorageFillComponent) proto.Components[id].Component; + size = GetFillSize(fill, false, protoMan, itemSys); + }); + + if (storage == null) continue; - } - - proto.TryGetComponent("Item", out var item); - - var fill = (StorageFillComponent) proto.Components[id].Component; - var size = GetFillSize(fill, false, protoMan, itemSys); var maxSize = storage.MaxItemSize; if (storage.MaxItemSize == null) @@ -138,7 +147,13 @@ namespace Content.IntegrationTests.Tests if (!protoMan.TryIndex(entry.PrototypeId, out var fillItem)) continue; - if (!fillItem.TryGetComponent("Item", out var entryItem)) + ItemComponent? entryItem = null; + await server.WaitPost(() => + { + fillItem.TryGetComponent("Item", out entryItem); + }); + + if (entryItem == null) continue; Assert.That(protoMan.Index(entryItem.Size).Weight, @@ -164,25 +179,25 @@ namespace Content.IntegrationTests.Tests var itemSys = entMan.System(); - Assert.Multiple(() => + foreach (var proto in pair.GetPrototypesWithComponent()) { - foreach (var proto in pair.GetPrototypesWithComponent()) - { - if (proto.HasComponent(compFact)) - continue; + if (proto.HasComponent(compFact)) + continue; - if (!proto.TryGetComponent("EntityStorage", out var entStorage)) - { + await server.WaitAssertion(() => + { + if (!proto.TryGetComponent("EntityStorage", out EntityStorageComponent? entStorage)) Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); - continue; - } + + if (entStorage == null) + return; var fill = (StorageFillComponent) proto.Components[id].Component; var size = GetFillSize(fill, true, protoMan, itemSys); Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity), $"{proto.ID} storage fill is too large."); - } - }); + }); + } await pair.CleanReturnAsync(); }