From 75fa4fedf649178bab345d81355d7d03d17d1b98 Mon Sep 17 00:00:00 2001
From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
Date: Sun, 9 Oct 2022 14:38:35 -0400
Subject: [PATCH] machine deconstruct test (#11779)
---
.../Tests/MachineBoardTest.cs | 59 +++++++++++++++++++
.../Machines/Medical/disease_diagnoser.yml | 4 +-
.../Structures/Machines/microwave.yml | 6 +-
.../Structures/Machines/reagent_grinder.yml | 6 +-
.../Structures/Machines/stasisbed.yml | 4 +-
5 files changed, 75 insertions(+), 4 deletions(-)
create mode 100644 Content.IntegrationTests/Tests/MachineBoardTest.cs
diff --git a/Content.IntegrationTests/Tests/MachineBoardTest.cs b/Content.IntegrationTests/Tests/MachineBoardTest.cs
new file mode 100644
index 0000000000..25bfc34a44
--- /dev/null
+++ b/Content.IntegrationTests/Tests/MachineBoardTest.cs
@@ -0,0 +1,59 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Content.Server.Construction.Components;
+using NUnit.Framework;
+using Robust.Shared.Prototypes;
+
+namespace Content.IntegrationTests.Tests;
+
+public sealed class MachineBoardTest
+{
+ ///
+ /// A list of machine boards that can be ignored by this test.
+ ///
+ private readonly HashSet _ignoredPrototypes = new()
+ {
+ //These have their own construction thing going on here
+ "MachineParticleAcceleratorEndCapCircuitboard",
+ "MachineParticleAcceleratorFuelChamberCircuitboard",
+ "MachineParticleAcceleratorFuelChamberCircuitboard",
+ "MachineParticleAcceleratorPowerBoxCircuitboard",
+ "MachineParticleAcceleratorEmitterLeftCircuitboard",
+ "MachineParticleAcceleratorEmitterCenterCircuitboard",
+ "MachineParticleAcceleratorEmitterRightCircuitboard"
+ };
+
+ ///
+ /// Ensures that every single machine board's corresponding entity
+ /// is a machine and can be properly deconstructed.
+ ///
+ [Test]
+ public async Task TestMachineBoardHasValidMachine()
+ {
+ await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings{NoClient = true});
+ var server = pairTracker.Pair.Server;
+
+ var protoMan = server.ResolveDependency();
+
+ await server.WaitAssertion(() =>
+ {
+ foreach (var p in protoMan.EnumeratePrototypes().Where(p => !p.Abstract && !_ignoredPrototypes.Contains(p.ID)))
+ {
+ if (!p.TryGetComponent(out var mbc))
+ continue;
+ var mId = mbc.Prototype;
+
+ Assert.That(mId, Is.Not.Null, $"Machine board {p.ID} does not have a corresponding machine.");
+ Assert.That(protoMan.TryIndex(mId, out var mProto),
+ $"Machine board {p.ID}'s corresponding machine has an invalid prototype.");
+ Assert.That(mProto.TryGetComponent(out var mComp),
+ $"Machine board {p.ID}'s corresponding machine {mId} does not have MachineComponent");
+ Assert.That(mComp.BoardPrototype, Is.EqualTo(p.ID),
+ $"Machine {mId}'s BoardPrototype is not equal to it's corresponding machine board, {p.ID}");
+ }
+ });
+
+ await pairTracker.CleanReturnAsync();
+ }
+}
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Medical/disease_diagnoser.yml b/Resources/Prototypes/Entities/Structures/Machines/Medical/disease_diagnoser.yml
index 7a6f0a9bc5..5e56846135 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Medical/disease_diagnoser.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Medical/disease_diagnoser.yml
@@ -1,6 +1,6 @@
- type: entity
id: DiseaseDiagnoser
- parent: BaseMachinePowered
+ parent: [ BaseMachinePowered, ConstructibleMachine ]
name: Disease Diagnoser Delta Extreme
description: A machine that analyzes disease samples.
placement:
@@ -22,3 +22,5 @@
- type: DiseaseMachineVisuals
idleState: icon
runningState: running
+ - type: Machine
+ board: DiagnoserMachineCircuitboard
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Structures/Machines/microwave.yml b/Resources/Prototypes/Entities/Structures/Machines/microwave.yml
index 930fa8ae89..bdef9b808b 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/microwave.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/microwave.yml
@@ -1,6 +1,6 @@
- type: entity
id: KitchenMicrowave
- parent: BaseMachinePowered
+ parent: [ BaseMachinePowered, ConstructibleMachine ]
name: microwave
description: It's magic.
components:
@@ -59,6 +59,10 @@
acts: ["Breakage"]
- type: ApcPowerReceiver
powerLoad: 400
+ - type: Machine
+ board: MicrowaveMachineCircuitboard
- type: ContainerContainer
containers:
microwave_entity_container: !type:Container
+ machine_board: !type:Container
+ machine_parts: !type:Container
diff --git a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml
index e362615bd4..45c97c457d 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml
@@ -1,6 +1,6 @@
- type: entity
id: KitchenReagentGrinder
- parent: BaseMachinePowered
+ parent: [ BaseMachinePowered, ConstructibleMachine ]
name: reagent grinder
description: From BlenderTech. Will It Blend? Let's find out!
suffix: grinder/juicer
@@ -44,7 +44,11 @@
- type: ApcPowerReceiver
powerLoad: 300
- type: ItemSlots
+ - type: Machine
+ board: ReagentGrinderMachineCircuitboard
- type: ContainerContainer
containers:
ReagentGrinder-reagentContainerContainer: !type:ContainerSlot
ReagentGrinder-entityContainerContainer: !type:Container
+ machine_board: !type:Container
+ machine_parts: !type:Container
diff --git a/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml b/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml
index b28e30bb07..f39e17cc6a 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/stasisbed.yml
@@ -1,7 +1,7 @@
- type: entity
id: StasisBed
name: stasis bed
- parent: BaseMachinePowered
+ parent: [ BaseMachinePowered, ConstructibleMachine ]
description: A bed that massively slows down the patient's metabolism, allowing more time to administer a proper treatment for stabilization.
components:
- type: StasisBed
@@ -39,6 +39,8 @@
- type: Strap
position: Down
rotation: -90
+ - type: Machine
+ board: StasisBedMachineCircuitboard
- type: Physics
bodyType: Static
- type: Fixtures