From 2bb177700513b02322cb1b67c16e00b04d931b9d Mon Sep 17 00:00:00 2001 From: Christopher F Date: Sat, 10 Sep 2016 19:58:15 -0400 Subject: [PATCH] Implement Get User by Username#Discrim, Get Guild by ID --- .../Discord.Net.Tests/Discord.Net.Tests.xproj | 2 +- .../Framework/Mocks/Rest/Guilds.cs | 23 ++++++++++ .../Framework/Mocks/Rest/Roles.cs | 43 +++++++++++++++++++ .../Framework/RequestHandler.cs | 15 ++++++- .../Framework/Routes/Guilds.cs | 11 +++++ .../Framework/Routes/Users.cs | 25 +++-------- test/Discord.Net.Tests/Rest/GuildTests.cs | 42 ++++++++++++++++++ test/Discord.Net.Tests/Rest/UserTests.cs | 25 +++++++---- 8 files changed, 155 insertions(+), 31 deletions(-) create mode 100644 test/Discord.Net.Tests/Framework/Mocks/Rest/Guilds.cs create mode 100644 test/Discord.Net.Tests/Framework/Mocks/Rest/Roles.cs create mode 100644 test/Discord.Net.Tests/Framework/Routes/Guilds.cs create mode 100644 test/Discord.Net.Tests/Rest/GuildTests.cs diff --git a/test/Discord.Net.Tests/Discord.Net.Tests.xproj b/test/Discord.Net.Tests/Discord.Net.Tests.xproj index 46ce007f6..1c291ddb0 100644 --- a/test/Discord.Net.Tests/Discord.Net.Tests.xproj +++ b/test/Discord.Net.Tests/Discord.Net.Tests.xproj @@ -7,7 +7,7 @@ 69eecb8d-8705-424f-9202-f7f4051ee403 - Discord.Net.Tests + Discord.Tests .\obj .\bin\ diff --git a/test/Discord.Net.Tests/Framework/Mocks/Rest/Guilds.cs b/test/Discord.Net.Tests/Framework/Mocks/Rest/Guilds.cs new file mode 100644 index 000000000..c95e69b56 --- /dev/null +++ b/test/Discord.Net.Tests/Framework/Mocks/Rest/Guilds.cs @@ -0,0 +1,23 @@ +using Discord.API; + +namespace Discord.Tests.Framework.Mocks.Rest +{ + public static class Guilds + { + public static Guild DiscordApi => new Guild() + { + Id = 81384788765712384, + Name = "Discord API", + OwnerId = 53905483156684800, + MfaLevel = 0, + VerificationLevel = 0, + Roles = new Role[] { Roles.Everyone(81384788765712384), Roles.DiscordEmployee, Roles.LibraryDevs }, + AFKTimeout = 3600, + Region = "us-east", + DefaultMessageNotifications = (DefaultMessageNotifications)1, + EmbedChannelId = 81384788765712384, + EmbedEnabled = true, + Icon = "2aab26934e72b4ec300c5aa6cf67c7b3" + }; + } +} diff --git a/test/Discord.Net.Tests/Framework/Mocks/Rest/Roles.cs b/test/Discord.Net.Tests/Framework/Mocks/Rest/Roles.cs new file mode 100644 index 000000000..676661eef --- /dev/null +++ b/test/Discord.Net.Tests/Framework/Mocks/Rest/Roles.cs @@ -0,0 +1,43 @@ +using Discord.API; + +namespace Discord.Tests.Framework.Mocks.Rest +{ + public static class Roles + { + // TODO: These mocks need to include 'mentionable' when the library implements it. + + public static Role Everyone(ulong guildId) => new Role() + { + Id = guildId, + Name = "@everyone", + Color = 0, + Hoist = false, + Permissions = 104324097, + Position = 0, + Managed = false + }; + + public static Role LibraryDevs => new Role() + { + Id = 81793792671232000, + Name = "Library Devs", + Color = 42607, + Hoist = true, + Permissions = 268435456, + Position = 17, + Managed = false + }; + + public static Role DiscordEmployee => new Role() + { + Id = 103548914652696576, + Name = "Discord Employee", + Color = 10181046, + Hoist = false, + Permissions = 29368358, + Position = 20, + Managed = false + }; + + } +} diff --git a/test/Discord.Net.Tests/Framework/RequestHandler.cs b/test/Discord.Net.Tests/Framework/RequestHandler.cs index 9044cfa1c..ad54f3997 100644 --- a/test/Discord.Net.Tests/Framework/RequestHandler.cs +++ b/test/Discord.Net.Tests/Framework/RequestHandler.cs @@ -3,10 +3,14 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; +using System.Net; using System.Text; using UserRoutes = Discord.Tests.Framework.Routes.Users; +using GuildRoutes = Discord.Tests.Framework.Routes.Guilds; +using Contracts = Discord.Tests.Framework.Routes.Contracts; using Newtonsoft.Json; using Discord.Net.Converters; +using Discord.Net; namespace Discord.Tests.Framework { @@ -18,16 +22,23 @@ namespace Discord.Tests.Framework internal Dictionary Routes = new Dictionary() { + // --- USERS + // Get Current User ["GET users/@me"] = new Response(UserRoutes.Me), + // Get User by ID ["GET users/66078337084162048"] = new Response(UserRoutes.Public), - ["GET users/1"] = new Response(UserRoutes.InvalidPublic) + // Get User by Tag + ["GET users?q=foxbot%230282&limit=1"] = new Response(UserRoutes.Query), + // --- GUILDS + ["GET guilds/81384788765712384"] = new Response(GuildRoutes.DiscordApi) }; internal Stream GetMock(string method, string endpoint, string json, IReadOnlyDictionary requestHeaders) { var key = string.Format("{0} {1}", method.ToUpperInvariant(), endpoint.ToLowerInvariant()); if (!Routes.ContainsKey(key)) - throw new NotImplementedException($"{key}: {json}"); + throw new HttpException(HttpStatusCode.NotFound, $"{key}: {json}"); + Contracts.EnsureAuthorization(requestHeaders); var model = Routes[key].Invoke(json, requestHeaders); var textResponse = JsonConvert.SerializeObject(model, SerializerSettings); return new MemoryStream(Encoding.UTF8.GetBytes(textResponse)); diff --git a/test/Discord.Net.Tests/Framework/Routes/Guilds.cs b/test/Discord.Net.Tests/Framework/Routes/Guilds.cs new file mode 100644 index 000000000..69ab8068f --- /dev/null +++ b/test/Discord.Net.Tests/Framework/Routes/Guilds.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using GuildMocks = Discord.Tests.Framework.Mocks.Rest.Guilds; + +namespace Discord.Tests.Framework.Routes +{ + public static class Guilds + { + public static object DiscordApi(string json, IReadOnlyDictionary requestHeaders) => + GuildMocks.DiscordApi; + } +} diff --git a/test/Discord.Net.Tests/Framework/Routes/Users.cs b/test/Discord.Net.Tests/Framework/Routes/Users.cs index c07d06498..271aa3a72 100644 --- a/test/Discord.Net.Tests/Framework/Routes/Users.cs +++ b/test/Discord.Net.Tests/Framework/Routes/Users.cs @@ -1,37 +1,22 @@ using UserMocks = Discord.Tests.Framework.Mocks.Rest.Users; -using Newtonsoft.Json; -using System.IO; using System.Collections.Generic; -using Discord.Net; -using System.Net; +using System.Collections.Immutable; namespace Discord.Tests.Framework.Routes { public static class Users { - - public static object Me(string json, IReadOnlyDictionary requestHeaders) { - Contracts.EnsureAuthorization(requestHeaders); - if (requestHeaders["authorization"] == Contracts.UserToken || requestHeaders["authorization"] == $"Bearer {Contracts.BearerToken}") return UserMocks.SelfUser; else return UserMocks.BotSelfUser; } - public static object Public(string json, IReadOnlyDictionary requestHeaders) - { - Contracts.EnsureAuthorization(requestHeaders); - - return UserMocks.PublicUser; - } - public static object InvalidPublic(string json, IReadOnlyDictionary requestHeaders) - { - Contracts.EnsureAuthorization(requestHeaders); - - throw new HttpException(HttpStatusCode.NotFound); - } + public static object Public(string json, IReadOnlyDictionary requestHeaders) => + UserMocks.PublicUser; + public static object Query(string json, IReadOnlyDictionary requestHeaders) => + ImmutableArray.Create(UserMocks.PublicUser); } } diff --git a/test/Discord.Net.Tests/Rest/GuildTests.cs b/test/Discord.Net.Tests/Rest/GuildTests.cs new file mode 100644 index 000000000..bfeef9bab --- /dev/null +++ b/test/Discord.Net.Tests/Rest/GuildTests.cs @@ -0,0 +1,42 @@ +using System.Threading.Tasks; +using Xunit; +using Discord.Rest; +using Contracts = Discord.Tests.Framework.Routes.Contracts; +using Mocks = Discord.Tests.Framework.Mocks.Rest.Guilds; +using RoleMocks = Discord.Tests.Framework.Mocks.Rest.Roles; + +namespace Discord.Tests.Rest +{ + public class GuildTests : IClassFixture + { + public GuildTests(RestFixture fixture) + { + _client = fixture.Client; + _client.LoginAsync(TokenType.Bot, Contracts.BotToken).GetAwaiter().GetResult(); + } + + private DiscordRestClient _client; + + [Fact] + public async Task GetGuild() + { + var guild = await _client.GetGuildAsync(81384788765712384); + Assert.Equal(Mocks.DiscordApi.Id, guild.Id); + Assert.Equal(Mocks.DiscordApi.Name, guild.Name); + Assert.Equal(Mocks.DiscordApi.OwnerId, guild.OwnerId); + Assert.Equal(Mocks.DiscordApi.MfaLevel, guild.MfaLevel); + Assert.Equal(Mocks.DiscordApi.VerificationLevel, guild.VerificationLevel); + Assert.Equal(Mocks.DiscordApi.Roles.Length, guild.Roles.Count); + Assert.Equal(Mocks.DiscordApi.AFKTimeout, guild.AFKTimeout); + Assert.Equal(Mocks.DiscordApi.DefaultMessageNotifications, guild.DefaultMessageNotifications); + Assert.Equal(Mocks.DiscordApi.EmbedChannelId.GetValueOrDefault(), guild.EmbedChannelId); + Assert.Equal(Mocks.DiscordApi.EmbedEnabled, guild.IsEmbeddable); + } + [Fact] + public async Task GetInvalidGuild() + { + var guild = await _client.GetGuildAsync(1); + Assert.Null(guild); + } + } +} diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs index aa02ee14b..118294df7 100644 --- a/test/Discord.Net.Tests/Rest/UserTests.cs +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -1,13 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Threading.Tasks; using Xunit; -using Discord; using Discord.Rest; using Contracts = Discord.Tests.Framework.Routes.Contracts; using Mocks = Discord.Tests.Framework.Mocks.Rest.Users; -using Discord.Net; namespace Discord.Tests.Rest { @@ -34,7 +29,7 @@ namespace Discord.Tests.Rest Assert.Equal(Mocks.BotSelfUser.Verified.GetValueOrDefault(), user.IsVerified); } [Fact] - public async Task GetUser() + public async Task GetUserById() { var user = await _client.GetUserAsync(66078337084162048); Assert.Equal(Mocks.PublicUser.Id, user.Id); @@ -42,10 +37,24 @@ namespace Discord.Tests.Rest Assert.Equal(Mocks.PublicUser.Discriminator.GetValueOrDefault(), user.Discriminator); } [Fact] - public async Task GetInvalidUser() + public async Task GetInvalidUserById() { var user = await _client.GetUserAsync(1); Assert.Null(user); } + [Fact] + public async Task GetUserByTag() + { + var user = await _client.GetUserAsync("foxbot", "0282"); + Assert.Equal(Mocks.PublicUser.Id, user.Id); + Assert.Equal(Mocks.PublicUser.Username.GetValueOrDefault(), user.Username); + Assert.Equal(Mocks.PublicUser.Discriminator.GetValueOrDefault(), user.Discriminator); + } + [Fact] + public async Task GetInvalidUserByTag() + { + var user = await _client.GetUserAsync("Voltana", "8252"); + Assert.Null(user); + } } }