CatStation/Content.IntegrationTests/Tests/Power/PowerStateTest.cs
TemporalOroboros 84b2f07157
The IMapManager is dead (#44002)
* Axes the easy IMapManager references

* Axes the references to unported (obsolete) IMapManager methods

* Converts salvageruler command to a LocalizedEntityCommand so it can use SharedMapSystem

* Removes IMapManager from GameTicker
This required axing the map nuke during restart, but that should be fine?
Maps are entities so EntityManager.FlushEntities should delete them all and that's the preceding line

* submodule update(?)

---------

Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
2026-07-01 20:44:54 -07:00

178 lines
6 KiB
C#

using Content.IntegrationTests.Fixtures;
using Content.Shared.Coordinates;
using Content.Shared.Power.Components;
using Content.Shared.Power.EntitySystems;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Maths;
namespace Content.IntegrationTests.Tests.Power;
[TestFixture]
public sealed class PowerStateTest : GameTest
{
[TestPrototypes]
private const string Prototypes = @"
- type: entity
id: PowerStateApcReceiverDummy
components:
- type: ApcPowerReceiver
- type: ExtensionCableReceiver
- type: Transform
anchored: true
- type: PowerState
isWorking: false
idlePowerDraw: 10
workingPowerDraw: 50
";
/// <summary>
/// Asserts that switching from idle to working updates the power receiver load to the working draw.
/// </summary>
[Test]
public async Task SetWorkingState_IdleToWorking_UpdatesLoad()
{
var pair = Pair;
var server = pair.Server;
var entManager = server.ResolveDependency<IEntityManager>();
var mapSys = entManager.System<SharedMapSystem>();
await server.WaitAssertion(() =>
{
mapSys.CreateMap(out var mapId);
var grid = mapSys.CreateGridEntity(mapId);
mapSys.SetTile(grid, Vector2i.Zero, new Tile(1));
var ent = entManager.SpawnEntity("PowerStateApcReceiverDummy", grid.Owner.ToCoordinates());
var receiver = entManager.GetComponent<Server.Power.Components.ApcPowerReceiverComponent>(ent);
var powerState = entManager.GetComponent<PowerStateComponent>(ent);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.False);
Assert.That(receiver.Load, Is.EqualTo(powerState.IdlePowerDraw).Within(0.01f));
});
var system = entManager.System<SharedPowerStateSystem>();
system.SetWorkingState((ent, powerState), true);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.True);
Assert.That(receiver.Load, Is.EqualTo(powerState.WorkingPowerDraw).Within(0.01f));
});
});
}
/// <summary>
/// Asserts that switching from working to idle updates the power receiver load to the idle draw.
/// </summary>
[Test]
public async Task SetWorkingState_WorkingToIdle_UpdatesLoad()
{
var pair = Pair;
var server = pair.Server;
var entManager = server.ResolveDependency<IEntityManager>();
var mapSys = entManager.System<SharedMapSystem>();
await server.WaitAssertion(() =>
{
mapSys.CreateMap(out var mapId);
var grid = mapSys.CreateGridEntity(mapId);
mapSys.SetTile(grid, Vector2i.Zero, new Tile(1));
var ent = entManager.SpawnEntity("PowerStateApcReceiverDummy", grid.Owner.ToCoordinates());
var receiver = entManager.GetComponent<Server.Power.Components.ApcPowerReceiverComponent>(ent);
var powerState = entManager.GetComponent<PowerStateComponent>(ent);
var system = entManager.System<SharedPowerStateSystem>();
Entity<PowerStateComponent> newEnt = (ent, powerState);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.False);
Assert.That(receiver.Load, Is.EqualTo(powerState.IdlePowerDraw).Within(0.01f));
});
system.SetWorkingState(newEnt, true);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.True);
Assert.That(receiver.Load, Is.EqualTo(powerState.WorkingPowerDraw).Within(0.01f));
});
system.SetWorkingState(newEnt, false);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.False);
Assert.That(receiver.Load, Is.EqualTo(powerState.IdlePowerDraw).Within(0.01f));
});
});
}
/// <summary>
/// Asserts that setting the working state to the current state does not change the power receiver load.
/// </summary>
[Test]
public async Task SetWorkingState_AlreadyInState_NoChange()
{
var pair = Pair;
var server = pair.Server;
var entManager = server.ResolveDependency<IEntityManager>();
var mapSys = entManager.System<SharedMapSystem>();
await server.WaitAssertion(() =>
{
mapSys.CreateMap(out var mapId);
var grid = mapSys.CreateGridEntity(mapId);
mapSys.SetTile(grid, Vector2i.Zero, new Tile(1));
var ent = entManager.SpawnEntity("PowerStateApcReceiverDummy", grid.Owner.ToCoordinates());
var receiver = entManager.GetComponent<Server.Power.Components.ApcPowerReceiverComponent>(ent);
var powerState = entManager.GetComponent<PowerStateComponent>(ent);
var system = entManager.System<SharedPowerStateSystem>();
Entity<PowerStateComponent> valueTuple = (ent, powerState);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.False);
Assert.That(receiver.Load, Is.EqualTo(powerState.IdlePowerDraw).Within(0.01f));
});
system.SetWorkingState(valueTuple, false);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.False);
Assert.That(receiver.Load, Is.EqualTo(powerState.IdlePowerDraw).Within(0.01f));
});
system.SetWorkingState(valueTuple, true);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.True);
Assert.That(receiver.Load, Is.EqualTo(powerState.WorkingPowerDraw).Within(0.01f));
});
system.SetWorkingState(valueTuple, true);
Assert.Multiple(() =>
{
Assert.That(powerState.IsWorking, Is.True);
Assert.That(receiver.Load, Is.EqualTo(powerState.WorkingPowerDraw).Within(0.01f));
});
});
}
}