Fix forcemap not bypassing requirements (#29426)
* Fix forcemap not bypassing requirements * Add integration test for forcemap
This commit is contained in:
80
Content.IntegrationTests/Tests/Commands/ForceMapTest.cs
Normal file
80
Content.IntegrationTests/Tests/Commands/ForceMapTest.cs
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
using Content.Shared.CCVar;
|
||||||
|
using Robust.Shared.Configuration;
|
||||||
|
using Robust.Shared.Console;
|
||||||
|
|
||||||
|
namespace Content.IntegrationTests.Tests.Commands;
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public sealed class ForceMapTest
|
||||||
|
{
|
||||||
|
private const string DefaultMapName = "Empty";
|
||||||
|
private const string BadMapName = "asdf_asd-fa__sdfAsd_f"; // Hopefully no one ever names a map this...
|
||||||
|
private const string TestMapEligibleName = "ForceMapTestEligible";
|
||||||
|
private const string TestMapIneligibleName = "ForceMapTestIneligible";
|
||||||
|
|
||||||
|
[TestPrototypes]
|
||||||
|
private static readonly string TestMaps = @$"
|
||||||
|
- type: gameMap
|
||||||
|
id: {TestMapIneligibleName}
|
||||||
|
mapName: {TestMapIneligibleName}
|
||||||
|
mapPath: /Maps/Test/empty.yml
|
||||||
|
minPlayers: 20
|
||||||
|
maxPlayers: 80
|
||||||
|
stations:
|
||||||
|
Empty:
|
||||||
|
stationProto: StandardNanotrasenStation
|
||||||
|
components:
|
||||||
|
- type: StationNameSetup
|
||||||
|
mapNameTemplate: ""Empty""
|
||||||
|
|
||||||
|
- type: gameMap
|
||||||
|
id: {TestMapEligibleName}
|
||||||
|
mapName: {TestMapEligibleName}
|
||||||
|
mapPath: /Maps/Test/empty.yml
|
||||||
|
minPlayers: 0
|
||||||
|
stations:
|
||||||
|
Empty:
|
||||||
|
stationProto: StandardNanotrasenStation
|
||||||
|
components:
|
||||||
|
- type: StationNameSetup
|
||||||
|
mapNameTemplate: ""Empty""
|
||||||
|
";
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task TestForceMapCommand()
|
||||||
|
{
|
||||||
|
await using var pair = await PoolManager.GetServerClient();
|
||||||
|
var server = pair.Server;
|
||||||
|
|
||||||
|
var entMan = server.EntMan;
|
||||||
|
var configManager = server.ResolveDependency<IConfigurationManager>();
|
||||||
|
var consoleHost = server.ResolveDependency<IConsoleHost>();
|
||||||
|
|
||||||
|
await server.WaitAssertion(() =>
|
||||||
|
{
|
||||||
|
// Make sure we're set to the default map
|
||||||
|
Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(DefaultMapName),
|
||||||
|
$"Test didn't start on expected map ({DefaultMapName})!");
|
||||||
|
|
||||||
|
// Try changing to a map that doesn't exist
|
||||||
|
consoleHost.ExecuteCommand($"forcemap {BadMapName}");
|
||||||
|
Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(DefaultMapName),
|
||||||
|
$"Forcemap succeeded with a map that does not exist ({BadMapName})!");
|
||||||
|
|
||||||
|
// Try changing to a valid map
|
||||||
|
consoleHost.ExecuteCommand($"forcemap {TestMapEligibleName}");
|
||||||
|
Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(TestMapEligibleName),
|
||||||
|
$"Forcemap failed with a valid map ({TestMapEligibleName})");
|
||||||
|
|
||||||
|
// Try changing to a map that exists but is ineligible
|
||||||
|
consoleHost.ExecuteCommand($"forcemap {TestMapIneligibleName}");
|
||||||
|
Assert.That(configManager.GetCVar(CCVars.GameMap), Is.EqualTo(TestMapIneligibleName),
|
||||||
|
$"Forcemap failed with valid but ineligible map ({TestMapIneligibleName})!");
|
||||||
|
});
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
configManager.SetCVar(CCVars.GameMap, DefaultMapName);
|
||||||
|
|
||||||
|
await pair.CleanReturnAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,9 +29,9 @@ namespace Content.Server.GameTicking.Commands
|
|||||||
var gameMap = IoCManager.Resolve<IGameMapManager>();
|
var gameMap = IoCManager.Resolve<IGameMapManager>();
|
||||||
var name = args[0];
|
var name = args[0];
|
||||||
|
|
||||||
if (!gameMap.TrySelectMapIfEligible(name))
|
if (!gameMap.CheckMapExists(name))
|
||||||
{
|
{
|
||||||
shell.WriteLine($"No eligible map exists with name {name}.");
|
shell.WriteLine(Loc.GetString("forcemap-command-map-not-found", ("map", name)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,5 +3,6 @@
|
|||||||
forcemap-command-description = Forces the game to start with a given map next round.
|
forcemap-command-description = Forces the game to start with a given map next round.
|
||||||
forcemap-command-help = forcemap <map ID>
|
forcemap-command-help = forcemap <map ID>
|
||||||
forcemap-command-need-one-argument = forcemap takes one argument, the path to the map file.
|
forcemap-command-need-one-argument = forcemap takes one argument, the path to the map file.
|
||||||
|
forcemap-command-map-not-found = No eligible map exists with name { $map }.
|
||||||
forcemap-command-success = Forced the game to start with map { $map } next round.
|
forcemap-command-success = Forced the game to start with map { $map } next round.
|
||||||
forcemap-command-arg-map = <map ID>
|
forcemap-command-arg-map = <map ID>
|
||||||
|
|||||||
Reference in New Issue
Block a user