| @@ -196,5 +196,5 @@ FakesAssemblies/ | |||
| *.opt | |||
| #Custom | |||
| Credentials.cs | |||
| project.lock.json | |||
| project.lock.json | |||
| /test/Discord.Net.Tests/config.json | |||
| @@ -22,11 +22,11 @@ namespace Discord.Helpers | |||
| static Http() | |||
| { | |||
| _client = new HttpClient(); | |||
| _client.DefaultRequestHeaders.Add("Accept", "*/*"); | |||
| _client.DefaultRequestHeaders.Add("Accept-language", "en-US;q=0.8"); | |||
| _client.DefaultRequestHeaders.Add("accept", "*/*"); | |||
| _client.DefaultRequestHeaders.Add("accept-language", "en-US;q=0.8"); | |||
| string version = typeof(Http).GetTypeInfo().Assembly.GetName().Version.ToString(2); | |||
| _client.DefaultRequestHeaders.Add("User-agent", $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)"); | |||
| _client.DefaultRequestHeaders.Add("user-agent", $"Discord.Net/{version} (https://github.com/RogueException/Discord.Net)"); | |||
| } | |||
| private static string _token; | |||
| @@ -36,7 +36,9 @@ namespace Discord.Helpers | |||
| set | |||
| { | |||
| _token = value; | |||
| _client.DefaultRequestHeaders.Add("Authorization", _token); | |||
| _client.DefaultRequestHeaders.Remove("authorization"); | |||
| if (_token != null) | |||
| _client.DefaultRequestHeaders.Add("authorization", _token); | |||
| } | |||
| } | |||
| @@ -132,19 +134,6 @@ namespace Discord.Helpers | |||
| } | |||
| } | |||
| private static Stream GetDecoder(string contentEncoding, MemoryStream encodedStream) | |||
| { | |||
| switch (contentEncoding) | |||
| { | |||
| case "gzip": | |||
| return new GZipStream(encodedStream, CompressionMode.Decompress, true); | |||
| case "deflate": | |||
| return new DeflateStream(encodedStream, CompressionMode.Decompress, true); | |||
| default: | |||
| throw new ArgumentOutOfRangeException("Unknown encoding: " + contentEncoding); | |||
| } | |||
| } | |||
| #if DEBUG | |||
| private static void CheckResponse<T>(string json, T obj) | |||
| { | |||
| @@ -26,8 +26,8 @@ namespace Discord | |||
| { | |||
| ServerId = serverId; | |||
| UserId = userId; | |||
| _client = client; | |||
| JoinedAt = joinedAt; | |||
| } | |||
| _client = client; | |||
| } | |||
| } | |||
| } | |||
| @@ -8,7 +8,7 @@ | |||
| <AppDesignerFolder>Properties</AppDesignerFolder> | |||
| <RootNamespace>Discord.Net.Tests</RootNamespace> | |||
| <AssemblyName>Discord.Net.Tests</AssemblyName> | |||
| <TargetFrameworkVersion>v4.6</TargetFrameworkVersion> | |||
| <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> | |||
| <FileAlignment>512</FileAlignment> | |||
| <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> | |||
| <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion> | |||
| @@ -36,6 +36,10 @@ | |||
| <WarningLevel>4</WarningLevel> | |||
| </PropertyGroup> | |||
| <ItemGroup> | |||
| <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> | |||
| <HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> | |||
| <Private>True</Private> | |||
| </Reference> | |||
| <Reference Include="System" /> | |||
| </ItemGroup> | |||
| <Choose> | |||
| @@ -52,7 +56,7 @@ | |||
| </Choose> | |||
| <ItemGroup> | |||
| <Compile Include="Tests.cs" /> | |||
| <Compile Include="Credentials.cs" /> | |||
| <Compile Include="Settings.cs" /> | |||
| <Compile Include="Properties\AssemblyInfo.cs" /> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| @@ -61,6 +65,9 @@ | |||
| <Name>Discord.Net</Name> | |||
| </ProjectReference> | |||
| </ItemGroup> | |||
| <ItemGroup> | |||
| <None Include="packages.config" /> | |||
| </ItemGroup> | |||
| <Choose> | |||
| <When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'"> | |||
| <ItemGroup> | |||
| @@ -0,0 +1,29 @@ | |||
| using Newtonsoft.Json; | |||
| using System.IO; | |||
| namespace Discord.Net.Tests | |||
| { | |||
| internal class Settings | |||
| { | |||
| private const string path = "../../config.json"; | |||
| public static Settings Load() | |||
| { | |||
| if (!File.Exists(path)) | |||
| throw new FileNotFoundException("config.json is missing, rename config.json.example and add data for two separate unused accounts for testing."); | |||
| return JsonConvert.DeserializeObject<Settings>(File.ReadAllText(path)); | |||
| } | |||
| public class Account | |||
| { | |||
| [JsonProperty("email")] | |||
| public string Email { get; set; } | |||
| [JsonProperty("password")] | |||
| public string Password { get; set; } | |||
| } | |||
| [JsonProperty("user1")] | |||
| public Account User1 { get; set; } | |||
| [JsonProperty("user2")] | |||
| public Account User2 { get; set; } | |||
| } | |||
| } | |||
| @@ -10,21 +10,24 @@ namespace Discord.Net.Tests | |||
| public class Tests | |||
| { | |||
| private const int EventTimeout = 5000; //Max time in milliseconds to wait for an event response from our test actions | |||
| private DiscordClient _bot1, _bot2; | |||
| private Server _testServer; | |||
| private Channel _testServerChannel; | |||
| private Random _random; | |||
| [TestInitialize] | |||
| public void Initialize() | |||
| private static Settings _settings; | |||
| private static DiscordClient _bot1, _bot2; | |||
| private static Server _testServer; | |||
| private static Channel _testServerChannel; | |||
| private static Random _random; | |||
| [ClassInitialize] | |||
| public static void Initialize(TestContext testContext) | |||
| { | |||
| _settings = Settings.Load(); | |||
| _random = new Random(); | |||
| _bot1 = new DiscordClient(); | |||
| _bot2 = new DiscordClient(); | |||
| _bot1.Connect(Settings.Test1_Username, Settings.Test1_Password).Wait(); | |||
| _bot2.Connect(Settings.Test2_Username, Settings.Test2_Password).Wait(); | |||
| _bot1.Connect(_settings.User1.Email, _settings.User1.Password).Wait(); | |||
| _bot2.Connect(_settings.User2.Email, _settings.User2.Password).Wait(); | |||
| //Cleanup existing servers | |||
| Task.WaitAll(_bot1.Servers.Select(x => _bot1.LeaveServer(x)).ToArray()); | |||
| @@ -58,10 +61,10 @@ namespace Discord.Net.Tests | |||
| private void TestCreateRoom(string type) | |||
| { | |||
| Channel channel = null; | |||
| string name = $"test_{_random.Next()}"; | |||
| string name = $"#test_{_random.Next()}"; | |||
| AssertEvent<DiscordClient.ChannelEventArgs>( | |||
| "ChannelCreated event never received", | |||
| () => channel = _bot1.CreateChannel(_testServer, name, type).Result, | |||
| () => channel = _bot1.CreateChannel(_testServer, name.Substring(1), type).Result, | |||
| x => _bot2.ChannelCreated += x, | |||
| x => _bot2.ChannelCreated -= x, | |||
| (s, e) => e.Channel.Name == name); | |||
| @@ -74,8 +77,8 @@ namespace Discord.Net.Tests | |||
| (s, e) => e.Channel.Name == name); | |||
| } | |||
| [TestCleanup] | |||
| public void Cleanup() | |||
| [ClassCleanup] | |||
| public static void Cleanup() | |||
| { | |||
| if (_bot1.IsConnected) | |||
| Task.WaitAll(_bot1.Servers.Select(x => _bot1.LeaveServer(x)).ToArray()); | |||
| @@ -86,22 +89,25 @@ namespace Discord.Net.Tests | |||
| _bot2.Disconnect().Wait(); | |||
| } | |||
| private void AssertEvent<TArgs>(string msg, Action action, Action<EventHandler<TArgs>> addEvent, Action<EventHandler<TArgs>> removeEvent, Func<object, TArgs, bool> test = null) | |||
| private static void AssertEvent<TArgs>(string msg, Action action, Action<EventHandler<TArgs>> addEvent, Action<EventHandler<TArgs>> removeEvent, Func<object, TArgs, bool> test = null) | |||
| { | |||
| ManualResetEvent trigger = new ManualResetEvent(false); | |||
| ManualResetEventSlim trigger = new ManualResetEventSlim(false); | |||
| bool result = false; | |||
| EventHandler<TArgs> handler = (s, e) => | |||
| { | |||
| if (test != null) | |||
| { | |||
| result |= test(s, e); | |||
| trigger.Set(); | |||
| } | |||
| else | |||
| result = true; | |||
| }; | |||
| addEvent(handler); | |||
| action(); | |||
| trigger.WaitOne(EventTimeout); | |||
| trigger.Wait(EventTimeout); | |||
| removeEvent(handler); | |||
| Assert.AreEqual(true, result, msg); | |||
| @@ -0,0 +1,10 @@ | |||
| { | |||
| "user1": { | |||
| "email": "user1@example.com", | |||
| "password": "password123" | |||
| }, | |||
| "user2": { | |||
| "email": "user2@example.com", | |||
| "password": "password456" | |||
| } | |||
| } | |||
| @@ -0,0 +1,4 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <packages> | |||
| <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net46" /> | |||
| </packages> | |||