using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Octokit; using Tgstation.Server.Host.Configuration; namespace Tgstation.Server.Host.Utils.GitHub.Tests { [TestClass] public sealed class TestGitHubServiceFactory { [TestMethod] public void TestConstructor() { Assert.ThrowsExactly(() => new GitHubServiceFactory(null, null, null)); Assert.ThrowsExactly(() => new GitHubServiceFactory(Mock.Of(), null, null)); Assert.ThrowsExactly(() => new GitHubServiceFactory(Mock.Of(), Mock.Of(), null)); var mockOptions = new Mock>(); mockOptions.SetupGet(x => x.CurrentValue).Returns(new UpdatesConfiguration()); _ = new GitHubServiceFactory(Mock.Of(), Mock.Of(), mockOptions.Object); } [TestMethod] public async Task TestCreateService() { var mockFactory = new Mock(); #pragma warning disable CA2012 // Use ValueTasks correctly mockFactory.Setup(x => x.CreateClient(It.IsAny())).Returns(ValueTask.FromResult(Mock.Of())).Verifiable(); var mockToken = "asdf"; mockFactory.Setup(x => x.CreateClient(mockToken, It.IsAny())).Returns(ValueTask.FromResult(Mock.Of())).Verifiable(); #pragma warning restore CA2012 // Use ValueTasks correctly var mockOptions = new Mock>(); mockOptions.SetupGet(x => x.CurrentValue).Returns(new UpdatesConfiguration()); var factory = new GitHubServiceFactory(mockFactory.Object, Mock.Of(), mockOptions.Object); await Assert.ThrowsExactlyAsync(() => factory.CreateService(null, CancellationToken.None).AsTask()); Assert.AreEqual(0, mockFactory.Invocations.Count); var result1 = await factory.CreateService(CancellationToken.None); Assert.IsNotNull(result1); var result2 = factory.CreateService(mockToken, CancellationToken.None); Assert.IsNotNull(result2); mockFactory.VerifyAll(); } } }