From ea30195fa762d8e22e645dc7eb15715b8f5f1ecc Mon Sep 17 00:00:00 2001 From: Christopher F Date: Wed, 7 Sep 2016 21:18:09 -0400 Subject: [PATCH] Test /users/@me, /users/:id --- .../Framework/Mocks/Rest/Users.cs | 8 +++ .../Framework/RequestHandler.cs | 4 +- .../Framework/Routes/Contracts.cs | 24 +++++++++ .../Framework/Routes/Users.cs | 24 ++++++--- test/Discord.Net.Tests/Rest/LoginTests.cs | 7 +-- test/Discord.Net.Tests/Rest/UserTests.cs | 51 +++++++++++++++++++ 6 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 test/Discord.Net.Tests/Framework/Routes/Contracts.cs create mode 100644 test/Discord.Net.Tests/Rest/UserTests.cs diff --git a/test/Discord.Net.Tests/Framework/Mocks/Rest/Users.cs b/test/Discord.Net.Tests/Framework/Mocks/Rest/Users.cs index 9a1cb05d1..69bfb2630 100644 --- a/test/Discord.Net.Tests/Framework/Mocks/Rest/Users.cs +++ b/test/Discord.Net.Tests/Framework/Mocks/Rest/Users.cs @@ -26,5 +26,13 @@ namespace Discord.Tests.Framework.Mocks.Rest Avatar = "5f0be46cea584d2225e6c15e8418fb52", Bot = true }; + + public static User PublicUser => new User() + { + Id = 66078337084162048, + Username = "foxbot", + Discriminator = "0282", + Avatar = "cdd7ae679ef37ce03e097221c70aeed6" + }; } } diff --git a/test/Discord.Net.Tests/Framework/RequestHandler.cs b/test/Discord.Net.Tests/Framework/RequestHandler.cs index 2a2ed98a9..9044cfa1c 100644 --- a/test/Discord.Net.Tests/Framework/RequestHandler.cs +++ b/test/Discord.Net.Tests/Framework/RequestHandler.cs @@ -18,7 +18,9 @@ namespace Discord.Tests.Framework internal Dictionary Routes = new Dictionary() { - ["GET users/@me"] = new Response(UserRoutes.Me) + ["GET users/@me"] = new Response(UserRoutes.Me), + ["GET users/66078337084162048"] = new Response(UserRoutes.Public), + ["GET users/1"] = new Response(UserRoutes.InvalidPublic) }; internal Stream GetMock(string method, string endpoint, string json, IReadOnlyDictionary requestHeaders) diff --git a/test/Discord.Net.Tests/Framework/Routes/Contracts.cs b/test/Discord.Net.Tests/Framework/Routes/Contracts.cs new file mode 100644 index 000000000..ceac0df69 --- /dev/null +++ b/test/Discord.Net.Tests/Framework/Routes/Contracts.cs @@ -0,0 +1,24 @@ +using Discord.Net; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; + +namespace Discord.Tests.Framework.Routes +{ + public static class Contracts + { + public static readonly string UserToken = "token.user"; + public static readonly string BotToken = "token.bot"; + public static readonly string BearerToken = "token.bearer"; + + public static void EnsureAuthorization(IReadOnlyDictionary requestHeaders) + { + if (!requestHeaders.ContainsKey("authorization")) throw new HttpException(HttpStatusCode.Forbidden); + if (requestHeaders["authorization"] != UserToken + && requestHeaders["authorization"] != $"Bot {BotToken}" + && requestHeaders["authorization"] != $"Bearer {BearerToken}") throw new HttpException(HttpStatusCode.Forbidden); + } + } +} diff --git a/test/Discord.Net.Tests/Framework/Routes/Users.cs b/test/Discord.Net.Tests/Framework/Routes/Users.cs index 5fba67a86..c07d06498 100644 --- a/test/Discord.Net.Tests/Framework/Routes/Users.cs +++ b/test/Discord.Net.Tests/Framework/Routes/Users.cs @@ -9,21 +9,29 @@ namespace Discord.Tests.Framework.Routes { public static class Users { - public static readonly string UserToken = "token.user"; - public static readonly string BotToken = "token.bot"; - public static readonly string BearerToken = "token.bearer"; + public static object Me(string json, IReadOnlyDictionary requestHeaders) { - if (!requestHeaders.ContainsKey("authorization")) throw new HttpException(HttpStatusCode.Forbidden); - if (requestHeaders["authorization"] != UserToken - && requestHeaders["authorization"] != $"Bot {BotToken}" - && requestHeaders["authorization"] != $"Bearer {BearerToken}") throw new HttpException(HttpStatusCode.Forbidden); + Contracts.EnsureAuthorization(requestHeaders); - if (requestHeaders["authorization"] == UserToken || requestHeaders["authorization"] == $"Bearer {BearerToken}") + 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); + } } } diff --git a/test/Discord.Net.Tests/Rest/LoginTests.cs b/test/Discord.Net.Tests/Rest/LoginTests.cs index 32f086dd1..06c442a39 100644 --- a/test/Discord.Net.Tests/Rest/LoginTests.cs +++ b/test/Discord.Net.Tests/Rest/LoginTests.cs @@ -6,6 +6,7 @@ using Xunit; using Discord; using Discord.Rest; using Routes = Discord.Tests.Framework.Routes.Users; +using Contracts = Discord.Tests.Framework.Routes.Contracts; using Discord.Net; namespace Discord.Tests.Rest @@ -23,7 +24,7 @@ namespace Discord.Tests.Rest public async Task LoginAsUser() { var client = fixture.Client; - await client.LoginAsync(TokenType.User, Routes.UserToken); + await client.LoginAsync(TokenType.User, Contracts.UserToken); } [Fact] public async Task LoginAsUserWithInvalidToken() @@ -35,7 +36,7 @@ namespace Discord.Tests.Rest public async Task LoginAsBot() { var client = fixture.Client; - await client.LoginAsync(TokenType.Bot, Routes.BotToken); + await client.LoginAsync(TokenType.Bot, Contracts.BotToken); } [Fact] public async Task LoginAsBotWithInvalidToken() @@ -47,7 +48,7 @@ namespace Discord.Tests.Rest public async Task LoginAsBearer() { var client = fixture.Client; - await client.LoginAsync(TokenType.Bearer, Routes.BearerToken); + await client.LoginAsync(TokenType.Bearer, Contracts.BearerToken); } [Fact] public async Task LoginAsBearerWithInvalidToken() diff --git a/test/Discord.Net.Tests/Rest/UserTests.cs b/test/Discord.Net.Tests/Rest/UserTests.cs new file mode 100644 index 000000000..aa02ee14b --- /dev/null +++ b/test/Discord.Net.Tests/Rest/UserTests.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +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 +{ + public class UserTests : IClassFixture + { + public UserTests(RestFixture fixture) + { + _client = fixture.Client; + _client.LoginAsync(TokenType.Bot, Contracts.BotToken).GetAwaiter().GetResult(); + } + + private DiscordRestClient _client; + + [Fact] + public async Task GetCurrentUser() + { + var user = await _client.GetCurrentUserAsync(); + Assert.Equal(Mocks.BotSelfUser.Id, user.Id); + Assert.Equal(Mocks.BotSelfUser.Username.GetValueOrDefault(), user.Username); + Assert.Equal(Mocks.BotSelfUser.Discriminator.GetValueOrDefault(), user.Discriminator); + Assert.Equal(Mocks.BotSelfUser.Bot.GetValueOrDefault(), user.IsBot); + Assert.Equal(Mocks.BotSelfUser.Email.GetValueOrDefault(), user.Email); + Assert.Equal(Mocks.BotSelfUser.MfaEnabled.GetValueOrDefault(), user.IsMfaEnabled); + Assert.Equal(Mocks.BotSelfUser.Verified.GetValueOrDefault(), user.IsVerified); + } + [Fact] + public async Task GetUser() + { + var user = await _client.GetUserAsync(66078337084162048); + 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 GetInvalidUser() + { + var user = await _client.GetUserAsync(1); + Assert.Null(user); + } + } +}