using Content.Server.GameTicking; using Content.Server.GameTicking.Commands; using Content.Shared.CCVar; using Robust.Shared.Configuration; using Robust.Shared.GameObjects; using Robust.Shared.Timing; namespace Content.IntegrationTests.Tests.Commands { [TestFixture] [TestOf(typeof(RestartRoundNowCommand))] public sealed class RestartRoundNowTest { [Test] [TestCase(true)] [TestCase(false)] public async Task RestartRoundAfterStart(bool lobbyEnabled) { await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings() { Dirty = true }); var server = pairTracker.Pair.Server; var configManager = server.ResolveDependency(); var entityManager = server.ResolveDependency(); var gameTicker = entityManager.EntitySysManager.GetEntitySystem(); await PoolManager.RunTicksSync(pairTracker.Pair, 5); GameTick tickBeforeRestart = default; await server.WaitAssertion(() => { Assert.That(configManager.GetCVar(CCVars.GameLobbyEnabled), Is.EqualTo(false)); configManager.SetCVar(CCVars.GameLobbyEnabled, lobbyEnabled); Assert.That(gameTicker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); tickBeforeRestart = entityManager.CurrentTick; var command = new RestartRoundNowCommand(); command.Execute(null, string.Empty, Array.Empty()); if (lobbyEnabled) { Assert.That(gameTicker.RunLevel, Is.Not.EqualTo(GameRunLevel.InRound)); } }); await PoolManager.RunTicksSync(pairTracker.Pair, 15); await server.WaitAssertion(() => { var tickAfterRestart = entityManager.CurrentTick; Assert.That(tickBeforeRestart, Is.LessThan(tickAfterRestart)); }); await PoolManager.RunTicksSync(pairTracker.Pair, 5); await pairTracker.CleanReturnAsync(); } } }