+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<string, EntProtoId> _expectedEquipment = new()
+ {
+ ["jumpsuit"] = "ClothingUniformJumpsuitColorGrey"
+ };
+
/// <summary>
/// Checks that an empty loadout still spawns with default gear and not naked.
/// </summary>
// Check that an empty role loadout spawns gear
var stationSystem = entManager.System<StationSpawningSystem>();
+ var inventorySystem = entManager.System<InventorySystem>();
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();
+ await server.WaitAssertion(() =>
+ {
+ var profile = new HumanoidCharacterProfile();
- profile.SetLoadout(new RoleLoadout("TestRoleLoadout"));
+ profile.SetLoadout(new RoleLoadout("LoadoutTester"));
- stationSystem.SpawnPlayerMob(testMap.GridCoords, job: new JobComponent()
- {
- // Sue me, there's so much involved in setting up jobs
- Prototype = "CargoTechnician"
- }, profile, station: null);
+ 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<MetaDataComponent>(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();
}