EntityStorageTests.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using Content.Server.Storage.EntitySystems;
  2. using Content.Shared.Damage;
  3. using Robust.Shared.Containers;
  4. using Robust.Shared.GameObjects;
  5. namespace Content.IntegrationTests.Tests.Storage;
  6. [TestFixture]
  7. public sealed class EntityStorageTests
  8. {
  9. [TestPrototypes]
  10. private const string Prototypes = @"
  11. - type: entity
  12. id: EntityStorageTest
  13. name: box
  14. components:
  15. - type: EntityStorage
  16. - type: Damageable
  17. damageContainer: Inorganic
  18. - type: Destructible
  19. thresholds:
  20. - trigger:
  21. !type:DamageTrigger
  22. damage: 10
  23. behaviors:
  24. - !type:DoActsBehavior
  25. acts: [ Destruction ]
  26. ";
  27. [Test]
  28. public async Task TestContainerDestruction()
  29. {
  30. await using var pair = await PoolManager.GetServerClient();
  31. var server = pair.Server;
  32. var map = await pair.CreateTestMap();
  33. EntityUid box = default;
  34. EntityUid crowbar = default;
  35. await server.WaitPost(() => box = server.EntMan.SpawnEntity("EntityStorageTest", map.GridCoords));
  36. await server.WaitPost(() => crowbar = server.EntMan.SpawnEntity("Crowbar", map.GridCoords));
  37. // Initially the crowbar is not in a contaienr.
  38. var sys = server.System<SharedContainerSystem>();
  39. Assert.That(sys.IsEntityInContainer(crowbar), Is.False);
  40. // Open then close the storage entity
  41. var storage = server.System<EntityStorageSystem>();
  42. await server.WaitPost(() =>
  43. {
  44. storage.OpenStorage(box);
  45. storage.CloseStorage(box);
  46. });
  47. // Crowbar is now in the box
  48. Assert.That(sys.IsEntityInContainer(crowbar));
  49. // Damage the box
  50. var damage = new DamageSpecifier();
  51. damage.DamageDict.Add("Blunt", 100);
  52. await server.WaitPost(() => server.System<DamageableSystem>().TryChangeDamage(box, damage));
  53. // Box has been destroyed, contents have been emptied. Destruction uses deffered deletion.
  54. Assert.That(server.EntMan.IsQueuedForDeletion(box));
  55. Assert.That(sys.IsEntityInContainer(crowbar), Is.False);
  56. // Opening and closing the soon-to-be-deleted box should not re-insert the crowbar
  57. await server.WaitPost(() =>
  58. {
  59. storage.OpenStorage(box);
  60. storage.CloseStorage(box);
  61. });
  62. Assert.That(sys.IsEntityInContainer(crowbar), Is.False);
  63. // Entity gets deleted after a few ticks
  64. await server.WaitRunTicks(5);
  65. Assert.That(server.EntMan.Deleted(box));
  66. Assert.That(server.EntMan.Deleted(crowbar), Is.False);
  67. await pair.CleanReturnAsync();
  68. }
  69. }