| @@ -26,5 +26,13 @@ namespace Discord.Tests.Framework.Mocks.Rest | |||||
| Avatar = "5f0be46cea584d2225e6c15e8418fb52", | Avatar = "5f0be46cea584d2225e6c15e8418fb52", | ||||
| Bot = true | Bot = true | ||||
| }; | }; | ||||
| public static User PublicUser => new User() | |||||
| { | |||||
| Id = 66078337084162048, | |||||
| Username = "foxbot", | |||||
| Discriminator = "0282", | |||||
| Avatar = "cdd7ae679ef37ce03e097221c70aeed6" | |||||
| }; | |||||
| } | } | ||||
| } | } | ||||
| @@ -18,7 +18,9 @@ namespace Discord.Tests.Framework | |||||
| internal Dictionary<string, Response> Routes = new Dictionary<string, Response>() | internal Dictionary<string, Response> Routes = new Dictionary<string, Response>() | ||||
| { | { | ||||
| ["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<string, string> requestHeaders) | internal Stream GetMock(string method, string endpoint, string json, IReadOnlyDictionary<string, string> requestHeaders) | ||||
| @@ -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<string, string> 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); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -9,21 +9,29 @@ namespace Discord.Tests.Framework.Routes | |||||
| { | { | ||||
| public static class Users | 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<string, string> requestHeaders) | public static object Me(string json, IReadOnlyDictionary<string, string> 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; | return UserMocks.SelfUser; | ||||
| else | else | ||||
| return UserMocks.BotSelfUser; | return UserMocks.BotSelfUser; | ||||
| } | } | ||||
| public static object Public(string json, IReadOnlyDictionary<string, string> requestHeaders) | |||||
| { | |||||
| Contracts.EnsureAuthorization(requestHeaders); | |||||
| return UserMocks.PublicUser; | |||||
| } | |||||
| public static object InvalidPublic(string json, IReadOnlyDictionary<string, string> requestHeaders) | |||||
| { | |||||
| Contracts.EnsureAuthorization(requestHeaders); | |||||
| throw new HttpException(HttpStatusCode.NotFound); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -6,6 +6,7 @@ using Xunit; | |||||
| using Discord; | using Discord; | ||||
| using Discord.Rest; | using Discord.Rest; | ||||
| using Routes = Discord.Tests.Framework.Routes.Users; | using Routes = Discord.Tests.Framework.Routes.Users; | ||||
| using Contracts = Discord.Tests.Framework.Routes.Contracts; | |||||
| using Discord.Net; | using Discord.Net; | ||||
| namespace Discord.Tests.Rest | namespace Discord.Tests.Rest | ||||
| @@ -23,7 +24,7 @@ namespace Discord.Tests.Rest | |||||
| public async Task LoginAsUser() | public async Task LoginAsUser() | ||||
| { | { | ||||
| var client = fixture.Client; | var client = fixture.Client; | ||||
| await client.LoginAsync(TokenType.User, Routes.UserToken); | |||||
| await client.LoginAsync(TokenType.User, Contracts.UserToken); | |||||
| } | } | ||||
| [Fact] | [Fact] | ||||
| public async Task LoginAsUserWithInvalidToken() | public async Task LoginAsUserWithInvalidToken() | ||||
| @@ -35,7 +36,7 @@ namespace Discord.Tests.Rest | |||||
| public async Task LoginAsBot() | public async Task LoginAsBot() | ||||
| { | { | ||||
| var client = fixture.Client; | var client = fixture.Client; | ||||
| await client.LoginAsync(TokenType.Bot, Routes.BotToken); | |||||
| await client.LoginAsync(TokenType.Bot, Contracts.BotToken); | |||||
| } | } | ||||
| [Fact] | [Fact] | ||||
| public async Task LoginAsBotWithInvalidToken() | public async Task LoginAsBotWithInvalidToken() | ||||
| @@ -47,7 +48,7 @@ namespace Discord.Tests.Rest | |||||
| public async Task LoginAsBearer() | public async Task LoginAsBearer() | ||||
| { | { | ||||
| var client = fixture.Client; | var client = fixture.Client; | ||||
| await client.LoginAsync(TokenType.Bearer, Routes.BearerToken); | |||||
| await client.LoginAsync(TokenType.Bearer, Contracts.BearerToken); | |||||
| } | } | ||||
| [Fact] | [Fact] | ||||
| public async Task LoginAsBearerWithInvalidToken() | public async Task LoginAsBearerWithInvalidToken() | ||||
| @@ -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<RestFixture> | |||||
| { | |||||
| 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); | |||||
| } | |||||
| } | |||||
| } | |||||