@@ -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" | |||
}; | |||
} | |||
} |
@@ -18,7 +18,9 @@ namespace Discord.Tests.Framework | |||
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) | |||
@@ -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 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) | |||
{ | |||
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<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.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() | |||
@@ -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); | |||
} | |||
} | |||
} |