From 8f0d77749d1a31fe352fabbb7f4de20fe57ba548 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Fri, 13 May 2016 20:58:06 -0400 Subject: [PATCH 1/8] Begin Rewriting Unit Tests Comment out Tests.cs (will delete later) Build backend for Testing/Mock Rest Replies --- Discord.Net.sln | 8 +++- .../Discord.Net.Tests.csproj | 12 ++++-- .../Discord.Net.Tests/Rest/EndpointHandler.cs | 32 ++++++++++++++ test/Discord.Net.Tests/Rest/TestRestClient.cs | 42 +++++++++++++++++++ test/Discord.Net.Tests/Tests.cs | 20 +++++---- 5 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 test/Discord.Net.Tests/Rest/EndpointHandler.cs create mode 100644 test/Discord.Net.Tests/Rest/TestRestClient.cs diff --git a/Discord.Net.sln b/Discord.Net.sln index 520566a3d..1903df403 100644 --- a/Discord.Net.sln +++ b/Discord.Net.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.25123.0 +VisualStudioVersion = 15.0.25302.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net", "src\Discord.Net\Discord.Net.csproj", "{18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Tests", "test\Discord.Net.Tests\Discord.Net.Tests.csproj", "{855D6B1D-847B-42DA-BE6A-23683EA89511}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Debug|Any CPU.Build.0 = Debug|Any CPU {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Release|Any CPU.ActiveCfg = Release|Any CPU {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Release|Any CPU.Build.0 = Release|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Debug|Any CPU.Build.0 = Debug|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Release|Any CPU.ActiveCfg = Release|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj index 2a50610cc..3526e12ca 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj @@ -55,6 +55,11 @@ + + + + + @@ -62,11 +67,12 @@ - - {c6a50d24-cbd3-4e76-852c-4dca60bbd608} - Discord.Net.Net45 + + {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90} + Discord.Net + diff --git a/test/Discord.Net.Tests/Rest/EndpointHandler.cs b/test/Discord.Net.Tests/Rest/EndpointHandler.cs new file mode 100644 index 000000000..318139d13 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/EndpointHandler.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace Discord.Tests.Rest +{ + public class EndpointHandler + { + public static EndpointHandler Instance; + + public delegate string RestMessageHandler(string method, string json); + + public Dictionary Handlers; + + public EndpointHandler() + { + Instance = this; + + // Setup Endpoints + Handlers = new Dictionary(); + + // /users Endpoints + Handlers.Add("users/@me", Responses.Users.UserHandlers.Me_Handler); + } + + public string HandleMessage(string method, string endpoint, string json) + { + if (Handlers.ContainsKey(endpoint)) + return Handlers[endpoint].Invoke(method, json); + throw new NotImplementedException($"{method} -> {endpoint} -> {json}"); + } + } +} diff --git a/test/Discord.Net.Tests/Rest/TestRestClient.cs b/test/Discord.Net.Tests/Rest/TestRestClient.cs new file mode 100644 index 000000000..a1b4f1b10 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/TestRestClient.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.Rest; +using Discord.Net.Rest; +using System.Threading; +using System.IO; + +namespace Discord.Tests.Rest +{ + class TestRestClient : IRestClient + { + public static Dictionary Headers = new Dictionary(); + + public TestRestClient(string baseUrl, CancellationToken cancelToken) + { + + } + + Task IRestClient.Send(string method, string endpoint, IReadOnlyDictionary multipartParams) + { + throw new NotImplementedException("method only used for SendFile, not concerned with that yet."); + } + + Task IRestClient.Send(string method, string endpoint, string json) + { + return Task.FromResult(new MemoryStream(Encoding.UTF8.GetBytes(EndpointHandler.Instance.HandleMessage(method, endpoint, json)))); + } + + void IRestClient.SetHeader(string key, string value) + { + if (Headers.ContainsKey(key)) + { + Headers.Remove(key); + } + Headers.Add(key, value); + Console.WriteLine($"[Header Set]: {key} -> {value}"); + } + } +} diff --git a/test/Discord.Net.Tests/Tests.cs b/test/Discord.Net.Tests/Tests.cs index d8d09cd3d..1b51a4c94 100644 --- a/test/Discord.Net.Tests/Tests.cs +++ b/test/Discord.Net.Tests/Tests.cs @@ -1,4 +1,5 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Discord.Rest; +using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; @@ -7,8 +8,11 @@ using System.Threading.Tasks; namespace Discord.Tests { - //TODO: Tests are massively incomplete and out of date, needing a full rewrite + // these tests are really bad + // we're never going to look at them again + // but in case i do decide to look at them again they are still here + /* [TestClass] public class Tests { @@ -311,8 +315,9 @@ namespace Discord.Tests async () => await _targetBot.CurrentUser.Modify(TargetPassword, name), x => _obGuildBot.UserUpdated += x, x => _obGuildBot.UserUpdated -= x, - (s, e) => e.After.Username == name);*/ - } + (s, e) => e.After.Username == name); + }*/ + /* [TestMethod] public void TestSetStatus() { @@ -327,8 +332,9 @@ namespace Discord.Tests { throw new NotImplementedException(); /*_client.SetStatus(status); - await Task.Delay(50);*/ - } + await Task.Delay(50); + }*/ + /* [TestMethod] public void TestSetGame() { @@ -490,5 +496,5 @@ namespace Discord.Tests } #endregion - } + }*/ } From 00a901acafc00fe3fcb5117a35772b879bc8ba7f Mon Sep 17 00:00:00 2001 From: Christopher F Date: Fri, 13 May 2016 20:59:04 -0400 Subject: [PATCH 2/8] Login Unit Tests Login Tests + Login as User with Token + Login as User with Invalid Token + Login as Bot with Token + Login as Bot with Invalid Token --- test/Discord.Net.Tests/Rest/LoginTests.cs | 56 +++++++++++++++++++ .../Rest/Responses/Users/Me_Mocks.cs | 38 +++++++++++++ .../Rest/Responses/Users/UserHandlers.cs | 46 +++++++++++++++ test/Discord.Net.Tests/Rest/UserTests.cs | 40 +++++++++++++ 4 files changed, 180 insertions(+) create mode 100644 test/Discord.Net.Tests/Rest/LoginTests.cs create mode 100644 test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs create mode 100644 test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs create mode 100644 test/Discord.Net.Tests/Rest/UserTests.cs diff --git a/test/Discord.Net.Tests/Rest/LoginTests.cs b/test/Discord.Net.Tests/Rest/LoginTests.cs new file mode 100644 index 000000000..072588e7f --- /dev/null +++ b/test/Discord.Net.Tests/Rest/LoginTests.cs @@ -0,0 +1,56 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.Rest; + +namespace Discord.Tests.Rest +{ + [TestClass] + public class LoginTests + { + public static TestContext Context; + private static DiscordClient _client; + + [ClassInitialize] + public static void Initialize(TestContext context) + { + Context = context; + _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); + if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); + } + + [TestMethod] + [TestCategory("Login")] + public async Task Test_Login_As_User() + { + Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; + await _client.Login(TokenType.User, "UserToken_Voltana"); + } + [TestMethod] + [ExpectedException(typeof(Net.HttpException))] + [TestCategory("Login")] + public async Task Test_Login_As_User_With_Invalid_Token() + { + Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; + await _client.Login(TokenType.User, "UserToken-NotVoltana"); + } + [TestMethod] + [TestCategory("Login")] + public async Task Test_Login_As_Bot() + { + Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.Bot; + await _client.Login(TokenType.Bot, "UserToken_VoltanaBot"); + } + [TestMethod] + [ExpectedException(typeof(Net.HttpException))] + [TestCategory("Login")] + public async Task Test_Login_As_Bot_With_Invalid_Token() + { + Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.Bot; + await _client.Login(TokenType.Bot, "UserToken-NotVoltanaBot"); + } + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs new file mode 100644 index 000000000..283a2dc1a --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs @@ -0,0 +1,38 @@ +using Newtonsoft.Json; + +namespace Discord.Tests.Rest.Responses.Users +{ + public class Mock_Me_User_Valid + { + [JsonProperty("id")] + public string Id => "66078337084162048"; + [JsonProperty("username")] + public string Username => "Voltana"; + [JsonProperty("discriminator")] + public ushort Discriminator => 0001; + [JsonProperty("avatar")] + public string Avatar => "ec2b259bfe24686bf9d214b6bebe0834"; + [JsonProperty("verified")] + public bool IsVerified => true; + [JsonProperty("email")] + public string Email => "hello-i-am-not-real@foxbot.me"; + } + + public class Mock_Me_Token_Valid + { + [JsonProperty("id")] + public string Id => "66078337084162048"; + [JsonProperty("username")] + public string Username => "foxboat"; + [JsonProperty("discriminator")] + public ushort Discriminator => 0005; + [JsonProperty("avatar")] + public string Avatar => "ec2b259bfe24686bf9d214b6bebe0834"; + [JsonProperty("verified")] + public bool IsVerified => true; + [JsonProperty("email")] + public string Email => "hello-i-am-not-real@foxbot.me"; + [JsonProperty("bot")] + public bool Bot => true; + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs b/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs new file mode 100644 index 000000000..b794500ed --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs @@ -0,0 +1,46 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Newtonsoft.Json; +using Discord.Net; +using System.Net; +using System; + +namespace Discord.Tests.Rest.Responses.Users +{ + public static class UserHandlers + { + public static TestMode Mode; + + public static string Me_Handler(string method, string json) + { + switch (Mode) + { + case TestMode.User: + return Me_User_Valid(method, json); + case TestMode.Bot: + return Me_Bot_Valid(method, json); + default: + throw new ArgumentException("TestMode was set incorrectly."); + } + } + + public static string Me_User_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/users/@me' is GET."); + if (TestRestClient.Headers["authorization"] != "UserToken_Voltana") throw new HttpException((HttpStatusCode)401); + return JsonConvert.SerializeObject(new Mock_Me_User_Valid()); + } + + public static string Me_Bot_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/users/@me' is GET."); + if (TestRestClient.Headers["authorization"] != "Bot UserToken_VoltanaBot") throw new HttpException((HttpStatusCode)401); + return JsonConvert.SerializeObject(new Mock_Me_User_Valid()); + } + } + + public enum TestMode + { + User, + Bot + } +} diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs new file mode 100644 index 000000000..3998c2789 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -0,0 +1,40 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.Rest; + +namespace Discord.Tests.Rest +{ + [TestClass] + public class UserTests + { + public static TestContext Context; + private static DiscordClient _client; + + [ClassInitialize] + public static async Task Initialize(TestContext context) + { + Context = context; + _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); + if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); + Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; + await _client.Login(TokenType.User, "UserToken_Voltana"); + } + + [TestMethod] + [TestCategory("Users")] + public static async Task Test_Get_Current_User() + { + var currentUser = await _client.GetCurrentUser(); + Assert.AreEqual(66078337084162048, currentUser.Id, "Expected Id '66078337084162048'"); + Assert.AreEqual("Voltana", currentUser.Username, "Expected Name 'Voltana'"); + Assert.AreEqual(0001, currentUser.Discriminator, "Expected Discriminator '0001'"); + // Cannot Test Avatar URLs, Avatar ID not exposed publicly. + Assert.AreEqual(true, currentUser.IsVerified, "Expected Verified 'true'"); + Assert.AreEqual("hello-i-am-not-real@foxbot.me", currentUser.Email, "Expected Email 'hello-i-am-not-real@foxbot.me'"); + } + } +} From 25300d5fa4c009637a5535e223bf3e9d477f4665 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Fri, 13 May 2016 22:29:59 -0400 Subject: [PATCH 3/8] Add tests for Users; Add Mocks/Handlers + Test GET /users/@me + Test GET /users/:id --- .../Discord.Net.Tests.csproj | 8 +++--- .../Rest/{ => Framework}/EndpointHandler.cs | 1 + .../Rest/{ => Framework}/TestRestClient.cs | 0 .../Rest/Responses/Users/UserHandlers.cs | 6 +++++ .../Rest/Responses/Users/User_Mocks.cs | 16 ++++++++++++ test/Discord.Net.Tests/Rest/UserTests.cs | 26 ++++++++++++++++--- 6 files changed, 50 insertions(+), 7 deletions(-) rename test/Discord.Net.Tests/Rest/{ => Framework}/EndpointHandler.cs (90%) rename test/Discord.Net.Tests/Rest/{ => Framework}/TestRestClient.cs (100%) create mode 100644 test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj index 3526e12ca..4b5511611 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj @@ -55,11 +55,13 @@ - - + + - + + + diff --git a/test/Discord.Net.Tests/Rest/EndpointHandler.cs b/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs similarity index 90% rename from test/Discord.Net.Tests/Rest/EndpointHandler.cs rename to test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs index 318139d13..9729890de 100644 --- a/test/Discord.Net.Tests/Rest/EndpointHandler.cs +++ b/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs @@ -20,6 +20,7 @@ namespace Discord.Tests.Rest // /users Endpoints Handlers.Add("users/@me", Responses.Users.UserHandlers.Me_Handler); + Handlers.Add("users/96642168176807936", Responses.Users.UserHandlers.Id_User_Valid); } public string HandleMessage(string method, string endpoint, string json) diff --git a/test/Discord.Net.Tests/Rest/TestRestClient.cs b/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs similarity index 100% rename from test/Discord.Net.Tests/Rest/TestRestClient.cs rename to test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs b/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs index b794500ed..f85538ad8 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs +++ b/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs @@ -36,6 +36,12 @@ namespace Discord.Tests.Rest.Responses.Users if (TestRestClient.Headers["authorization"] != "Bot UserToken_VoltanaBot") throw new HttpException((HttpStatusCode)401); return JsonConvert.SerializeObject(new Mock_Me_User_Valid()); } + + public static string Id_User_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/users/:id' is GET"); + return JsonConvert.SerializeObject(new Mock_ID_PublicUser()); + } } public enum TestMode diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs new file mode 100644 index 000000000..3b0310417 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; + +namespace Discord.Tests.Rest.Responses.Users +{ + class Mock_ID_PublicUser + { + [JsonProperty("id")] + public string Id => "96642168176807936"; + [JsonProperty("username")] + public string Username => "Khionu"; + [JsonProperty("discriminator")] + public ushort Discriminator => 9999; + [JsonProperty("avatar")] + public string Avatar => "ceeff590f1e0e1ccae0afc89967131ff"; + } +} diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs index 3998c2789..55e3664c8 100644 --- a/test/Discord.Net.Tests/Rest/UserTests.cs +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -15,26 +15,44 @@ namespace Discord.Tests.Rest private static DiscordClient _client; [ClassInitialize] - public static async Task Initialize(TestContext context) + public static void Initialize(TestContext context) { Context = context; _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; - await _client.Login(TokenType.User, "UserToken_Voltana"); + _client.Login(TokenType.User, "UserToken_Voltana").Wait(); } [TestMethod] [TestCategory("Users")] - public static async Task Test_Get_Current_User() + public async Task Test_Get_Current_User() { var currentUser = await _client.GetCurrentUser(); - Assert.AreEqual(66078337084162048, currentUser.Id, "Expected Id '66078337084162048'"); + Assert.AreEqual((UInt64)66078337084162048, currentUser.Id, "Expected Id '66078337084162048'"); Assert.AreEqual("Voltana", currentUser.Username, "Expected Name 'Voltana'"); Assert.AreEqual(0001, currentUser.Discriminator, "Expected Discriminator '0001'"); // Cannot Test Avatar URLs, Avatar ID not exposed publicly. Assert.AreEqual(true, currentUser.IsVerified, "Expected Verified 'true'"); Assert.AreEqual("hello-i-am-not-real@foxbot.me", currentUser.Email, "Expected Email 'hello-i-am-not-real@foxbot.me'"); + Assert.AreEqual(UserStatus.Unknown, currentUser.Status, "UserStatus should not be populated."); + Assert.AreEqual(false, currentUser.IsBot, "Expected IsBot 'false'"); + Assert.AreEqual("<@66078337084162048>", currentUser.Mention, "Expected Mention '<@66078337084162048>'"); + Assert.IsNull(currentUser.CurrentGame, "CurrentGame should not be populated."); + Assert.AreEqual(new DateTime(635714215032370000), currentUser.CreatedAt, "Expected Created At '635714215032370000'"); + } + [TestMethod] + [TestCategory("Users")] + public async Task Test_Get_User() + { + var user = await _client.GetUser(96642168176807936); + Assert.AreEqual((UInt64)96642168176807936, user.Id, "Expected Id '96642168176807936'"); + Assert.AreEqual("Khionu", user.Username, "Expected Name 'Khionu'"); + Assert.AreEqual(9999, user.Discriminator, "Expected Discriminator '0001'"); + // Cannot Test Avatar URLs, Avatar ID not exposed publicly. + Assert.AreEqual(false, user.IsBot, "Expected IsBot 'false'"); + Assert.AreEqual("<@!96642168176807936>", user.NicknameMention, "Expected Mention '<@!96642168176807936>'"); + Assert.AreEqual(new DateTime(635787084884180000), user.CreatedAt, "Expected Created At '635787084884180000'"); } } } From b08f7b6641ac00f99f9962c97745b2d2c0b232a5 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 14 May 2016 17:58:17 -0400 Subject: [PATCH 4/8] Added JSON serializer, switched mocks to API models; Added Tests... Guilds ------ + Get Guild + Get Invalid Guild + Get Guilds + Get Guild/Bans * Get Guild/User + Get Guild/Invalid User + Get Guild/Users - Get Guild/Role - Get Guild/Invalid Role - Get Guild/Roles - Get Guild/Invites Users ----- + Get Invalid User --- .../Discord.Net.Tests.csproj | 9 +- .../Rest/Framework/EndpointHandler.cs | 19 ++- .../Rest/Framework/Serializer.cs | 41 ++++++ test/Discord.Net.Tests/Rest/GuildTests.cs | 119 ++++++++++++++++++ test/Discord.Net.Tests/Rest/LoginTests.cs | 1 + .../Rest/Responses/Guilds/GuildHandlers.cs | 50 ++++++++ .../Rest/Responses/Guilds/Guild_Mocks.cs | 64 ++++++++++ .../Rest/Responses/Guilds/Member_Mocks.cs | 36 ++++++ .../Rest/Responses/Roles/Role_Mocks.cs | 23 ++++ .../Rest/Responses/Users/Me_Mocks.cs | 38 ------ .../Rest/Responses/Users/UserHandlers.cs | 18 ++- .../Rest/Responses/Users/User_Mocks.cs | 47 +++++-- test/Discord.Net.Tests/Rest/UserTests.cs | 8 ++ 13 files changed, 417 insertions(+), 56 deletions(-) create mode 100644 test/Discord.Net.Tests/Rest/Framework/Serializer.cs create mode 100644 test/Discord.Net.Tests/Rest/GuildTests.cs create mode 100644 test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs create mode 100644 test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs create mode 100644 test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs create mode 100644 test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs delete mode 100644 test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj index 4b5511611..eba33a4e2 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj @@ -55,12 +55,17 @@ + + - + + + + + - diff --git a/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs b/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs index 9729890de..948e7fab0 100644 --- a/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs +++ b/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs @@ -19,14 +19,25 @@ namespace Discord.Tests.Rest Handlers = new Dictionary(); // /users Endpoints - Handlers.Add("users/@me", Responses.Users.UserHandlers.Me_Handler); - Handlers.Add("users/96642168176807936", Responses.Users.UserHandlers.Id_User_Valid); + Handlers.Add("GET->users/@me", Responses.Users.UserHandlers.Me_Handler); + Handlers.Add("GET->users/96642168176807936", Responses.Users.UserHandlers.Id_User_Valid); + Handlers.Add("GET->users/1", Responses.Users.UserHandlers.Id_User_Invalid); + Handlers.Add("GET->users/@me/guilds", Responses.Users.UserHandlers.Me_Guilds); + + // /guilds endpoints + Handlers.Add("GET->guilds/66078535390867456", Responses.Guilds.GuildHandlers.Id_Valid); + Handlers.Add("GET->guilds/66078535390867456/bans", Responses.Guilds.GuildHandlers.Bans_Valid); + Handlers.Add("GET->guilds/66078535390867456/members?limit=2147483647&offset=0", Responses.Guilds.GuildHandlers.Members_Valid); + Handlers.Add("GET->guilds/66078535390867456/members/1", Responses.Guilds.GuildHandlers.Member_Invalid); + Handlers.Add("GET->guilds/66078535390867456/members/66078337084162048", Responses.Guilds.GuildHandlers.Member_Valid); + Handlers.Add("GET->guilds/1", Responses.Guilds.GuildHandlers.Id_Invalid); } public string HandleMessage(string method, string endpoint, string json) { - if (Handlers.ContainsKey(endpoint)) - return Handlers[endpoint].Invoke(method, json); + var key = $"{method}->{endpoint}"; + if (Handlers.ContainsKey(key)) + return Handlers[key].Invoke(method, json); throw new NotImplementedException($"{method} -> {endpoint} -> {json}"); } } diff --git a/test/Discord.Net.Tests/Rest/Framework/Serializer.cs b/test/Discord.Net.Tests/Rest/Framework/Serializer.cs new file mode 100644 index 000000000..820fc96f0 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Framework/Serializer.cs @@ -0,0 +1,41 @@ +using Discord.Net.Converters; +using Newtonsoft.Json; +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Globalization; + +namespace Discord.Tests.Rest +{ + public class Json + { + public static JsonSerializer Serializer; + + public Json() + { + Serializer = new JsonSerializer(); + var _serializer = new JsonSerializer(); + _serializer.Converters.Add(new ChannelTypeConverter()); + _serializer.Converters.Add(new ImageConverter()); + _serializer.Converters.Add(new NullableUInt64Converter()); + _serializer.Converters.Add(new PermissionTargetConverter()); + _serializer.Converters.Add(new StringEntityConverter()); + _serializer.Converters.Add(new UInt64Converter()); + _serializer.Converters.Add(new UInt64EntityConverter()); + _serializer.Converters.Add(new UserStatusConverter()); + Serializer = _serializer; + } + + public static string SerializeObject(object o) + { + var sb = new StringBuilder(256); + using (TextWriter text = new StringWriter(sb, CultureInfo.InvariantCulture)) + using (JsonWriter writer = new JsonTextWriter(text)) + Serializer.Serialize(writer, o); + return sb.ToString(); + } + } +} diff --git a/test/Discord.Net.Tests/Rest/GuildTests.cs b/test/Discord.Net.Tests/Rest/GuildTests.cs new file mode 100644 index 000000000..00f6fb65d --- /dev/null +++ b/test/Discord.Net.Tests/Rest/GuildTests.cs @@ -0,0 +1,119 @@ +using Discord.Rest; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Discord.Tests.Rest +{ + [TestClass] + public class GuildTests + { + public static TestContext Context; + private static IDiscordClient _client; + + [ClassInitialize] + public static void Initialize(TestContext context) + { + Context = context; + _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); + if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); + if (Json.Serializer == null) new Json(); + Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; + _client.Login(TokenType.User, "UserToken_Voltana").Wait(); + } + + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Get_Guild() + { + var guild = await _client.GetGuild(66078535390867456); + Assert.AreEqual(66078535390867456UL, guild.Id, "Expected ID '66078535390867456'"); + Assert.AreEqual("Discord API", guild.Name, "Expected Name 'Discord API'"); + // Cannot Verify Guild URL, ID not publicly exposed. + Assert.IsNull(guild.SplashUrl, "Expected SplashUrl 'null'"); + Assert.AreEqual(66078337084162048UL, guild.OwnerId, "Expected OwnerId '66078337084162048'"); + Assert.AreEqual(3600, guild.AFKTimeout, "Expected AFKTimeout '3600'"); + Assert.AreEqual(true, guild.IsEmbeddable, "Expected Embeddable 'true'"); + Assert.IsNull(guild.EmbedChannelId, "Expected EmbedChannelId 'null'"); + Assert.AreEqual(0, guild.VerificationLevel, "Expected VerificationLevel '0'"); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Get_Guild_Invalid_Id() + { + var guild = await _client.GetGuild(1); + Assert.IsNull(guild); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Get_Guilds() + { + var guilds = await _client.GetGuilds(); + Assert.AreEqual(2, guilds.Count(), "Expected 2 Guilds"); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Bans() + { + var guild = await _client.GetGuild(66078535390867456); + var bans = await guild.GetBans(); + Assert.AreEqual(2, bans.Count()); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_User() + { + var guild = await _client.GetGuild(66078535390867456); + var user = await guild.GetUser(66078337084162048); + // TODO: Asserts + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Invalid_User() + { + var guild = await _client.GetGuild(66078535390867456); + var user = await guild.GetUser(1); + Assert.IsNull(user, "Expected returned user to be null"); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Users() + { + var guild = await _client.GetGuild(66078535390867456); + var users = await guild.GetUsers(); + Assert.AreEqual(2, users.Count()); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Role() + { + var guild = await _client.GetGuild(66078535390867456); + var role = await guild.GetRole(1); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Invalid_Role() + { + var guild = await _client.GetGuild(66078535390867456); + var role = await guild.GetRole(1); + Assert.IsNull(role, "Expected returned role to be null."); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Roles() + { + var guild = await _client.GetGuild(66078535390867456); + var roles = await guild.GetRoles(); + } + [TestMethod] + [TestCategory("Guilds")] + public async Task Test_Guild_Get_Invites() + { + var guild = await _client.GetGuild(66078535390867456); + var invites = await guild.GetInvites(); + } + } +} diff --git a/test/Discord.Net.Tests/Rest/LoginTests.cs b/test/Discord.Net.Tests/Rest/LoginTests.cs index 072588e7f..72a23ac40 100644 --- a/test/Discord.Net.Tests/Rest/LoginTests.cs +++ b/test/Discord.Net.Tests/Rest/LoginTests.cs @@ -20,6 +20,7 @@ namespace Discord.Tests.Rest Context = context; _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); + if (Json.Serializer == null) new Json(); } [TestMethod] diff --git a/test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs b/test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs new file mode 100644 index 000000000..66f5cdfc2 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs @@ -0,0 +1,50 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace Discord.Tests.Rest.Responses.Guilds +{ + public static class GuildHandlers + { + public static string Id_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/guilds/:id' is GET."); + return Json.SerializeObject(Guild_Mocks.Guild_From_Id); + } + + public static string Id_Invalid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/guilds/:id' is GET."); + throw new Net.HttpException((HttpStatusCode)404); + } + + public static string Bans_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/bans' is GET."); + return Json.SerializeObject(Guild_Mocks.GuildBansList); + } + + public static string Members_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/members' is GET."); + return Json.SerializeObject(Member_Mocks.Guild_Members); + } + + public static string Member_Valid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/members/:member_id' is GET."); + return Json.SerializeObject(Member_Mocks.Guild_Member_1); + } + + public static string Member_Invalid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/members/:member_id' is GET."); + throw new Net.HttpException((HttpStatusCode)404); + } + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs new file mode 100644 index 000000000..981dc7c06 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs @@ -0,0 +1,64 @@ +using Discord.API; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Discord.Tests.Rest.Responses.Guilds +{ + public static class Guild_Mocks + { + public static Guild Guild_From_Id { get + { + return new Guild + { + Id = 66078535390867456, + Name = "Discord API", + Icon = "c8829ee5a88cbe065519befa9093f63a", + Splash = null, + OwnerId = 66078337084162048, + Region = "us-east", + AFKChannelId = 66081976485941248, + AFKTimeout = 3600, + EmbedEnabled = true, + EmbedChannelId = null, + VerificationLevel = 0, + Roles = new Role[] {Roles.Constant_Role_Mocks.Mock_Everyone_Role}, + }; + } } + + public static IEnumerable GuildBansList => new List { Users.User_Mocks.Bot_User, Users.User_Mocks.Me_User }; + + public static IEnumerable UserGuildsList() => new List{ User_Guild_1, User_Guild_2 }; + + public static UserGuild User_Guild_1 { get + { + return new UserGuild + { + Id = 41771983423143937, + Name = "Discord Developers", + Icon = "ae140f33228348df347067059474bb11", + Owner = false, + Permissions = 103926785 + }; + } } + + public static UserGuild User_Guild_2 + { + get + { + return new UserGuild + { + Id = 81384788765712384, + Name = "Discord API", + Icon = "2aab26934e72b4ec300c5aa6cf67c7b3", + Owner = false, + Permissions = 103926785 + }; + } + } + + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs new file mode 100644 index 000000000..0fad0af1b --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.API; + +namespace Discord.Tests.Rest.Responses.Guilds +{ + public static class Member_Mocks + { + public static IEnumerable Guild_Members => new List { Guild_Member_1, Guild_Member_2 }; + + public static GuildMember Guild_Member_1 { get { + return new GuildMember() + { + User = Users.User_Mocks.Me_User, + Nick = "Voltamom", + JoinedAt = new DateTime(2009, 4, 19), + Deaf = true, + Mute = false, + Roles = new ulong[] { 1UL } + }; + } } + + public static GuildMember Guild_Member_2 { get + { + return new GuildMember() + { + User = Users.User_Mocks.Bot_User, + Nick = "foxbot", + JoinedAt = new DateTime(2016, 5, 5), + }; + } } + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs new file mode 100644 index 000000000..d378b2430 --- /dev/null +++ b/test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs @@ -0,0 +1,23 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.API; + +namespace Discord.Tests.Rest.Responses.Roles +{ + public static class Constant_Role_Mocks + { + public static Role Mock_Everyone_Role { get { return new Role { + Id = 66078535390867456, + Color = 0, + Position = 0, + Hoist = false, + Managed = false, + Name = "@everyone", + Permissions = 36953089 + }; } } + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs deleted file mode 100644 index 283a2dc1a..000000000 --- a/test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Newtonsoft.Json; - -namespace Discord.Tests.Rest.Responses.Users -{ - public class Mock_Me_User_Valid - { - [JsonProperty("id")] - public string Id => "66078337084162048"; - [JsonProperty("username")] - public string Username => "Voltana"; - [JsonProperty("discriminator")] - public ushort Discriminator => 0001; - [JsonProperty("avatar")] - public string Avatar => "ec2b259bfe24686bf9d214b6bebe0834"; - [JsonProperty("verified")] - public bool IsVerified => true; - [JsonProperty("email")] - public string Email => "hello-i-am-not-real@foxbot.me"; - } - - public class Mock_Me_Token_Valid - { - [JsonProperty("id")] - public string Id => "66078337084162048"; - [JsonProperty("username")] - public string Username => "foxboat"; - [JsonProperty("discriminator")] - public ushort Discriminator => 0005; - [JsonProperty("avatar")] - public string Avatar => "ec2b259bfe24686bf9d214b6bebe0834"; - [JsonProperty("verified")] - public bool IsVerified => true; - [JsonProperty("email")] - public string Email => "hello-i-am-not-real@foxbot.me"; - [JsonProperty("bot")] - public bool Bot => true; - } -} diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs b/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs index f85538ad8..280d09175 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs +++ b/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs @@ -27,20 +27,32 @@ namespace Discord.Tests.Rest.Responses.Users { Assert.AreEqual("GET", method, "Expected method to '/users/@me' is GET."); if (TestRestClient.Headers["authorization"] != "UserToken_Voltana") throw new HttpException((HttpStatusCode)401); - return JsonConvert.SerializeObject(new Mock_Me_User_Valid()); + return Json.SerializeObject(User_Mocks.Me_User); } public static string Me_Bot_Valid(string method, string json) { Assert.AreEqual("GET", method, "Expected method to '/users/@me' is GET."); if (TestRestClient.Headers["authorization"] != "Bot UserToken_VoltanaBot") throw new HttpException((HttpStatusCode)401); - return JsonConvert.SerializeObject(new Mock_Me_User_Valid()); + return Json.SerializeObject(User_Mocks.Bot_User); } public static string Id_User_Valid(string method, string json) { Assert.AreEqual("GET", method, "Expected method to '/users/:id' is GET"); - return JsonConvert.SerializeObject(new Mock_ID_PublicUser()); + return Json.SerializeObject(User_Mocks.Public_User); + } + + public static string Id_User_Invalid(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/users/:id' is GET"); + throw new HttpException((HttpStatusCode)404); + } + + public static string Me_Guilds(string method, string json) + { + Assert.AreEqual("GET", method, "Expected method to '/users/@me/guilds' is GET"); + return Json.SerializeObject(Guilds.Guild_Mocks.UserGuildsList()); } } diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs index 3b0310417..cb236805f 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs +++ b/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs @@ -1,16 +1,45 @@ using Newtonsoft.Json; +using Discord.API; namespace Discord.Tests.Rest.Responses.Users { - class Mock_ID_PublicUser + public static class User_Mocks { - [JsonProperty("id")] - public string Id => "96642168176807936"; - [JsonProperty("username")] - public string Username => "Khionu"; - [JsonProperty("discriminator")] - public ushort Discriminator => 9999; - [JsonProperty("avatar")] - public string Avatar => "ceeff590f1e0e1ccae0afc89967131ff"; + public static User Me_User { get { + return new User + { + Id = 66078337084162048, + Username = "Voltana", + Discriminator = 0001, + Avatar = "ec2b259bfe24686bf9d214b6bebe0834", + IsVerified = true, + Email = "hello-i-am-not-real@foxbot.me" + }; + } } + + public static User Bot_User { get + { + return new User + { + Id = 66078337084162048, + Username = "foxboat", + Discriminator = 0005, + Avatar = "ec2b259bfe24686bf9d214b6bebe0834", + IsVerified = true, + Email = "hello-i-am-not-real@foxbot.me", + Bot = true + }; + } } + + public static User Public_User { get + { + return new User + { + Id = 96642168176807936, + Username = "Khionu", + Discriminator = 9999, + Avatar = "ceeff590f1e0e1ccae0afc89967131ff" + }; + } } } } diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs index 55e3664c8..f95040b3c 100644 --- a/test/Discord.Net.Tests/Rest/UserTests.cs +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -20,6 +20,7 @@ namespace Discord.Tests.Rest Context = context; _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); + if (Json.Serializer == null) new Json(); Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; _client.Login(TokenType.User, "UserToken_Voltana").Wait(); } @@ -54,5 +55,12 @@ namespace Discord.Tests.Rest Assert.AreEqual("<@!96642168176807936>", user.NicknameMention, "Expected Mention '<@!96642168176807936>'"); Assert.AreEqual(new DateTime(635787084884180000), user.CreatedAt, "Expected Created At '635787084884180000'"); } + [TestMethod] + [TestCategory("Users")] + public async Task Test_Get_Invalid_User() + { + var user = await _client.GetUser(1); + Assert.IsNull(user, "Expected Invalid User to be 'null'"); + } } } From a026320b4cbccf2fe7b13309ff1dc4b9704f8b31 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 14 May 2016 18:45:16 -0400 Subject: [PATCH 5/8] Updated README, fixed User Tests --- README.md | 12 +++++------- test/Discord.Net.Tests/Rest/UserTests.cs | 2 -- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 123764bd3..a48876c5c 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ # Discord.Net v1.0.0-dev -An unofficial .Net API Wrapper for the Discord client (http://discordapp.com). +[![NuGet Pre Release](https://img.shields.io/nuget/vpre/Discord.Net.svg?maxAge=2592000?style=plastic)](https://www.nuget.org/packages/Discord.Net) [![AppVeyor](https://img.shields.io/appveyor/ci/foxbot/discord-net.svg?maxAge=2592000?style=plastic)](https://ci.appveyor.com/project/foxbot/discord-net/) [![Discord](https://discordapp.com/api/servers/81384788765712384/widget.png)](https://discord.gg/0SBTUU1wZTYLhAAW) -Check out the [documentation](https://discordnet.readthedocs.org/en/latest/) or join the [Discord API Chat](https://discord.gg/0SBTUU1wZTVjAMPx). +Discord.Net is an API wrapper for [Discord](http://discordapp.com) written in C#. -##### Warning: documentation is currently outdated. -It's current being rewritten. Until that's done, feel free to use my [DiscordBot](https://github.com/RogueException/DiscordBot) repo for reference. +Check out the [documentation](https://discordnet.readthedocs.org/en/latest/) or join the [Discord API Chat](https://discord.gg/0SBTUU1wZTVjAMPx). -### Installation +## Installing You can download Discord.Net and its extensions from NuGet: - [Discord.Net](https://www.nuget.org/packages/Discord.Net/) - [Discord.Net.Commands](https://www.nuget.org/packages/Discord.Net.Commands/) @@ -15,8 +14,7 @@ You can download Discord.Net and its extensions from NuGet: ### Compiling In order to compile Discord.Net, you require at least the following: -- [Visual Studio 2015](https://www.visualstudio.com/downloads/download-visual-studio-vs) -- Visual Studio 2015 Update 1 or higher (available through Visual Studio) +- [Visual Studio 15](https://www.visualstudio.com/downloads/download-visual-studio-vs) - [ASP.Net 5 RC1](https://get.asp.net) - NuGet 3.3 (available through Visual Studio) diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs index f95040b3c..80ccc10a1 100644 --- a/test/Discord.Net.Tests/Rest/UserTests.cs +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -36,10 +36,8 @@ namespace Discord.Tests.Rest // Cannot Test Avatar URLs, Avatar ID not exposed publicly. Assert.AreEqual(true, currentUser.IsVerified, "Expected Verified 'true'"); Assert.AreEqual("hello-i-am-not-real@foxbot.me", currentUser.Email, "Expected Email 'hello-i-am-not-real@foxbot.me'"); - Assert.AreEqual(UserStatus.Unknown, currentUser.Status, "UserStatus should not be populated."); Assert.AreEqual(false, currentUser.IsBot, "Expected IsBot 'false'"); Assert.AreEqual("<@66078337084162048>", currentUser.Mention, "Expected Mention '<@66078337084162048>'"); - Assert.IsNull(currentUser.CurrentGame, "CurrentGame should not be populated."); Assert.AreEqual(new DateTime(635714215032370000), currentUser.CreatedAt, "Expected Created At '635714215032370000'"); } [TestMethod] From fa5f79eac208bc1e15bb0800dae0e1130390b485 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 28 May 2016 10:53:29 -0400 Subject: [PATCH 6/8] Patched TestRestClient for compatibility with newest version. (pre-fetch cleanup) --- test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs b/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs index a1b4f1b10..620f55b4e 100644 --- a/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs +++ b/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs @@ -19,13 +19,15 @@ namespace Discord.Tests.Rest } - Task IRestClient.Send(string method, string endpoint, IReadOnlyDictionary multipartParams) + Task IRestClient.Send(string method, string endpoint, IReadOnlyDictionary multipartParams, bool headerOnly = false) { + if (headerOnly) return null; throw new NotImplementedException("method only used for SendFile, not concerned with that yet."); } - Task IRestClient.Send(string method, string endpoint, string json) + Task IRestClient.Send(string method, string endpoint, string json, bool headerOnly = false) { + if (headerOnly) return null; return Task.FromResult(new MemoryStream(Encoding.UTF8.GetBytes(EndpointHandler.Instance.HandleMessage(method, endpoint, json)))); } From 191784c9c953449cd4b52018994a78d999fbbea7 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 28 May 2016 11:09:59 -0400 Subject: [PATCH 7/8] Updated README to have new badges again --- Discord.Net.sln | 16 ++++++++-------- README.md | 17 +++++++++-------- test/Discord.Net.Tests/Discord.Net.Tests.csproj | 10 +++------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/Discord.Net.sln b/Discord.Net.sln index 1903df403..5c8ec796e 100644 --- a/Discord.Net.sln +++ b/Discord.Net.sln @@ -1,26 +1,26 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.25302.0 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net", "src\Discord.Net\Discord.Net.csproj", "{18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Tests", "test\Discord.Net.Tests\Discord.Net.Tests.csproj", "{855D6B1D-847B-42DA-BE6A-23683EA89511}" EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Discord.Net", "src\Discord.Net\Discord.Net.xproj", "{91E9E7BD-75C9-4E98-84AA-2C271922E5C2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90}.Release|Any CPU.Build.0 = Release|Any CPU {855D6B1D-847B-42DA-BE6A-23683EA89511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {855D6B1D-847B-42DA-BE6A-23683EA89511}.Debug|Any CPU.Build.0 = Debug|Any CPU {855D6B1D-847B-42DA-BE6A-23683EA89511}.Release|Any CPU.ActiveCfg = Release|Any CPU {855D6B1D-847B-42DA-BE6A-23683EA89511}.Release|Any CPU.Build.0 = Release|Any CPU + {91E9E7BD-75C9-4E98-84AA-2C271922E5C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91E9E7BD-75C9-4E98-84AA-2C271922E5C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91E9E7BD-75C9-4E98-84AA-2C271922E5C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91E9E7BD-75C9-4E98-84AA-2C271922E5C2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/README.md b/README.md index 06f3ae426..342dd011c 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,16 @@ # Discord.Net v1.0.0-dev -[![Build status](https://ci.appveyor.com/api/projects/status/p0n69xhqgmoobycf/branch/master?svg=true)](https://ci.appveyor.com/project/foxbot/discord-net/branch/master) -An unofficial .Net API Wrapper for the Discord client (http://discordapp.com). +[![NuGet Pre Release](https://img.shields.io/nuget/vpre/Discord.Net.svg?maxAge=2592000?style=plastic)](https://www.nuget.org/packages/Discord.Net) [![AppVeyor](https://img.shields.io/appveyor/ci/foxbot/discord-net.svg?maxAge=2592000?style=plastic)](https://ci.appveyor.com/project/foxbot/discord-net/) [![Discord](https://discordapp.com/api/servers/81384788765712384/widget.png)](https://discord.gg/0SBTUU1wZTYLhAAW) -Check out the [documentation](http://rtd.discord.foxbot.me/en/docs-dev/index.html) or join the [Discord API Chat](https://discord.gg/0SBTUU1wZTVjAMPx). +Discord.Net is an API wrapper for [Discord](http://discordapp.com) written in C#. -##### Warning: Some of the documentation is outdated. -It's current being rewritten. Until that's done, feel free to use my [DiscordBot](https://github.com/RogueException/DiscordBot) repo for reference. +Check out the [documentation](https://discordnet.readthedocs.org/en/latest/) or join the [Discord API Chat](https://discord.gg/0SBTUU1wZTVjAMPx). + + +## Installing + +**NuGet is not up to date with 1.0.0-dev.** -### Installation You can download Discord.Net and its extensions from NuGet: - [Discord.Net](https://www.nuget.org/packages/Discord.Net/) - [Discord.Net.Commands](https://www.nuget.org/packages/Discord.Net.Commands/) @@ -20,5 +22,4 @@ In order to compile Discord.Net, you require at least the following: - [Visual Studio 2015](https://www.visualstudio.com/downloads/download-visual-studio-vs) - [Visual Studio 2015 Update 2](https://www.visualstudio.com/en-us/news/vs2015-update2-vs.aspx) - [Visual Studio .Net Core Plugin](https://www.microsoft.com/net/core#windows) -- NuGet 3.3+ (available through Visual Studio) - +- NuGet 3.3+ (available through Visual Studio) \ No newline at end of file diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj index eba33a4e2..3718f94f3 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj @@ -36,6 +36,9 @@ 4 + + ..\..\src\Discord.Net\bin\Debug\Discord.Net.dll + ..\..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll True @@ -73,13 +76,6 @@ - - - {18F6FE23-73F6-4CA6-BBD9-F0139DC3EE90} - Discord.Net - - - From 4b2befa93a05820fffa45c3205fe2ae4277f90fd Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 9 Jul 2016 00:28:03 -0400 Subject: [PATCH 8/8] Update Tests to new Discord.Net 1.0 --- Discord.Net.sln | 8 +- .../Discord.Net.Tests.csproj | 8 +- .../{Rest => }/Framework/EndpointHandler.cs | 2 +- .../{Rest => }/Framework/Serializer.cs | 2 +- .../{Rest => }/Framework/TestRestClient.cs | 19 +- .../Responses/Guilds/GuildHandlers.cs | 2 +- .../Responses/Guilds/Guild_Mocks.cs | 20 +- .../Responses/Guilds/Member_Mocks.cs | 19 +- .../Responses/Roles/Role_Mocks.cs | 30 ++ .../Responses/Users/UserHandlers.cs | 2 +- .../{Rest => }/Responses/Users/User_Mocks.cs | 34 +- test/Discord.Net.Tests/Rest/GuildTests.cs | 49 +-- test/Discord.Net.Tests/Rest/LoginTests.cs | 20 +- .../Rest/Responses/Roles/Role_Mocks.cs | 23 -- test/Discord.Net.Tests/Rest/UserTests.cs | 15 +- test/Discord.Net.Tests/Tests.cs | 331 +++++++++--------- 16 files changed, 319 insertions(+), 265 deletions(-) rename test/Discord.Net.Tests/{Rest => }/Framework/EndpointHandler.cs (98%) rename test/Discord.Net.Tests/{Rest => }/Framework/Serializer.cs (97%) rename test/Discord.Net.Tests/{Rest => }/Framework/TestRestClient.cs (57%) rename test/Discord.Net.Tests/{Rest => }/Responses/Guilds/GuildHandlers.cs (97%) rename test/Discord.Net.Tests/{Rest => }/Responses/Guilds/Guild_Mocks.cs (81%) rename test/Discord.Net.Tests/{Rest => }/Responses/Guilds/Member_Mocks.cs (74%) create mode 100644 test/Discord.Net.Tests/Responses/Roles/Role_Mocks.cs rename test/Discord.Net.Tests/{Rest => }/Responses/Users/UserHandlers.cs (97%) rename test/Discord.Net.Tests/{Rest => }/Responses/Users/User_Mocks.cs (63%) delete mode 100644 test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs diff --git a/Discord.Net.sln b/Discord.Net.sln index 11960606b..81609774d 100644 --- a/Discord.Net.sln +++ b/Discord.Net.sln @@ -1,12 +1,14 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +VisualStudioVersion = 14.0.25420.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Discord.Net", "src\Discord.Net\Discord.Net.xproj", "{91E9E7BD-75C9-4E98-84AA-2C271922E5C2}" EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Discord.Net.Commands", "src\Discord.Net.Commands\Discord.Net.Commands.xproj", "{078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Tests", "test\Discord.Net.Tests\Discord.Net.Tests.csproj", "{855D6B1D-847B-42DA-BE6A-23683EA89511}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {078DD7E6-943D-4D09-AFC2-D2BA58B76C9C}.Release|Any CPU.Build.0 = Release|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Debug|Any CPU.Build.0 = Debug|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Release|Any CPU.ActiveCfg = Release|Any CPU + {855D6B1D-847B-42DA-BE6A-23683EA89511}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.csproj b/test/Discord.Net.Tests/Discord.Net.Tests.csproj index 3718f94f3..9e6be223d 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.csproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.csproj @@ -37,7 +37,7 @@ - ..\..\src\Discord.Net\bin\Debug\Discord.Net.dll + ..\..\src\Discord.Net\bin\Debug\netstandard1.3\Discord.Net.dll ..\..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll @@ -76,6 +76,12 @@ + + + {078dd7e6-943d-4d09-afc2-d2ba58b76c9c} + Discord.Net.Commands + + diff --git a/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs b/test/Discord.Net.Tests/Framework/EndpointHandler.cs similarity index 98% rename from test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs rename to test/Discord.Net.Tests/Framework/EndpointHandler.cs index 948e7fab0..459206a08 100644 --- a/test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs +++ b/test/Discord.Net.Tests/Framework/EndpointHandler.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace Discord.Tests.Rest +namespace Discord.Tests.Framework { public class EndpointHandler { diff --git a/test/Discord.Net.Tests/Rest/Framework/Serializer.cs b/test/Discord.Net.Tests/Framework/Serializer.cs similarity index 97% rename from test/Discord.Net.Tests/Rest/Framework/Serializer.cs rename to test/Discord.Net.Tests/Framework/Serializer.cs index 820fc96f0..876ca135e 100644 --- a/test/Discord.Net.Tests/Rest/Framework/Serializer.cs +++ b/test/Discord.Net.Tests/Framework/Serializer.cs @@ -8,7 +8,7 @@ using System.Text; using System.Threading.Tasks; using System.Globalization; -namespace Discord.Tests.Rest +namespace Discord.Tests.Framework { public class Json { diff --git a/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs b/test/Discord.Net.Tests/Framework/TestRestClient.cs similarity index 57% rename from test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs rename to test/Discord.Net.Tests/Framework/TestRestClient.cs index 620f55b4e..bdba451cf 100644 --- a/test/Discord.Net.Tests/Rest/Framework/TestRestClient.cs +++ b/test/Discord.Net.Tests/Framework/TestRestClient.cs @@ -3,34 +3,43 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Discord.Rest; +using Discord; using Discord.Net.Rest; using System.Threading; using System.IO; -namespace Discord.Tests.Rest +namespace Discord.Tests.Framework { class TestRestClient : IRestClient { public static Dictionary Headers = new Dictionary(); - public TestRestClient(string baseUrl, CancellationToken cancelToken) + public TestRestClient(string baseUrl) { + } + Task IRestClient.SendAsync(string method, string endpoint, bool headerOnly = false) + { + if (headerOnly) return null; + return Task.FromResult(new MemoryStream(Encoding.UTF8.GetBytes(EndpointHandler.Instance.HandleMessage(method, endpoint, "")))); } - Task IRestClient.Send(string method, string endpoint, IReadOnlyDictionary multipartParams, bool headerOnly = false) + Task IRestClient.SendAsync(string method, string endpoint, IReadOnlyDictionary multipartParams, bool headerOnly = false) { if (headerOnly) return null; throw new NotImplementedException("method only used for SendFile, not concerned with that yet."); } - Task IRestClient.Send(string method, string endpoint, string json, bool headerOnly = false) + Task IRestClient.SendAsync(string method, string endpoint, string json, bool headerOnly = false) { if (headerOnly) return null; return Task.FromResult(new MemoryStream(Encoding.UTF8.GetBytes(EndpointHandler.Instance.HandleMessage(method, endpoint, json)))); } + void IRestClient.SetCancelToken(CancellationToken cancelToken) + { + } + void IRestClient.SetHeader(string key, string value) { if (Headers.ContainsKey(key)) diff --git a/test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs b/test/Discord.Net.Tests/Responses/Guilds/GuildHandlers.cs similarity index 97% rename from test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs rename to test/Discord.Net.Tests/Responses/Guilds/GuildHandlers.cs index 66f5cdfc2..f090d7b23 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs +++ b/test/Discord.Net.Tests/Responses/Guilds/GuildHandlers.cs @@ -7,7 +7,7 @@ using System.Net; using System.Text; using System.Threading.Tasks; -namespace Discord.Tests.Rest.Responses.Guilds +namespace Discord.Tests.Framework.Responses.Guilds { public static class GuildHandlers { diff --git a/test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs b/test/Discord.Net.Tests/Responses/Guilds/Guild_Mocks.cs similarity index 81% rename from test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs rename to test/Discord.Net.Tests/Responses/Guilds/Guild_Mocks.cs index 981dc7c06..8480656a6 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs +++ b/test/Discord.Net.Tests/Responses/Guilds/Guild_Mocks.cs @@ -6,11 +6,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Discord.Tests.Rest.Responses.Guilds +namespace Discord.Tests.Framework.Responses.Guilds { public static class Guild_Mocks { - public static Guild Guild_From_Id { get + public static Guild Guild_From_Id + { + get { return new Guild { @@ -25,15 +27,18 @@ namespace Discord.Tests.Rest.Responses.Guilds EmbedEnabled = true, EmbedChannelId = null, VerificationLevel = 0, - Roles = new Role[] {Roles.Constant_Role_Mocks.Mock_Everyone_Role}, + Roles = new Role[] { Roles.Constant_Role_Mocks.Mock_Everyone_Role }, }; - } } + } + } public static IEnumerable GuildBansList => new List { Users.User_Mocks.Bot_User, Users.User_Mocks.Me_User }; - public static IEnumerable UserGuildsList() => new List{ User_Guild_1, User_Guild_2 }; + public static IEnumerable UserGuildsList() => new List { User_Guild_1, User_Guild_2 }; - public static UserGuild User_Guild_1 { get + public static UserGuild User_Guild_1 + { + get { return new UserGuild { @@ -43,7 +48,8 @@ namespace Discord.Tests.Rest.Responses.Guilds Owner = false, Permissions = 103926785 }; - } } + } + } public static UserGuild User_Guild_2 { diff --git a/test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs b/test/Discord.Net.Tests/Responses/Guilds/Member_Mocks.cs similarity index 74% rename from test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs rename to test/Discord.Net.Tests/Responses/Guilds/Member_Mocks.cs index 0fad0af1b..42bac5f41 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs +++ b/test/Discord.Net.Tests/Responses/Guilds/Member_Mocks.cs @@ -5,25 +5,31 @@ using System.Text; using System.Threading.Tasks; using Discord.API; -namespace Discord.Tests.Rest.Responses.Guilds +namespace Discord.Tests.Framework.Responses.Guilds { public static class Member_Mocks { public static IEnumerable Guild_Members => new List { Guild_Member_1, Guild_Member_2 }; - public static GuildMember Guild_Member_1 { get { + public static GuildMember Guild_Member_1 + { + get + { return new GuildMember() { User = Users.User_Mocks.Me_User, - Nick = "Voltamom", + Nick = "voltana", JoinedAt = new DateTime(2009, 4, 19), Deaf = true, Mute = false, Roles = new ulong[] { 1UL } }; - } } + } + } - public static GuildMember Guild_Member_2 { get + public static GuildMember Guild_Member_2 + { + get { return new GuildMember() { @@ -31,6 +37,7 @@ namespace Discord.Tests.Rest.Responses.Guilds Nick = "foxbot", JoinedAt = new DateTime(2016, 5, 5), }; - } } + } + } } } diff --git a/test/Discord.Net.Tests/Responses/Roles/Role_Mocks.cs b/test/Discord.Net.Tests/Responses/Roles/Role_Mocks.cs new file mode 100644 index 000000000..82d0c4739 --- /dev/null +++ b/test/Discord.Net.Tests/Responses/Roles/Role_Mocks.cs @@ -0,0 +1,30 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Discord.API; + +namespace Discord.Tests.Framework.Responses.Roles +{ + public static class Constant_Role_Mocks + { + public static Role Mock_Everyone_Role + { + get + { + return new Role + { + Id = 66078535390867456, + Color = 0, + Position = 0, + Hoist = false, + Managed = false, + Name = "@everyone", + Permissions = 36953089 + }; + } + } + } +} diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs b/test/Discord.Net.Tests/Responses/Users/UserHandlers.cs similarity index 97% rename from test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs rename to test/Discord.Net.Tests/Responses/Users/UserHandlers.cs index 280d09175..4e2154023 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs +++ b/test/Discord.Net.Tests/Responses/Users/UserHandlers.cs @@ -4,7 +4,7 @@ using Discord.Net; using System.Net; using System; -namespace Discord.Tests.Rest.Responses.Users +namespace Discord.Tests.Framework.Responses.Users { public static class UserHandlers { diff --git a/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs b/test/Discord.Net.Tests/Responses/Users/User_Mocks.cs similarity index 63% rename from test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs rename to test/Discord.Net.Tests/Responses/Users/User_Mocks.cs index cb236805f..71cb01c77 100644 --- a/test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs +++ b/test/Discord.Net.Tests/Responses/Users/User_Mocks.cs @@ -1,45 +1,55 @@ using Newtonsoft.Json; using Discord.API; -namespace Discord.Tests.Rest.Responses.Users +namespace Discord.Tests.Framework.Responses.Users { public static class User_Mocks { - public static User Me_User { get { + public static User Me_User + { + get + { return new User { Id = 66078337084162048, Username = "Voltana", - Discriminator = 0001, + Discriminator = "0001", Avatar = "ec2b259bfe24686bf9d214b6bebe0834", - IsVerified = true, + Verified = true, Email = "hello-i-am-not-real@foxbot.me" }; - } } + } + } - public static User Bot_User { get + public static User Bot_User + { + get { return new User { Id = 66078337084162048, Username = "foxboat", - Discriminator = 0005, + Discriminator = "0005", Avatar = "ec2b259bfe24686bf9d214b6bebe0834", - IsVerified = true, + Verified = true, Email = "hello-i-am-not-real@foxbot.me", Bot = true }; - } } + } + } - public static User Public_User { get + public static User Public_User + { + get { return new User { Id = 96642168176807936, Username = "Khionu", - Discriminator = 9999, + Discriminator = "9999", Avatar = "ceeff590f1e0e1ccae0afc89967131ff" }; - } } + } + } } } diff --git a/test/Discord.Net.Tests/Rest/GuildTests.cs b/test/Discord.Net.Tests/Rest/GuildTests.cs index 00f6fb65d..a9194481b 100644 --- a/test/Discord.Net.Tests/Rest/GuildTests.cs +++ b/test/Discord.Net.Tests/Rest/GuildTests.cs @@ -1,10 +1,11 @@ -using Discord.Rest; +using Discord; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Discord.Tests.Framework; namespace Discord.Tests.Rest { @@ -12,7 +13,7 @@ namespace Discord.Tests.Rest public class GuildTests { public static TestContext Context; - private static IDiscordClient _client; + private static DiscordClient _client; [ClassInitialize] public static void Initialize(TestContext context) @@ -21,15 +22,15 @@ namespace Discord.Tests.Rest _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); if (Json.Serializer == null) new Json(); - Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; - _client.Login(TokenType.User, "UserToken_Voltana").Wait(); + Framework.Responses.Users.UserHandlers.Mode = Framework.Responses.Users.TestMode.User; + _client.LoginAsync(TokenType.User, "UserToken_Voltana").GetAwaiter().GetResult(); } - + [TestMethod] [TestCategory("Guilds")] public async Task Test_Get_Guild() { - var guild = await _client.GetGuild(66078535390867456); + var guild = await _client.GetGuildAsync(66078535390867456); Assert.AreEqual(66078535390867456UL, guild.Id, "Expected ID '66078535390867456'"); Assert.AreEqual("Discord API", guild.Name, "Expected Name 'Discord API'"); // Cannot Verify Guild URL, ID not publicly exposed. @@ -44,76 +45,76 @@ namespace Discord.Tests.Rest [TestCategory("Guilds")] public async Task Test_Get_Guild_Invalid_Id() { - var guild = await _client.GetGuild(1); + var guild = await _client.GetGuildAsync(1); Assert.IsNull(guild); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Get_Guilds() { - var guilds = await _client.GetGuilds(); + var guilds = await _client.GetGuildsAsync(); Assert.AreEqual(2, guilds.Count(), "Expected 2 Guilds"); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Bans() { - var guild = await _client.GetGuild(66078535390867456); - var bans = await guild.GetBans(); + var guild = await _client.GetGuildAsync(66078535390867456); + var bans = await guild.GetBansAsync(); Assert.AreEqual(2, bans.Count()); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_User() { - var guild = await _client.GetGuild(66078535390867456); - var user = await guild.GetUser(66078337084162048); + var guild = await _client.GetGuildAsync(66078535390867456); + var user = await guild.GetUserAsync(66078337084162048); // TODO: Asserts } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Invalid_User() { - var guild = await _client.GetGuild(66078535390867456); - var user = await guild.GetUser(1); + var guild = await _client.GetGuildAsync(66078535390867456); + var user = await guild.GetUserAsync(1); Assert.IsNull(user, "Expected returned user to be null"); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Users() { - var guild = await _client.GetGuild(66078535390867456); - var users = await guild.GetUsers(); + var guild = await _client.GetGuildAsync(66078535390867456); + var users = await guild.GetUsersAsync(); Assert.AreEqual(2, users.Count()); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Role() { - var guild = await _client.GetGuild(66078535390867456); - var role = await guild.GetRole(1); + var guild = await _client.GetGuildAsync(66078535390867456); + var role = guild.GetRole(1); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Invalid_Role() { - var guild = await _client.GetGuild(66078535390867456); - var role = await guild.GetRole(1); + var guild = await _client.GetGuildAsync(66078535390867456); + var role = guild.GetRole(1); Assert.IsNull(role, "Expected returned role to be null."); } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Roles() { - var guild = await _client.GetGuild(66078535390867456); - var roles = await guild.GetRoles(); + var guild = await _client.GetGuildAsync(66078535390867456); + var roles = guild.Roles; } [TestMethod] [TestCategory("Guilds")] public async Task Test_Guild_Get_Invites() { - var guild = await _client.GetGuild(66078535390867456); - var invites = await guild.GetInvites(); + var guild = await _client.GetGuildAsync(66078535390867456); + var invites = await guild.GetInvitesAsync(); } } } diff --git a/test/Discord.Net.Tests/Rest/LoginTests.cs b/test/Discord.Net.Tests/Rest/LoginTests.cs index 72a23ac40..cbd2f7b31 100644 --- a/test/Discord.Net.Tests/Rest/LoginTests.cs +++ b/test/Discord.Net.Tests/Rest/LoginTests.cs @@ -4,7 +4,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Discord.Rest; +using Discord; +using Discord.Tests.Framework; +using Discord.Tests.Framework.Responses; namespace Discord.Tests.Rest { @@ -27,31 +29,31 @@ namespace Discord.Tests.Rest [TestCategory("Login")] public async Task Test_Login_As_User() { - Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; - await _client.Login(TokenType.User, "UserToken_Voltana"); + Framework.Responses.Users.UserHandlers.Mode = Framework.Responses.Users.TestMode.User; + await _client.LoginAsync(TokenType.User, "UserToken_Voltana"); } [TestMethod] [ExpectedException(typeof(Net.HttpException))] [TestCategory("Login")] public async Task Test_Login_As_User_With_Invalid_Token() { - Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; - await _client.Login(TokenType.User, "UserToken-NotVoltana"); + Framework.Responses.Users.UserHandlers.Mode = Framework.Responses.Users.TestMode.User; + await _client.LoginAsync(TokenType.User, "UserToken-NotVoltana"); } [TestMethod] [TestCategory("Login")] public async Task Test_Login_As_Bot() { - Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.Bot; - await _client.Login(TokenType.Bot, "UserToken_VoltanaBot"); + Framework.Responses.Users.UserHandlers.Mode = Framework.Responses.Users.TestMode.Bot; + await _client.LoginAsync(TokenType.Bot, "UserToken_VoltanaBot"); } [TestMethod] [ExpectedException(typeof(Net.HttpException))] [TestCategory("Login")] public async Task Test_Login_As_Bot_With_Invalid_Token() { - Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.Bot; - await _client.Login(TokenType.Bot, "UserToken-NotVoltanaBot"); + Framework.Responses.Users.UserHandlers.Mode = Framework.Responses.Users.TestMode.Bot; + await _client.LoginAsync(TokenType.Bot, "UserToken-NotVoltanaBot"); } } } diff --git a/test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs b/test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs deleted file mode 100644 index d378b2430..000000000 --- a/test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Discord.API; - -namespace Discord.Tests.Rest.Responses.Roles -{ - public static class Constant_Role_Mocks - { - public static Role Mock_Everyone_Role { get { return new Role { - Id = 66078535390867456, - Color = 0, - Position = 0, - Hoist = false, - Managed = false, - Name = "@everyone", - Permissions = 36953089 - }; } } - } -} diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs index 80ccc10a1..46b8d17a7 100644 --- a/test/Discord.Net.Tests/Rest/UserTests.cs +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -4,7 +4,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Discord.Rest; +using Discord; +using Discord.Tests.Framework; namespace Discord.Tests.Rest { @@ -21,15 +22,15 @@ namespace Discord.Tests.Rest _client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) }); if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler(); if (Json.Serializer == null) new Json(); - Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User; - _client.Login(TokenType.User, "UserToken_Voltana").Wait(); + Framework.Responses.Users.UserHandlers.Mode = Framework.Responses.Users.TestMode.User; + _client.LoginAsync(TokenType.User, "UserToken_Voltana").GetAwaiter().GetResult(); } - + [TestMethod] [TestCategory("Users")] public async Task Test_Get_Current_User() { - var currentUser = await _client.GetCurrentUser(); + var currentUser = await _client.GetCurrentUserAsync(); Assert.AreEqual((UInt64)66078337084162048, currentUser.Id, "Expected Id '66078337084162048'"); Assert.AreEqual("Voltana", currentUser.Username, "Expected Name 'Voltana'"); Assert.AreEqual(0001, currentUser.Discriminator, "Expected Discriminator '0001'"); @@ -44,7 +45,7 @@ namespace Discord.Tests.Rest [TestCategory("Users")] public async Task Test_Get_User() { - var user = await _client.GetUser(96642168176807936); + var user = await _client.GetUserAsync(96642168176807936); Assert.AreEqual((UInt64)96642168176807936, user.Id, "Expected Id '96642168176807936'"); Assert.AreEqual("Khionu", user.Username, "Expected Name 'Khionu'"); Assert.AreEqual(9999, user.Discriminator, "Expected Discriminator '0001'"); @@ -57,7 +58,7 @@ namespace Discord.Tests.Rest [TestCategory("Users")] public async Task Test_Get_Invalid_User() { - var user = await _client.GetUser(1); + var user = await _client.GetUserAsync(1); Assert.IsNull(user, "Expected Invalid User to be 'null'"); } } diff --git a/test/Discord.Net.Tests/Tests.cs b/test/Discord.Net.Tests/Tests.cs index 1b51a4c94..2c7816b19 100644 --- a/test/Discord.Net.Tests/Tests.cs +++ b/test/Discord.Net.Tests/Tests.cs @@ -1,5 +1,4 @@ -using Discord.Rest; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; @@ -317,184 +316,184 @@ namespace Discord.Tests x => _obGuildBot.UserUpdated -= x, (s, e) => e.After.Username == name); }*/ - /* - [TestMethod] - public void TestSetStatus() - { - AssertEvent( - "UserUpdated never fired", - async () => await SetStatus(_targetBot, UserStatus.Idle), - x => _observerBot.UserUpdated += x, - x => _observerBot.UserUpdated -= x, - (s, e) => e.After.Status == UserStatus.Idle); - } - private Task SetStatus(DiscordClient _client, UserStatus status) - { - throw new NotImplementedException(); - /*_client.SetStatus(status); - await Task.Delay(50); - }*/ - /* - [TestMethod] - public void TestSetGame() - { - AssertEvent( - "UserUpdated never fired", - async () => await SetGame(_targetBot, "test game"), - x => _observerBot.UserUpdated += x, - x => _observerBot.UserUpdated -= x, - (s, e) => _targetBot.CurrentUser.CurrentGame == "test game"); - - } - private Task SetGame(DiscordClient _client, string game) - { - throw new NotImplementedException(); - //_client.SetGame(game); - //await Task.Delay(5); - } + /* + [TestMethod] + public void TestSetStatus() + { + AssertEvent( + "UserUpdated never fired", + async () => await SetStatus(_targetBot, UserStatus.Idle), + x => _observerBot.UserUpdated += x, + x => _observerBot.UserUpdated -= x, + (s, e) => e.After.Status == UserStatus.Idle); + } + private Task SetStatus(DiscordClient _client, UserStatus status) + { + throw new NotImplementedException(); + /*_client.SetStatus(status); + await Task.Delay(50); + }*/ + /* + [TestMethod] + public void TestSetGame() + { + AssertEvent( + "UserUpdated never fired", + async () => await SetGame(_targetBot, "test game"), + x => _observerBot.UserUpdated += x, + x => _observerBot.UserUpdated -= x, + (s, e) => _targetBot.CurrentUser.CurrentGame == "test game"); + + } + private Task SetGame(DiscordClient _client, string game) + { + throw new NotImplementedException(); + //_client.SetGame(game); + //await Task.Delay(5); + } - #endregion + #endregion - #region Permission Tests + #region Permission Tests - // Permissions - [TestMethod] - public async Task Test_AddGet_PermissionsRule() - { - var channel = await _testGuild.CreateTextChannel(GetRandomText()); - var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); - var perms = new OverwritePermissions(sendMessages: PermValue.Deny); - await channel.UpdatePermissionOverwrite(user, perms); - var resultPerms = channel.GetPermissionOverwrite(user); - Assert.IsNotNull(resultPerms, "Perms retrieved from Guild were null."); - } - [TestMethod] - public async Task Test_AddRemove_PermissionsRule() - { - var channel = await _testGuild.CreateTextChannel(GetRandomText()); - var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); - var perms = new OverwritePermissions(sendMessages: PermValue.Deny); - await channel.UpdatePermissionOverwrite(user, perms); - await channel.RemovePermissionOverwrite(user); - await Task.Delay(200); - Assert.AreEqual(PermValue.Inherit, channel.GetPermissionOverwrite(user)?.SendMessages); - } - [TestMethod] - public async Task Test_Permissions_Event() - { - var channel = await _testGuild.CreateTextChannel(GetRandomText()); - var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); - var perms = new OverwritePermissions(sendMessages: PermValue.Deny); - AssertEvent - ("ChannelUpdatedEvent never fired.", - async () => await channel.UpdatePermissionOverwrite(user, perms), - x => _targetBot.ChannelUpdated += x, - x => _targetBot.ChannelUpdated -= x, - (s, e) => e.Channel == channel && (e.After as GuildChannel).PermissionOverwrites.Count() != (e.Before as GuildChannel).PermissionOverwrites.Count()); - } - [TestMethod] - [ExpectedException(typeof(Net.HttpException))] - public async Task Test_Affect_Permissions_Invalid_Channel() - { - var channel = await _testGuild.CreateTextChannel(GetRandomText()); - var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); - var perms = new OverwritePermissions(sendMessages: PermValue.Deny); - await channel.Delete(); - await channel.UpdatePermissionOverwrite(user, perms); - } + // Permissions + [TestMethod] + public async Task Test_AddGet_PermissionsRule() + { + var channel = await _testGuild.CreateTextChannel(GetRandomText()); + var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); + var perms = new OverwritePermissions(sendMessages: PermValue.Deny); + await channel.UpdatePermissionOverwrite(user, perms); + var resultPerms = channel.GetPermissionOverwrite(user); + Assert.IsNotNull(resultPerms, "Perms retrieved from Guild were null."); + } + [TestMethod] + public async Task Test_AddRemove_PermissionsRule() + { + var channel = await _testGuild.CreateTextChannel(GetRandomText()); + var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); + var perms = new OverwritePermissions(sendMessages: PermValue.Deny); + await channel.UpdatePermissionOverwrite(user, perms); + await channel.RemovePermissionOverwrite(user); + await Task.Delay(200); + Assert.AreEqual(PermValue.Inherit, channel.GetPermissionOverwrite(user)?.SendMessages); + } + [TestMethod] + public async Task Test_Permissions_Event() + { + var channel = await _testGuild.CreateTextChannel(GetRandomText()); + var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); + var perms = new OverwritePermissions(sendMessages: PermValue.Deny); + AssertEvent + ("ChannelUpdatedEvent never fired.", + async () => await channel.UpdatePermissionOverwrite(user, perms), + x => _targetBot.ChannelUpdated += x, + x => _targetBot.ChannelUpdated -= x, + (s, e) => e.Channel == channel && (e.After as GuildChannel).PermissionOverwrites.Count() != (e.Before as GuildChannel).PermissionOverwrites.Count()); + } + [TestMethod] + [ExpectedException(typeof(Net.HttpException))] + public async Task Test_Affect_Permissions_Invalid_Channel() + { + var channel = await _testGuild.CreateTextChannel(GetRandomText()); + var user = _testGuild.GetUser(_targetBot.CurrentUser.Id); + var perms = new OverwritePermissions(sendMessages: PermValue.Deny); + await channel.Delete(); + await channel.UpdatePermissionOverwrite(user, perms); + } - #endregion + #endregion - [ClassCleanup] - public static async Task Cleanup() - { - WaitMany( - (await _hostBot.GetGuilds()).Select(x => x.Owner.Id == _hostBot.CurrentUser.Id ? x.Delete() : x.Leave()), - (await _targetBot.GetGuilds()).Select(x => x.Owner.Id == _targetBot.CurrentUser.Id ? x.Delete() : x.Leave()), - (await _observerBot.GetGuilds()).Select(x => x.Owner.Id == _observerBot.CurrentUser.Id ? x.Delete() : x.Leave())); - - WaitAll( - _hostBot.Disconnect(), - _targetBot.Disconnect(), - _observerBot.Disconnect()); - } + [ClassCleanup] + public static async Task Cleanup() + { + WaitMany( + (await _hostBot.GetGuilds()).Select(x => x.Owner.Id == _hostBot.CurrentUser.Id ? x.Delete() : x.Leave()), + (await _targetBot.GetGuilds()).Select(x => x.Owner.Id == _targetBot.CurrentUser.Id ? x.Delete() : x.Leave()), + (await _observerBot.GetGuilds()).Select(x => x.Owner.Id == _observerBot.CurrentUser.Id ? x.Delete() : x.Leave())); - #region Helpers + WaitAll( + _hostBot.Disconnect(), + _targetBot.Disconnect(), + _observerBot.Disconnect()); + } - // Task Helpers + #region Helpers - private static void AssertEvent(string msg, Func action, Action> addEvent, Action> removeEvent, Func test = null) - { - AssertEvent(msg, action, addEvent, removeEvent, test, true); - } - private static void AssertNoEvent(string msg, Func action, Action> addEvent, Action> removeEvent, Func test = null) - { - AssertEvent(msg, action, addEvent, removeEvent, test, false); - } - private static void AssertEvent(string msg, Func action, Action> addEvent, Action> removeEvent, Func test, bool assertTrue) - { - ManualResetEventSlim trigger = new ManualResetEventSlim(false); - bool result = false; + // Task Helpers - EventHandler handler = (s, e) => - { - if (test != null) - { - result |= test(s, e); - trigger.Set(); - } - else - result = true; - }; - - addEvent(handler); - var task = action(); - trigger.Wait(EventTimeout); - task.Wait(); - removeEvent(handler); - - Assert.AreEqual(assertTrue, result, msg); - } + private static void AssertEvent(string msg, Func action, Action> addEvent, Action> removeEvent, Func test = null) + { + AssertEvent(msg, action, addEvent, removeEvent, test, true); + } + private static void AssertNoEvent(string msg, Func action, Action> addEvent, Action> removeEvent, Func test = null) + { + AssertEvent(msg, action, addEvent, removeEvent, test, false); + } + private static void AssertEvent(string msg, Func action, Action> addEvent, Action> removeEvent, Func test, bool assertTrue) + { + ManualResetEventSlim trigger = new ManualResetEventSlim(false); + bool result = false; - private static void AssertEvent(string msg, Func action, Action addEvent, Action removeEvent, Func test, bool assertTrue) + EventHandler handler = (s, e) => { - ManualResetEventSlim trigger = new ManualResetEventSlim(false); - bool result = false; - - EventHandler handler = (s, e) => + if (test != null) { - if (test != null) - { - result |= test(s); - trigger.Set(); - } - else - result = true; - }; - - addEvent(handler); - var task = action(); - trigger.Wait(EventTimeout); - task.Wait(); - removeEvent(handler); - - Assert.AreEqual(assertTrue, result, msg); - } + result |= test(s, e); + trigger.Set(); + } + else + result = true; + }; + + addEvent(handler); + var task = action(); + trigger.Wait(EventTimeout); + task.Wait(); + removeEvent(handler); + + Assert.AreEqual(assertTrue, result, msg); + } + + private static void AssertEvent(string msg, Func action, Action addEvent, Action removeEvent, Func test, bool assertTrue) + { + ManualResetEventSlim trigger = new ManualResetEventSlim(false); + bool result = false; - private static void WaitAll(params Task[] tasks) - { - Task.WaitAll(tasks); - } - private static void WaitAll(IEnumerable tasks) - { - Task.WaitAll(tasks.ToArray()); - } - private static void WaitMany(params IEnumerable[] tasks) + EventHandler handler = (s, e) => { - Task.WaitAll(tasks.Where(x => x != null).SelectMany(x => x).ToArray()); - } + if (test != null) + { + result |= test(s); + trigger.Set(); + } + else + result = true; + }; + + addEvent(handler); + var task = action(); + trigger.Wait(EventTimeout); + task.Wait(); + removeEvent(handler); + + Assert.AreEqual(assertTrue, result, msg); + } + + private static void WaitAll(params Task[] tasks) + { + Task.WaitAll(tasks); + } + private static void WaitAll(IEnumerable tasks) + { + Task.WaitAll(tasks.ToArray()); + } + private static void WaitMany(params IEnumerable[] tasks) + { + Task.WaitAll(tasks.Where(x => x != null).SelectMany(x => x).ToArray()); + } - #endregion - }*/ + #endregion +}*/ }