public async Task GetRequest_FailedRequest_ReturnsStatusCodeAndResponseContent() { var httpClient = Substitute.For <IHttpClient>(); httpClient.GetResponse(Arg.Is <HttpRequestOptions>(o => o.AcceptHeader == "application/json" && o.Url == "https://api.thetvdb.com/series/122/episodes?page=1" && o.RequestContent == null && o.RequestContentType == null)) .ReturnsForAnyArgs(Task.FromResult(new HttpResponseInfo { Content = Streams.ToStream("{\"Error\": \"Not Authorized\"}"), StatusCode = HttpStatusCode.Unauthorized })); var jsonSerialiser = Substitute.For <ICustomJsonSerialiser>(); var request = new GetEpisodesRequest(122, 1); var connection = new JsonConnection(httpClient, jsonSerialiser, Substitute.For <ILogManager>()); var response = await connection.GetAsync(request, Option <string> .None); response.IsLeft.Should().BeTrue(); response.IfLeft(fr => { ((object)fr.StatusCode).Should().Be(HttpStatusCode.Unauthorized); fr.ResponseContent.Should().Be("{\"Error\": \"Not Authorized\"}"); }); }
public async Task PostRequest_FailedRequest_ReturnsStatusCodeAndResponseContent() { var httpClient = Substitute.For <IHttpClient>(); httpClient.Post(null) .ReturnsForAnyArgs(Task.FromResult(new HttpResponseInfo { Content = Streams.ToStream("{\"Error\": \"Not Authorized\"}"), StatusCode = HttpStatusCode.Unauthorized })); var jsonSerialiser = Substitute.For <ICustomJsonSerialiser>(); var request = new LoginRequest("ApiKey"); jsonSerialiser.Serialise(request.Data).Returns("{\"apikey\": \"E32490FAD276FF5E\"}"); var connection = new JsonConnection(httpClient, jsonSerialiser, Substitute.For <ILogManager>()); var response = await connection.PostAsync(request, Option <string> .None); response.IsLeft.Should().BeTrue(); response.IfLeft(fr => { ((object)fr.StatusCode).Should().Be(HttpStatusCode.Unauthorized); fr.ResponseContent.Should().Be("{\"Error\": \"Not Authorized\"}"); }); }
public async Task PostRequest_SuccessfulRequest_ReturnsResponse() { var httpClient = Substitute.For <IHttpClient>(); httpClient.Post(Arg.Is <HttpRequestOptions>(o => o.AcceptHeader == "application/json" && o.Url == "https://api.thetvdb.com/login" && o.RequestContent == "{\"apikey\": \"E32490FAD276FF5E\"}" && o.RequestContentType == "application/json")) .Returns(Task.FromResult(new HttpResponseInfo { Content = Streams.ToStream( "{\"token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MDM4MjQwNTUsImlkIjoiTWVkaWFCcm93c2VyLlBsdWdpbnMuQW5pRGJGb3JUdkRiIiwib3JpZ19pYXQiOjE1MDM3Mzc2NTV9.jEVPlHoFFURb3lZU9Svis42YXwDN5GEI-LdZhhjFaRm26XV6DPahm68HTYmL9koMqlIwfGR5a-m4pULFok7B0OCiZPAQOOHlaNxqYEBleSG-saz_Bj3A3mq9ht8pj-xc7pMFb4mR2X6-zL6xoLO1A0h_r4oMAQCkCk8NApDdIdqyCi9nV0EeICfEU1AM84wVV0i-jxRDXaq3TLQynPeLhdefXx8sV0dye7cZo9bebfk18soE8lnc0QkBApv3RcqfoFKxyxAOTKOhHfMGZlB7NSG_duTWciiyFZXlIND6GP7zKScaes3fNu8tbpLAOiNQAyK-o-jq-5cI0y69zR2dBA\"}"), StatusCode = HttpStatusCode.OK })); var jsonSerialiser = Substitute.For <ICustomJsonSerialiser>(); var request = new LoginRequest("ApiKey"); jsonSerialiser.Serialise(request.Data).Returns("{\"apikey\": \"E32490FAD276FF5E\"}"); jsonSerialiser.Deserialise <LoginRequest.Response>(null) .ReturnsForAnyArgs(new LoginRequest.Response("Token")); var connection = new JsonConnection(httpClient, jsonSerialiser, Substitute.For <ILogManager>()); var response = await connection.PostAsync(request, Option <string> .None); response.IsRight.Should().BeTrue(); response.IfRight(r => r.Data.Token.Should().Be("Token")); }
public async Task ShouldSerializeAndSend_InCamelCase( [Frozen] Mock <IMessageTypeCache> cache, [Frozen] Mock <IConnection> connection, string typeId, MyMessage message, JsonConnection sut) { cache.Setup(x => x.GetTypeId(typeof(MyMessage))) .Returns(typeId); JsonSerializedMessage sent = null !; connection.Setup(x => x.SendAsync(It.IsAny <object>(), Cts.Token)) .Callback <object, CancellationToken>((message, ct) => sent = (JsonSerializedMessage)message); await sut.SendAsync(message, Cts.Token); Assert.Equal(typeId, sent.TypeId); Assert.Equal( JsonSerializer.Serialize( message, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }), sent.Json); }
private void InitJobList() { var connection = new JsonConnection(config.QuartzConfigPath); QuartzJsonContext.Instance.Connection = connection; QuartzJsonContext.Instance.Init(); Jobs = new ObservableCollection <ICustomJob>(); QuartzJsonContext.Instance.data.Jobs.ForEach(x => Jobs.Add(x)); }
public async Task GetToken_FailedRequest_ReturnsNone() { var tvDbConnection = new JsonConnection(new TestHttpClient(), new JsonSerialiser(), _logManager); var token = new TvDbToken(tvDbConnection, "NotValid", _logManager); var returnedToken = await token.GetTokenAsync(); returnedToken.IsSome.Should().BeFalse(); }
public void Setup() { this.resultContext = TestProcessResultContext.Instance; this.jsonConnection = new JsonConnection(new TestHttpClient(), new JsonSerialiser(), new ConsoleLogManager()); this.aniListConfiguration = Substitute.For <IAnilistConfiguration>(); this.token = new AniListToken(); }
public async Task GetToken_NoExistingToken_GetsNewToken() { var tvDbConnection = new JsonConnection(new TestHttpClient(), new JsonSerialiser(), _logManager); var token = new TvDbToken(tvDbConnection, Secrets.TvDbApiKey, _logManager); var returnedToken = await token.GetTokenAsync(); returnedToken.IsSome.Should().BeTrue(); returnedToken.ValueUnsafe().Should().NotBeNullOrWhiteSpace(); }
public void WithJson_ShouldUseJsonConnectionFactoryToCreateJsonConnection( IJsonConnectionFactory factory, JsonConnection jsonConnection, IConnection sut) { Mock.Get(factory).Setup(x => x.CreateJsonConnection(sut)) .Returns(jsonConnection); var result = sut.WithJson(factory); Assert.Equal(jsonConnection, result); }
public async Task GetToken_ExistingToken_DoesNotRequestNewToken() { var tvDbConnection = new JsonConnection(new TestHttpClient(), new JsonSerialiser(), _logManager); var token = new TvDbToken(tvDbConnection, Secrets.TvDbApiKey, _logManager); var token1 = await token.GetTokenAsync(); var token2 = await token.GetTokenAsync(); token2.IsSome.Should().BeTrue(); token2.ValueUnsafe().Should().Be(token1.ValueUnsafe()); }
public async Task ShouldThrow_WhenDeserializationReturnsNull( [Frozen] Mock <IMessageTypeCache> cache, [Frozen] Mock <IConnection> connection, JsonSerializedMessage jsonMessage, JsonConnection sut) { jsonMessage.Json = "null"; connection.Setup(x => x.ReceiveAsync(Cts.Token)) .ReturnsAsync(jsonMessage); cache.Setup(x => x.GetTypeById(jsonMessage.TypeId)) .Returns(typeof(MyMessage)); await Assert.ThrowsAsync <InvalidOperationException>( async() => await sut.ReceiveAsync(Cts.Token)); }
public async Task ShouldDeserializeEnum_FromNumber( [Frozen] Mock <IMessageTypeCache> cache, [Frozen] Mock <IConnection> connection, JsonSerializedMessage jsonMessage, JsonConnection sut) { jsonMessage.Json = "{\"testEnum\":2}"; connection.Setup(x => x.ReceiveAsync(Cts.Token)) .ReturnsAsync(jsonMessage); cache.Setup(x => x.GetTypeById(jsonMessage.TypeId)) .Returns(typeof(TestEnumMessage)); var result = (TestEnumMessage)await sut.ReceiveAsync(Cts.Token); Assert.Equal(TestEnum.Two, result.TestEnum); }
public async Task Connect(Uri uri) { ConnectionUri = uri; switch (ConnectionUri.Scheme) { case "json": var client = new TcpClient(); await client.ConnectAsync(ConnectionUri.Host, ConnectionUri.Port); Connection = new JsonConnection(client); break; } Connection.Initialize(); Connection.ConnectionClosed += HandleConnectionClosed; }
public async Task ShouldSerializeEnum_ToString( [Frozen] Mock <IMessageTypeCache> cache, [Frozen] Mock <IConnection> connection, string typeId, JsonConnection sut) { cache.Setup(x => x.GetTypeId(typeof(TestEnumMessage))) .Returns(typeId); JsonSerializedMessage sent = null !; connection.Setup(x => x.SendAsync(It.IsAny <object>(), Cts.Token)) .Callback <object, CancellationToken>((message, ct) => sent = (JsonSerializedMessage)message); await sut.SendAsync(new TestEnumMessage { TestEnum = TestEnum.Two }, Cts.Token); Assert.Equal(typeId, sent.TypeId); Assert.Equal("{\"testEnum\":\"Two\"}", sent.Json); }
public async Task ShouldReceiveAndDeserialize_InCamelCase( [Frozen] Mock <IMessageTypeCache> cache, [Frozen] Mock <IConnection> connection, MyMessage message, JsonSerializedMessage jsonMessage, JsonConnection sut) { jsonMessage.Json = JsonSerializer.Serialize(message, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); connection.Setup(x => x.ReceiveAsync(Cts.Token)) .ReturnsAsync(jsonMessage); cache.Setup(x => x.GetTypeById(jsonMessage.TypeId)) .Returns(typeof(MyMessage)); var result = (MyMessage)await sut.ReceiveAsync(Cts.Token); Assert.Equal(message.Age, result.Age); Assert.Equal(message.LastName, result.LastName); Assert.Equal(message.List, result.List); }
public async Task GetRequest_SuccessfulRequest_ReturnsResponse() { var httpClient = Substitute.For <IHttpClient>(); httpClient.GetResponse(Arg.Is <HttpRequestOptions>(o => o.AcceptHeader == "application/json" && o.Url == "https://api.thetvdb.com/series/122/episodes?page=1" && o.RequestContent == null && o.RequestContentType == null)) .Returns(Task.FromResult(new HttpResponseInfo { Content = Streams.ToStream( @"{ ""data"": [ { ""absoluteNumber"": 1, ""airedEpisodeNumber"": 2, ""airedSeason"": 3, ""dvdEpisodeNumber"": 4, ""dvdSeason"": 5, ""episodeName"": ""EpisodeName1"", ""firstAired"": ""01/01/2017"", ""id"": 6, ""lastUpdated"": 7, ""overview"": ""EpisodeOverview1"" }, { ""absoluteNumber"": 8, ""airedEpisodeNumber"": 9, ""airedSeason"": 10, ""dvdEpisodeNumber"": 11, ""dvdSeason"": 12, ""episodeName"": ""EpisodeName2"", ""firstAired"": ""01/01/2015"", ""id"": 13, ""lastUpdated"": 14, ""overview"": ""EpisodeOverview2"" } ], ""errors"": { ""invalidFilters"": [ ""string"" ], ""invalidLanguage"": ""string"", ""invalidQueryParams"": [ ""string"" ] }, ""links"": { ""first"": 1, ""last"": 2, ""next"": 3, ""previous"": 4 } }"), StatusCode = HttpStatusCode.OK })); var jsonSerialiser = Substitute.For <ICustomJsonSerialiser>(); var request = new GetEpisodesRequest(122, 1); jsonSerialiser.Deserialise <GetEpisodesRequest.Response>(null) .ReturnsForAnyArgs(new GetEpisodesRequest.Response(new[] { new TvDbEpisodeSummaryData(6, "EpisodeName1", 1L, 2, 3, 7, new DateTime(2017, 1, 2, 3, 4, 5), "Overview"), new TvDbEpisodeSummaryData(13, "EpisodeName2", 8L, 9, 10, 17, new DateTime(2017, 1, 2, 3, 4, 5), "Overview") }, new GetEpisodesRequest.PageLinks(1, 2, 3, 4))); var connection = new JsonConnection(httpClient, jsonSerialiser, Substitute.For <ILogManager>()); var response = await connection.GetAsync(request, Option <string> .None); response.IsRight.Should().BeTrue(); response.IfRight(r => r.Data.Data.Should().HaveCount(2)); }