using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; using System; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; using Tgstation.Server.Api; using Tgstation.Server.Api.Models.Response; using Tgstation.Server.Common.Http; namespace Tgstation.Server.Client.Tests { [TestClass] public sealed class TestApiClient { [TestMethod] public async Task TestDeserializingByondModelsWork() { var sample = new ByondResponse { Version = new Version(511, 1385, 0) }; var sampleJson = JsonConvert.SerializeObject(sample, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver(), Converters = new[] { new VersionConverter() } }); var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(sampleJson) }; var httpClient = new Mock(); httpClient.Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny(), It.IsAny())).Returns(Task.FromResult(response)); var client = new ApiClient( httpClient.Object, new Uri("http://fake.com"), new ApiHeaders( new ProductHeaderValue("fake"), new TokenResponse { Bearer = "fake", }), null, false); var result = await client.Read(Routes.Byond, default); Assert.AreEqual(sample.Version, result.Version); Assert.AreEqual(0, result.Version.Build); } [TestMethod] public async Task TestUnrecognizedResponse() { var sample = new ByondResponse { Version = new Version(511, 1385) }; var fakeJson = "asdfasd <>F#(*)U*#JLI"; var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(fakeJson) }; var httpClient = new Mock(); httpClient.Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny(), It.IsAny())).Returns(Task.FromResult(response)); var client = new ApiClient( httpClient.Object, new Uri("http://fake.com"), new ApiHeaders( new ProductHeaderValue("fake"), new TokenResponse { Bearer = "fake" }), null, false); await Assert.ThrowsExceptionAsync(() => client.Read(Routes.Byond, default).AsTask()); } } }