using System; using System.Threading; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Tgstation.Server.Host.IO; using Tgstation.Server.Host.Swarm; namespace Tgstation.Server.Host.Core.Tests { [TestClass] public sealed class TestServerUpdateInitiator { [TestMethod] public void TestConstructor() { Assert.ThrowsExactly(() => new ServerUpdateInitiator(null, null)); Assert.ThrowsExactly(() => new ServerUpdateInitiator(Mock.Of(), null)); _ = new ServerUpdateInitiator(Mock.Of(), Mock.Of()); } [TestMethod] public void TestInitiateUpdate() { var mockSwarmService = Mock.Of(); var mockServerUpdater = new Mock(); var mockFileProvider = Mock.Of(); var testVersion = new Version(Random.Shared.Next(), Random.Shared.Next(), Random.Shared.Next()); mockServerUpdater.Setup(x => x.BeginUpdate(mockSwarmService, It.IsAny(), testVersion, It.IsAny())).Returns(ValueTask.FromResult(ServerUpdateResult.Started)).Verifiable(); var updateInitiator = new ServerUpdateInitiator(mockSwarmService, mockServerUpdater.Object); Assert.IsTrue(updateInitiator.InitiateUpdate(mockFileProvider, testVersion, default).IsCompleted); Assert.IsTrue(updateInitiator.InitiateUpdate(null, testVersion, default).IsCompleted); mockServerUpdater.VerifyAll(); Assert.AreEqual(2, mockServerUpdater.Invocations.Count); } } }