Fix forcemap not bypassing requirements (#29426)

* Fix forcemap not bypassing requirements

* Add integration test for forcemap
This commit is contained in:
Tayrtahn
2024-06-24 18:29:44 -04:00
committed by GitHub
parent 0822284cba
commit 8aea47a7ee
3 changed files with 83 additions and 2 deletions

View 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();
}
}

View File

@@ -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;
} }

View File

@@ -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>