From c7b8c1b45d7b963e78dfa0d3df9efb695b04f732 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 2 Nov 2018 12:55:59 -0400 Subject: [PATCH] Add discord tests --- .../Chat/Providers/TestDiscordProvider.cs | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs diff --git a/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs b/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs new file mode 100644 index 0000000000..e422dd239b --- /dev/null +++ b/tests/Tgstation.Server.Host.Tests/Components/Chat/Providers/TestDiscordProvider.cs @@ -0,0 +1,86 @@ +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Tgstation.Server.Host.Components.Chat.Providers.Tests +{ + [TestClass] + public sealed class TestDiscordProvider + { + string testToken1; + + [TestInitialize] + public void Initialize() + { + testToken1 = Environment.GetEnvironmentVariable("TGS4_TEST_DISCORD_TOKEN_1"); + } + + [TestMethod] + public void TestConstructionAndDisposal() + { + Assert.ThrowsException(() => new DiscordProvider(null, null)); + var mockLogger = new Mock>(); + Assert.ThrowsException(() => new DiscordProvider(mockLogger.Object, null)); + var mockToken = "asdf"; + new DiscordProvider(mockLogger.Object, mockToken).Dispose(); + } + + [TestMethod] + public async Task TestConnectWithFakeTokenFails() + { + var mockLogger = new Mock>(); + using (var provider = new DiscordProvider(mockLogger.Object, "asdf")) + { + Assert.IsFalse(await provider.Connect(default).ConfigureAwait(false)); + Assert.IsFalse(provider.Connected); + } + } + + [Ignore("Broken due to dependency issues after first call to .Connect()")] + [TestMethod] + public async Task TestConnectAndDisconnect() + { + if (testToken1 == null) + Assert.Inconclusive("Required environment variable TGS4_TEST_DISCORD_TOKEN_1 isn't set!"); + + + var mockLogger = new Mock>(); + using (var provider = new DiscordProvider(mockLogger.Object, testToken1)) + { + Assert.IsFalse(provider.Connected); + await provider.Disconnect(default).ConfigureAwait(false); + Assert.IsFalse(provider.Connected); + Assert.IsTrue(await provider.Connect(default).ConfigureAwait(false)); + Assert.IsTrue(provider.Connected); + Assert.IsTrue(await provider.Connect(default).ConfigureAwait(false)); + Assert.IsTrue(provider.Connected); + + await provider.Disconnect(default).ConfigureAwait(false); + Assert.IsFalse(provider.Connected); + await provider.Disconnect(default).ConfigureAwait(false); + Assert.IsFalse(provider.Connected); + + //now try it with cancellationTokens + using (var cts = new CancellationTokenSource()) + { + cts.Cancel(); + var cancellationToken = cts.Token; + await Assert.ThrowsExceptionAsync(() => provider.Connect(cancellationToken)).ConfigureAwait(false); + Assert.IsFalse(provider.Connected); + Assert.IsTrue(await provider.Connect(default).ConfigureAwait(false)); + Assert.IsTrue(provider.Connected); + await Assert.ThrowsExceptionAsync(() => provider.Disconnect(cancellationToken)).ConfigureAwait(false); + Assert.IsTrue(provider.Connected); + await provider.Disconnect(default).ConfigureAwait(false); + Assert.IsFalse(provider.Connected); + } + + } + } + } +}