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));
        }
Example #6
0
        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();
        }
Example #8
0
        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);
        }
Example #10
0
        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));
        }