diff --git a/Content.IntegrationTests/Tests/Construction/ConstructionActionValid.cs b/Content.IntegrationTests/Tests/Construction/ConstructionActionValid.cs index 408b0e0bd0..c59b42d638 100644 --- a/Content.IntegrationTests/Tests/Construction/ConstructionActionValid.cs +++ b/Content.IntegrationTests/Tests/Construction/ConstructionActionValid.cs @@ -55,33 +55,36 @@ namespace Content.IntegrationTests.Tests.Construction var valid = true; var message = new StringBuilder(); - foreach (var graph in protoMan.EnumeratePrototypes()) + await server.WaitPost(() => { - foreach (var node in graph.Nodes.Values) + foreach (var graph in protoMan.EnumeratePrototypes()) { - foreach (var action in node.Actions) + foreach (var node in graph.Nodes.Values) { - if (IsValid(action, protoMan, out var prototype)) continue; - - valid = false; - message.Append($"Invalid entity prototype \"{prototype}\" on graph action in node \"{node.Name}\" of graph \"{graph.ID}\"\n"); - } - - foreach (var edge in node.Edges) - { - foreach (var action in edge.Completed) + foreach (var action in node.Actions) { if (IsValid(action, protoMan, out var prototype)) continue; valid = false; - message.Append($"Invalid entity prototype \"{prototype}\" on graph action in edge \"{edge.Target}\" of node \"{node.Name}\" of graph \"{graph.ID}\"\n"); + message.Append($"Invalid entity prototype \"{prototype}\" on graph action in node \"{node.Name}\" of graph \"{graph.ID}\"\n"); + } + + foreach (var edge in node.Edges) + { + foreach (var action in edge.Completed) + { + if (IsValid(action, protoMan, out var prototype)) continue; + + valid = false; + message.Append($"Invalid entity prototype \"{prototype}\" on graph action in edge \"{edge.Target}\" of node \"{node.Name}\" of graph \"{graph.ID}\"\n"); + } } } } - } - await pair.CleanReturnAsync(); + }); Assert.That(valid, Is.True, $"One or more SpawnPrototype actions specified invalid entity prototypes!\n{message}"); + await pair.CleanReturnAsync(); } [Test] @@ -95,19 +98,24 @@ namespace Content.IntegrationTests.Tests.Construction var valid = true; var message = new StringBuilder(); - foreach (var graph in protoMan.EnumeratePrototypes()) + await server.WaitPost(() => { - foreach (var node in graph.Nodes.Values) + foreach (var graph in protoMan.EnumeratePrototypes()) { - foreach (var edge in node.Edges) + foreach (var node in graph.Nodes.Values) { - if (graph.Nodes.ContainsKey(edge.Target)) continue; + foreach (var edge in node.Edges) + { + if (graph.Nodes.ContainsKey(edge.Target)) + continue; - valid = false; - message.Append($"Invalid target \"{edge.Target}\" in edge on node \"{node.Name}\" of graph \"{graph.ID}\"\n"); + valid = false; + message.Append( + $"Invalid target \"{edge.Target}\" in edge on node \"{node.Name}\" of graph \"{graph.ID}\"\n"); + } } } - } + }); Assert.That(valid, Is.True, $"One or more edges specified invalid node targets!\n{message}"); await pair.CleanReturnAsync(); diff --git a/Content.IntegrationTests/Tests/Construction/ConstructionPrototypeTest.cs b/Content.IntegrationTests/Tests/Construction/ConstructionPrototypeTest.cs index 01173c9660..d3a10dcfaf 100644 --- a/Content.IntegrationTests/Tests/Construction/ConstructionPrototypeTest.cs +++ b/Content.IntegrationTests/Tests/Construction/ConstructionPrototypeTest.cs @@ -58,13 +58,17 @@ namespace Content.IntegrationTests.Tests.Construction var protoMan = server.ResolveDependency(); - foreach (var proto in protoMan.EnumeratePrototypes()) + await server.WaitAssertion(() => { - var start = proto.StartNode; - var graph = protoMan.Index(proto.Graph); + foreach (var proto in protoMan.EnumeratePrototypes()) + { + var start = proto.StartNode; + var graph = protoMan.Index(proto.Graph); - Assert.That(graph.Nodes.ContainsKey(start), $"Found no startNode \"{start}\" on graph \"{graph.ID}\" for construction prototype \"{proto.ID}\"!"); - } + Assert.That(graph.Nodes.ContainsKey(start), + $"Found no startNode \"{start}\" on graph \"{graph.ID}\" for construction prototype \"{proto.ID}\"!"); + } + }); await pair.CleanReturnAsync(); } @@ -76,13 +80,17 @@ namespace Content.IntegrationTests.Tests.Construction var protoMan = server.ResolveDependency(); - foreach (var proto in protoMan.EnumeratePrototypes()) + await server.WaitAssertion(() => { - var target = proto.TargetNode; - var graph = protoMan.Index(proto.Graph); + foreach (var proto in protoMan.EnumeratePrototypes()) + { + var target = proto.TargetNode; + var graph = protoMan.Index(proto.Graph); - Assert.That(graph.Nodes.ContainsKey(target), $"Found no targetNode \"{target}\" on graph \"{graph.ID}\" for construction prototype \"{proto.ID}\"!"); - } + Assert.That(graph.Nodes.ContainsKey(target), + $"Found no targetNode \"{target}\" on graph \"{graph.ID}\" for construction prototype \"{proto.ID}\"!"); + } + }); await pair.CleanReturnAsync(); } @@ -92,7 +100,6 @@ namespace Content.IntegrationTests.Tests.Construction await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; - var entMan = server.ResolveDependency(); var protoMan = server.ResolveDependency(); var compFact = server.ResolveDependency(); @@ -126,22 +133,31 @@ namespace Content.IntegrationTests.Tests.Construction var protoMan = server.ResolveDependency(); var entMan = server.ResolveDependency(); - foreach (var proto in protoMan.EnumeratePrototypes()) + await server.WaitAssertion(() => { - var start = proto.StartNode; - var target = proto.TargetNode; - var graph = protoMan.Index(proto.Graph); + foreach (var proto in protoMan.EnumeratePrototypes()) + { + var start = proto.StartNode; + var target = proto.TargetNode; + var graph = protoMan.Index(proto.Graph); #pragma warning disable NUnit2045 // Interdependent assertions. - Assert.That(graph.TryPath(start, target, out var path), $"Unable to find path from \"{start}\" to \"{target}\" on graph \"{graph.ID}\""); - Assert.That(path, Has.Length.GreaterThanOrEqualTo(1), $"Unable to find path from \"{start}\" to \"{target}\" on graph \"{graph.ID}\"."); - var next = path[0]; - var nextId = next.Entity.GetId(null, null, new(entMan)); - Assert.That(nextId, Is.Not.Null, $"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) must specify an entity! Graph: {graph.ID}"); - Assert.That(protoMan.TryIndex(nextId, out EntityPrototype entity), $"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) specified an invalid entity prototype ({nextId} [{next.Entity}])"); - Assert.That(entity.Components.ContainsKey("Construction"), $"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) specified an entity prototype ({next.Entity}) without a ConstructionComponent."); + Assert.That(graph.TryPath(start, target, out var path), + $"Unable to find path from \"{start}\" to \"{target}\" on graph \"{graph.ID}\""); + Assert.That(path, Has.Length.GreaterThanOrEqualTo(1), + $"Unable to find path from \"{start}\" to \"{target}\" on graph \"{graph.ID}\"."); + var next = path[0]; + var nextId = next.Entity.GetId(null, null, new(entMan)); + Assert.That(nextId, Is.Not.Null, + $"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) must specify an entity! Graph: {graph.ID}"); + Assert.That(protoMan.TryIndex(nextId, out EntityPrototype entity), + $"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) specified an invalid entity prototype ({nextId} [{next.Entity}])"); + Assert.That(entity.Components.ContainsKey("Construction"), + $"The next node ({next.Name}) in the path from the start node ({start}) to the target node ({target}) specified an entity prototype ({next.Entity}) without a ConstructionComponent."); #pragma warning restore NUnit2045 - } + } + }); + await pair.CleanReturnAsync(); } }