using Content.Server.GameTicking; using Content.Server.GameTicking.Commands; using Content.Shared.CCVar; using Robust.Shared.Configuration; using Robust.Shared.GameObjects; using Robust.Shared.IoC; 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 pair = await PoolManager.GetServerClient(new PoolSettings { DummyTicker = false, Dirty = true }); var server = pair.Server; var configManager = server.ResolveDependency(); var entityManager = server.ResolveDependency(); var gameTicker = entityManager.EntitySysManager.GetEntitySystem(); await pair.RunTicksSync(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; gameTicker.RestartRound(); if (lobbyEnabled) { Assert.That(gameTicker.RunLevel, Is.Not.EqualTo(GameRunLevel.InRound)); } }); await pair.RunTicksSync(15); await server.WaitAssertion(() => { var tickAfterRestart = entityManager.CurrentTick; Assert.That(tickBeforeRestart, Is.LessThan(tickAfterRestart)); }); await pair.RunTicksSync(5); await pair.CleanReturnAsync(); } } }