#nullable enable
using NUnit.Framework;
using System.Threading.Tasks;
using Content.Server.Stack;
using Content.Shared.Stacks;
using Content.Shared.Materials;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
///
/// Materials and stacks have some odd relationships to entities,
/// so we need some test coverage for them.
///
namespace Content.IntegrationTests.Tests.Materials
{
[TestFixture]
[TestOf(typeof(StackSystem))]
[TestOf(typeof(MaterialPrototype))]
public sealed class MaterialPrototypeSpawnsStackMaterialTest
{
[Test]
public async Task MaterialPrototypeSpawnsStackMaterial()
{
await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings{NoClient = true});
var server = pairTracker.Pair.Server;
await server.WaitIdleAsync();
var mapManager = server.ResolveDependency();
var prototypeManager = server.ResolveDependency();
var entityManager = server.ResolveDependency();
var testMap = await PoolManager.CreateTestMap(pairTracker);
await server.WaitAssertion(() =>
{
var allMaterialProtos = prototypeManager.EnumeratePrototypes();
var coords = testMap.GridCoords;
foreach (var proto in allMaterialProtos)
{
if (proto.StackEntity == "")
continue;
var spawned = entityManager.SpawnEntity(proto.StackEntity, coords);
Assert.That(entityManager.HasComponent(spawned),
$"{proto.ID} 'stack entity' {proto.StackEntity} has the stack component");
Assert.That(entityManager.HasComponent(spawned),
$"{proto.ID} 'material stack' {proto.StackEntity} has the material component");
}
mapManager.DeleteMap(testMap.MapId);
});
}
}
}