diff --git a/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs b/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs index 72e35dac05..a66cecc90f 100644 --- a/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs +++ b/Content.IntegrationTests/Tests/Preferences/LoadoutTests.cs @@ -1,15 +1,52 @@ +using System.Collections.Generic; using Content.Server.Station.Systems; +using Content.Shared.Inventory; using Content.Shared.Preferences; using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles.Jobs; using Robust.Shared.GameObjects; +using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests.Preferences; [TestFixture] -[Ignore("HumanoidAppearance crashes upon loading default profiles.")] public sealed class LoadoutTests { + [TestPrototypes] + private const string Prototypes = @" +- type: playTimeTracker + id: PlayTimeLoadoutTester + +- type: loadout + id: TestJumpsuit + equipment: TestJumpsuit + +- type: startingGear + id: TestJumpsuit + equipment: + jumpsuit: ClothingUniformJumpsuitColorGrey + +- type: loadoutGroup + id: LoadoutTesterJumpsuit + name: generic-unknown + loadouts: + - TestJumpsuit + +- type: roleLoadout + id: JobLoadoutTester + groups: + - LoadoutTesterJumpsuit + +- type: job + id: LoadoutTester + playTimeTracker: PlayTimeLoadoutTester +"; + + private readonly Dictionary _expectedEquipment = new() + { + ["jumpsuit"] = "ClothingUniformJumpsuitColorGrey" + }; + /// /// Checks that an empty loadout still spawns with default gear and not naked. /// @@ -26,18 +63,38 @@ public sealed class LoadoutTests // Check that an empty role loadout spawns gear var stationSystem = entManager.System(); + var inventorySystem = entManager.System(); var testMap = await pair.CreateTestMap(); - // That's right I can't even spawn a dummy profile without station spawning / humanoidappearance code crashing. - var profile = new HumanoidCharacterProfile(); - - profile.SetLoadout(new RoleLoadout("TestRoleLoadout")); - - stationSystem.SpawnPlayerMob(testMap.GridCoords, job: new JobComponent() + await server.WaitAssertion(() => { - // Sue me, there's so much involved in setting up jobs - Prototype = "CargoTechnician" - }, profile, station: null); + var profile = new HumanoidCharacterProfile(); + + profile.SetLoadout(new RoleLoadout("LoadoutTester")); + + var tester = stationSystem.SpawnPlayerMob(testMap.GridCoords, job: new JobComponent() + { + Prototype = "LoadoutTester" + }, profile, station: null); + + var slotQuery = inventorySystem.GetSlotEnumerator(tester); + var checkedCount = 0; + while (slotQuery.NextItem(out var item, out var slot)) + { + // Make sure the slot is valid + Assert.That(_expectedEquipment.TryGetValue(slot.Name, out var expectedItem), $"Spawned item in unexpected slot: {slot.Name}"); + + // Make sure that the item is the right one + var meta = entManager.GetComponent(item); + Assert.That(meta.EntityPrototype.ID, Is.EqualTo(expectedItem.Id), $"Spawned wrong item in slot {slot.Name}!"); + + checkedCount++; + } + // Make sure the number of items is the same + Assert.That(checkedCount, Is.EqualTo(_expectedEquipment.Count), "Number of items does not match expected!"); + + entManager.DeleteEntity(tester); + }); await pair.CleanReturnAsync(); }