Browse Source

Test /users/@me, /users/:id

pull/279/head
Christopher F 8 years ago
parent
commit
ea30195fa7
6 changed files with 106 additions and 12 deletions
  1. +8
    -0
      test/Discord.Net.Tests/Framework/Mocks/Rest/Users.cs
  2. +3
    -1
      test/Discord.Net.Tests/Framework/RequestHandler.cs
  3. +24
    -0
      test/Discord.Net.Tests/Framework/Routes/Contracts.cs
  4. +16
    -8
      test/Discord.Net.Tests/Framework/Routes/Users.cs
  5. +4
    -3
      test/Discord.Net.Tests/Rest/LoginTests.cs
  6. +51
    -0
      test/Discord.Net.Tests/Rest/UserTests.cs

+ 8
- 0
test/Discord.Net.Tests/Framework/Mocks/Rest/Users.cs View File

@@ -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"
};
} }
} }

+ 3
- 1
test/Discord.Net.Tests/Framework/RequestHandler.cs View File

@@ -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)


+ 24
- 0
test/Discord.Net.Tests/Framework/Routes/Contracts.cs View File

@@ -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);
}
}
}

+ 16
- 8
test/Discord.Net.Tests/Framework/Routes/Users.cs View File

@@ -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);
}
} }
} }

+ 4
- 3
test/Discord.Net.Tests/Rest/LoginTests.cs View File

@@ -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()


+ 51
- 0
test/Discord.Net.Tests/Rest/UserTests.cs View File

@@ -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);
}
}
}

Loading…
Cancel
Save