From: Tayrtahn Date: Mon, 24 Jun 2024 22:29:44 +0000 (-0400) Subject: Fix forcemap not bypassing requirements (#29426) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=8aea47a7ee971fbdb471eefabbea7c1bdbeb7179;p=space-station-14.git Fix forcemap not bypassing requirements (#29426) * Fix forcemap not bypassing requirements * Add integration test for forcemap --- diff --git a/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs b/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs new file mode 100644 index 0000000000..5115996c21 --- /dev/null +++ b/Content.IntegrationTests/Tests/Commands/ForceMapTest.cs @@ -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(); + var consoleHost = server.ResolveDependency(); + + 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(); + } +} diff --git a/Content.Server/GameTicking/Commands/ForceMapCommand.cs b/Content.Server/GameTicking/Commands/ForceMapCommand.cs index 5677ff4b8f..76777623a2 100644 --- a/Content.Server/GameTicking/Commands/ForceMapCommand.cs +++ b/Content.Server/GameTicking/Commands/ForceMapCommand.cs @@ -29,9 +29,9 @@ namespace Content.Server.GameTicking.Commands var gameMap = IoCManager.Resolve(); 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; } diff --git a/Resources/Locale/en-US/game-ticking/forcemap-command.ftl b/Resources/Locale/en-US/game-ticking/forcemap-command.ftl index df2ca68786..6a4399cdcf 100644 --- a/Resources/Locale/en-US/game-ticking/forcemap-command.ftl +++ b/Resources/Locale/en-US/game-ticking/forcemap-command.ftl @@ -3,5 +3,6 @@ forcemap-command-description = Forces the game to start with a given map next round. forcemap-command-help = forcemap 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-arg-map =