Browse Source

Added JSON serializer, switched mocks to API models; Added Tests...

Guilds
------

+ Get Guild
+ Get Invalid Guild
+ Get Guilds
+ Get Guild/Bans
* Get Guild/User
+ Get Guild/Invalid User
+ Get Guild/Users
- Get Guild/Role
- Get Guild/Invalid Role
- Get Guild/Roles
- Get Guild/Invites

Users
-----

+ Get Invalid User
pull/62/head
Christopher F 9 years ago
parent
commit
b08f7b6641
13 changed files with 417 additions and 56 deletions
  1. +7
    -2
      test/Discord.Net.Tests/Discord.Net.Tests.csproj
  2. +15
    -4
      test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs
  3. +41
    -0
      test/Discord.Net.Tests/Rest/Framework/Serializer.cs
  4. +119
    -0
      test/Discord.Net.Tests/Rest/GuildTests.cs
  5. +1
    -0
      test/Discord.Net.Tests/Rest/LoginTests.cs
  6. +50
    -0
      test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs
  7. +64
    -0
      test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs
  8. +36
    -0
      test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs
  9. +23
    -0
      test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs
  10. +0
    -38
      test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs
  11. +15
    -3
      test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs
  12. +38
    -9
      test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs
  13. +8
    -0
      test/Discord.Net.Tests/Rest/UserTests.cs

+ 7
- 2
test/Discord.Net.Tests/Discord.Net.Tests.csproj View File

@@ -55,12 +55,17 @@
</Otherwise>
</Choose>
<ItemGroup>
<Compile Include="Rest\Framework\Serializer.cs" />
<Compile Include="Rest\GuildTests.cs" />
<Compile Include="Rest\LoginTests.cs" />
<Compile Include="Rest\Framework\EndpointHandler.cs" />
<Compile Include="Rest\Responses\Users\Me_Mocks.cs" />
<Compile Include="Rest\Responses\Guilds\GuildHandlers.cs" />
<Compile Include="Rest\Responses\Guilds\Guild_Mocks.cs" />
<Compile Include="Rest\Responses\Roles\Role_Mocks.cs" />
<Compile Include="Rest\Responses\Guilds\Member_Mocks.cs" />
<Compile Include="Rest\Responses\Users\User_Mocks.cs" />
<Compile Include="Rest\Responses\Users\UserHandlers.cs" />
<Compile Include="Rest\Framework\TestRestClient.cs" />
<Compile Include="Rest\Responses\Users\User_Mocks.cs" />
<Compile Include="Rest\UserTests.cs" />
<Compile Include="Tests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />


+ 15
- 4
test/Discord.Net.Tests/Rest/Framework/EndpointHandler.cs View File

@@ -19,14 +19,25 @@ namespace Discord.Tests.Rest
Handlers = new Dictionary<string, RestMessageHandler>();

// /users Endpoints
Handlers.Add("users/@me", Responses.Users.UserHandlers.Me_Handler);
Handlers.Add("users/96642168176807936", Responses.Users.UserHandlers.Id_User_Valid);
Handlers.Add("GET->users/@me", Responses.Users.UserHandlers.Me_Handler);
Handlers.Add("GET->users/96642168176807936", Responses.Users.UserHandlers.Id_User_Valid);
Handlers.Add("GET->users/1", Responses.Users.UserHandlers.Id_User_Invalid);
Handlers.Add("GET->users/@me/guilds", Responses.Users.UserHandlers.Me_Guilds);

// /guilds endpoints
Handlers.Add("GET->guilds/66078535390867456", Responses.Guilds.GuildHandlers.Id_Valid);
Handlers.Add("GET->guilds/66078535390867456/bans", Responses.Guilds.GuildHandlers.Bans_Valid);
Handlers.Add("GET->guilds/66078535390867456/members?limit=2147483647&offset=0", Responses.Guilds.GuildHandlers.Members_Valid);
Handlers.Add("GET->guilds/66078535390867456/members/1", Responses.Guilds.GuildHandlers.Member_Invalid);
Handlers.Add("GET->guilds/66078535390867456/members/66078337084162048", Responses.Guilds.GuildHandlers.Member_Valid);
Handlers.Add("GET->guilds/1", Responses.Guilds.GuildHandlers.Id_Invalid);
}

public string HandleMessage(string method, string endpoint, string json)
{
if (Handlers.ContainsKey(endpoint))
return Handlers[endpoint].Invoke(method, json);
var key = $"{method}->{endpoint}";
if (Handlers.ContainsKey(key))
return Handlers[key].Invoke(method, json);
throw new NotImplementedException($"{method} -> {endpoint} -> {json}");
}
}


+ 41
- 0
test/Discord.Net.Tests/Rest/Framework/Serializer.cs View File

@@ -0,0 +1,41 @@
using Discord.Net.Converters;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;

namespace Discord.Tests.Rest
{
public class Json
{
public static JsonSerializer Serializer;

public Json()
{
Serializer = new JsonSerializer();
var _serializer = new JsonSerializer();
_serializer.Converters.Add(new ChannelTypeConverter());
_serializer.Converters.Add(new ImageConverter());
_serializer.Converters.Add(new NullableUInt64Converter());
_serializer.Converters.Add(new PermissionTargetConverter());
_serializer.Converters.Add(new StringEntityConverter());
_serializer.Converters.Add(new UInt64Converter());
_serializer.Converters.Add(new UInt64EntityConverter());
_serializer.Converters.Add(new UserStatusConverter());
Serializer = _serializer;
}

public static string SerializeObject(object o)
{
var sb = new StringBuilder(256);
using (TextWriter text = new StringWriter(sb, CultureInfo.InvariantCulture))
using (JsonWriter writer = new JsonTextWriter(text))
Serializer.Serialize(writer, o);
return sb.ToString();
}
}
}

+ 119
- 0
test/Discord.Net.Tests/Rest/GuildTests.cs View File

@@ -0,0 +1,119 @@
using Discord.Rest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Discord.Tests.Rest
{
[TestClass]
public class GuildTests
{
public static TestContext Context;
private static IDiscordClient _client;

[ClassInitialize]
public static void Initialize(TestContext context)
{
Context = context;
_client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) });
if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler();
if (Json.Serializer == null) new Json();
Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User;
_client.Login(TokenType.User, "UserToken_Voltana").Wait();
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Get_Guild()
{
var guild = await _client.GetGuild(66078535390867456);
Assert.AreEqual(66078535390867456UL, guild.Id, "Expected ID '66078535390867456'");
Assert.AreEqual("Discord API", guild.Name, "Expected Name 'Discord API'");
// Cannot Verify Guild URL, ID not publicly exposed.
Assert.IsNull(guild.SplashUrl, "Expected SplashUrl 'null'");
Assert.AreEqual(66078337084162048UL, guild.OwnerId, "Expected OwnerId '66078337084162048'");
Assert.AreEqual(3600, guild.AFKTimeout, "Expected AFKTimeout '3600'");
Assert.AreEqual(true, guild.IsEmbeddable, "Expected Embeddable 'true'");
Assert.IsNull(guild.EmbedChannelId, "Expected EmbedChannelId 'null'");
Assert.AreEqual(0, guild.VerificationLevel, "Expected VerificationLevel '0'");
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Get_Guild_Invalid_Id()
{
var guild = await _client.GetGuild(1);
Assert.IsNull(guild);
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Get_Guilds()
{
var guilds = await _client.GetGuilds();
Assert.AreEqual(2, guilds.Count(), "Expected 2 Guilds");
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Bans()
{
var guild = await _client.GetGuild(66078535390867456);
var bans = await guild.GetBans();
Assert.AreEqual(2, bans.Count());
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_User()
{
var guild = await _client.GetGuild(66078535390867456);
var user = await guild.GetUser(66078337084162048);
// TODO: Asserts
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Invalid_User()
{
var guild = await _client.GetGuild(66078535390867456);
var user = await guild.GetUser(1);
Assert.IsNull(user, "Expected returned user to be null");
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Users()
{
var guild = await _client.GetGuild(66078535390867456);
var users = await guild.GetUsers();
Assert.AreEqual(2, users.Count());
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Role()
{
var guild = await _client.GetGuild(66078535390867456);
var role = await guild.GetRole(1);
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Invalid_Role()
{
var guild = await _client.GetGuild(66078535390867456);
var role = await guild.GetRole(1);
Assert.IsNull(role, "Expected returned role to be null.");
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Roles()
{
var guild = await _client.GetGuild(66078535390867456);
var roles = await guild.GetRoles();
}
[TestMethod]
[TestCategory("Guilds")]
public async Task Test_Guild_Get_Invites()
{
var guild = await _client.GetGuild(66078535390867456);
var invites = await guild.GetInvites();
}
}
}

+ 1
- 0
test/Discord.Net.Tests/Rest/LoginTests.cs View File

@@ -20,6 +20,7 @@ namespace Discord.Tests.Rest
Context = context;
_client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) });
if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler();
if (Json.Serializer == null) new Json();
}

[TestMethod]


+ 50
- 0
test/Discord.Net.Tests/Rest/Responses/Guilds/GuildHandlers.cs View File

@@ -0,0 +1,50 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace Discord.Tests.Rest.Responses.Guilds
{
public static class GuildHandlers
{
public static string Id_Valid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/guilds/:id' is GET.");
return Json.SerializeObject(Guild_Mocks.Guild_From_Id);
}

public static string Id_Invalid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/guilds/:id' is GET.");
throw new Net.HttpException((HttpStatusCode)404);
}

public static string Bans_Valid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/bans' is GET.");
return Json.SerializeObject(Guild_Mocks.GuildBansList);
}

public static string Members_Valid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/members' is GET.");
return Json.SerializeObject(Member_Mocks.Guild_Members);
}

public static string Member_Valid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/members/:member_id' is GET.");
return Json.SerializeObject(Member_Mocks.Guild_Member_1);
}

public static string Member_Invalid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/guilds/:id/members/:member_id' is GET.");
throw new Net.HttpException((HttpStatusCode)404);
}
}
}

+ 64
- 0
test/Discord.Net.Tests/Rest/Responses/Guilds/Guild_Mocks.cs View File

@@ -0,0 +1,64 @@
using Discord.API;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Discord.Tests.Rest.Responses.Guilds
{
public static class Guild_Mocks
{
public static Guild Guild_From_Id { get
{
return new Guild
{
Id = 66078535390867456,
Name = "Discord API",
Icon = "c8829ee5a88cbe065519befa9093f63a",
Splash = null,
OwnerId = 66078337084162048,
Region = "us-east",
AFKChannelId = 66081976485941248,
AFKTimeout = 3600,
EmbedEnabled = true,
EmbedChannelId = null,
VerificationLevel = 0,
Roles = new Role[] {Roles.Constant_Role_Mocks.Mock_Everyone_Role},
};
} }

public static IEnumerable<User> GuildBansList => new List<User> { Users.User_Mocks.Bot_User, Users.User_Mocks.Me_User };

public static IEnumerable<UserGuild> UserGuildsList() => new List<UserGuild>{ User_Guild_1, User_Guild_2 };

public static UserGuild User_Guild_1 { get
{
return new UserGuild
{
Id = 41771983423143937,
Name = "Discord Developers",
Icon = "ae140f33228348df347067059474bb11",
Owner = false,
Permissions = 103926785
};
} }

public static UserGuild User_Guild_2
{
get
{
return new UserGuild
{
Id = 81384788765712384,
Name = "Discord API",
Icon = "2aab26934e72b4ec300c5aa6cf67c7b3",
Owner = false,
Permissions = 103926785
};
}
}

}
}

+ 36
- 0
test/Discord.Net.Tests/Rest/Responses/Guilds/Member_Mocks.cs View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Discord.API;

namespace Discord.Tests.Rest.Responses.Guilds
{
public static class Member_Mocks
{
public static IEnumerable<GuildMember> Guild_Members => new List<GuildMember> { Guild_Member_1, Guild_Member_2 };

public static GuildMember Guild_Member_1 { get {
return new GuildMember()
{
User = Users.User_Mocks.Me_User,
Nick = "Voltamom",
JoinedAt = new DateTime(2009, 4, 19),
Deaf = true,
Mute = false,
Roles = new ulong[] { 1UL }
};
} }

public static GuildMember Guild_Member_2 { get
{
return new GuildMember()
{
User = Users.User_Mocks.Bot_User,
Nick = "foxbot",
JoinedAt = new DateTime(2016, 5, 5),
};
} }
}
}

+ 23
- 0
test/Discord.Net.Tests/Rest/Responses/Roles/Role_Mocks.cs View File

@@ -0,0 +1,23 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Discord.API;

namespace Discord.Tests.Rest.Responses.Roles
{
public static class Constant_Role_Mocks
{
public static Role Mock_Everyone_Role { get { return new Role {
Id = 66078535390867456,
Color = 0,
Position = 0,
Hoist = false,
Managed = false,
Name = "@everyone",
Permissions = 36953089
}; } }
}
}

+ 0
- 38
test/Discord.Net.Tests/Rest/Responses/Users/Me_Mocks.cs View File

@@ -1,38 +0,0 @@
using Newtonsoft.Json;

namespace Discord.Tests.Rest.Responses.Users
{
public class Mock_Me_User_Valid
{
[JsonProperty("id")]
public string Id => "66078337084162048";
[JsonProperty("username")]
public string Username => "Voltana";
[JsonProperty("discriminator")]
public ushort Discriminator => 0001;
[JsonProperty("avatar")]
public string Avatar => "ec2b259bfe24686bf9d214b6bebe0834";
[JsonProperty("verified")]
public bool IsVerified => true;
[JsonProperty("email")]
public string Email => "hello-i-am-not-real@foxbot.me";
}

public class Mock_Me_Token_Valid
{
[JsonProperty("id")]
public string Id => "66078337084162048";
[JsonProperty("username")]
public string Username => "foxboat";
[JsonProperty("discriminator")]
public ushort Discriminator => 0005;
[JsonProperty("avatar")]
public string Avatar => "ec2b259bfe24686bf9d214b6bebe0834";
[JsonProperty("verified")]
public bool IsVerified => true;
[JsonProperty("email")]
public string Email => "hello-i-am-not-real@foxbot.me";
[JsonProperty("bot")]
public bool Bot => true;
}
}

+ 15
- 3
test/Discord.Net.Tests/Rest/Responses/Users/UserHandlers.cs View File

@@ -27,20 +27,32 @@ namespace Discord.Tests.Rest.Responses.Users
{
Assert.AreEqual("GET", method, "Expected method to '/users/@me' is GET.");
if (TestRestClient.Headers["authorization"] != "UserToken_Voltana") throw new HttpException((HttpStatusCode)401);
return JsonConvert.SerializeObject(new Mock_Me_User_Valid());
return Json.SerializeObject(User_Mocks.Me_User);
}

public static string Me_Bot_Valid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/users/@me' is GET.");
if (TestRestClient.Headers["authorization"] != "Bot UserToken_VoltanaBot") throw new HttpException((HttpStatusCode)401);
return JsonConvert.SerializeObject(new Mock_Me_User_Valid());
return Json.SerializeObject(User_Mocks.Bot_User);
}

public static string Id_User_Valid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/users/:id' is GET");
return JsonConvert.SerializeObject(new Mock_ID_PublicUser());
return Json.SerializeObject(User_Mocks.Public_User);
}

public static string Id_User_Invalid(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/users/:id' is GET");
throw new HttpException((HttpStatusCode)404);
}

public static string Me_Guilds(string method, string json)
{
Assert.AreEqual("GET", method, "Expected method to '/users/@me/guilds' is GET");
return Json.SerializeObject(Guilds.Guild_Mocks.UserGuildsList());
}
}



+ 38
- 9
test/Discord.Net.Tests/Rest/Responses/Users/User_Mocks.cs View File

@@ -1,16 +1,45 @@
using Newtonsoft.Json;
using Discord.API;

namespace Discord.Tests.Rest.Responses.Users
{
class Mock_ID_PublicUser
public static class User_Mocks
{
[JsonProperty("id")]
public string Id => "96642168176807936";
[JsonProperty("username")]
public string Username => "Khionu";
[JsonProperty("discriminator")]
public ushort Discriminator => 9999;
[JsonProperty("avatar")]
public string Avatar => "ceeff590f1e0e1ccae0afc89967131ff";
public static User Me_User { get {
return new User
{
Id = 66078337084162048,
Username = "Voltana",
Discriminator = 0001,
Avatar = "ec2b259bfe24686bf9d214b6bebe0834",
IsVerified = true,
Email = "hello-i-am-not-real@foxbot.me"
};
} }

public static User Bot_User { get
{
return new User
{
Id = 66078337084162048,
Username = "foxboat",
Discriminator = 0005,
Avatar = "ec2b259bfe24686bf9d214b6bebe0834",
IsVerified = true,
Email = "hello-i-am-not-real@foxbot.me",
Bot = true
};
} }

public static User Public_User { get
{
return new User
{
Id = 96642168176807936,
Username = "Khionu",
Discriminator = 9999,
Avatar = "ceeff590f1e0e1ccae0afc89967131ff"
};
} }
}
}

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

@@ -20,6 +20,7 @@ namespace Discord.Tests.Rest
Context = context;
_client = new DiscordClient(new DiscordConfig() { RestClientProvider = (url, ct) => new TestRestClient(url, ct) });
if (EndpointHandler.Instance == null) EndpointHandler.Instance = new EndpointHandler();
if (Json.Serializer == null) new Json();
Responses.Users.UserHandlers.Mode = Rest.Responses.Users.TestMode.User;
_client.Login(TokenType.User, "UserToken_Voltana").Wait();
}
@@ -54,5 +55,12 @@ namespace Discord.Tests.Rest
Assert.AreEqual("<@!96642168176807936>", user.NicknameMention, "Expected Mention '<@!96642168176807936>'");
Assert.AreEqual(new DateTime(635787084884180000), user.CreatedAt, "Expected Created At '635787084884180000'");
}
[TestMethod]
[TestCategory("Users")]
public async Task Test_Get_Invalid_User()
{
var user = await _client.GetUser(1);
Assert.IsNull(user, "Expected Invalid User to be 'null'");
}
}
}

Loading…
Cancel
Save