StartingGearStorageTests.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Linq;
  2. using Content.Shared.Roles;
  3. using Content.Server.Storage.EntitySystems;
  4. using Robust.Shared.GameObjects;
  5. using Robust.Shared.Collections;
  6. namespace Content.IntegrationTests.Tests.Roles;
  7. [TestFixture]
  8. public sealed class StartingGearPrototypeStorageTest
  9. {
  10. /// <summary>
  11. /// Checks that a storage fill on a StartingGearPrototype will properly fill
  12. /// </summary>
  13. [Test]
  14. public async Task TestStartingGearStorage()
  15. {
  16. var settings = new PoolSettings { Connected = true, Dirty = true };
  17. await using var pair = await PoolManager.GetServerClient(settings);
  18. var server = pair.Server;
  19. var mapSystem = server.System<SharedMapSystem>();
  20. var storageSystem = server.System<StorageSystem>();
  21. var protos = server.ProtoMan
  22. .EnumeratePrototypes<StartingGearPrototype>()
  23. .Where(p => !p.Abstract)
  24. .ToList()
  25. .OrderBy(p => p.ID);
  26. var testMap = await pair.CreateTestMap();
  27. var coords = testMap.GridCoords;
  28. await server.WaitAssertion(() =>
  29. {
  30. foreach (var gearProto in protos)
  31. {
  32. var ents = new ValueList<EntityUid>();
  33. foreach (var (slot, entProtos) in gearProto.Storage)
  34. {
  35. ents.Clear();
  36. var storageProto = ((IEquipmentLoadout)gearProto).GetGear(slot);
  37. if (storageProto == string.Empty)
  38. continue;
  39. var bag = server.EntMan.SpawnEntity(storageProto, coords);
  40. if (entProtos.Count == 0)
  41. continue;
  42. foreach (var ent in entProtos)
  43. {
  44. ents.Add(server.EntMan.SpawnEntity(ent, coords));
  45. }
  46. foreach (var ent in ents)
  47. {
  48. if (!storageSystem.CanInsert(bag, ent, out _))
  49. Assert.Fail($"StartingGearPrototype {gearProto.ID} could not successfully put items into storage {bag.Id}");
  50. server.EntMan.DeleteEntity(ent);
  51. }
  52. server.EntMan.DeleteEntity(bag);
  53. }
  54. }
  55. mapSystem.DeleteMap(testMap.MapId);
  56. });
  57. await pair.CleanReturnAsync();
  58. }
  59. }