Esempio n. 1
0
        public async Task SendReturnsCachedReponseOnNotModified()
        {
            var httpClient = Substitute.For <IHttpClient>();
            var cache      = Substitute.For <ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request {
                Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative)
            };

            var cachedResponse = Substitute.For <IResponse>();

            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary <string, Uri>(), new List <string>(), new List <string>(), "ABC123", null));

            cache.GetAsync <IResponse>("test").Returns(Task.FromResult(cachedResponse));

            var conditionalResponse = Substitute.For <IResponse>();

            conditionalResponse.StatusCode.Returns(HttpStatusCode.NotModified);

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(conditionalResponse));

            var actualResponse = await cachingClient.Send(request, CancellationToken.None);

            Assert.AreEqual(cachedResponse, actualResponse);
        }
Esempio n. 2
0
        public async Task SendSendsAndSetsReponseWithNoEtag()
        {
            var httpClient = Substitute.For <IHttpClient>();
            var cache      = Substitute.For <ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request {
                Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative)
            };

            var cachedResponse = Substitute.For <IResponse>();

            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary <string, Uri>(), new List <string>(), new List <string>(), String.Empty, null));

            cache.GetAsync <IResponse>("test").Returns(Task.FromResult(cachedResponse));

            var response = Substitute.For <IResponse>();

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(response));

            var actualReponse = await cachingClient.Send(request, CancellationToken.None);

            cache.Received().SetAsync("test", response).IgnoreAwait();

            Assert.AreEqual(response, actualReponse);
        }
Esempio n. 3
0
        public async Task SendCachesConditionalResponseOnOk()
        {
            var httpClient = Substitute.For <IHttpClient>();
            var cache      = Substitute.For <ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request {
                Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative)
            };

            var cachedResponse = Substitute.For <IResponse>();

            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary <string, Uri>(), new List <string>(), new List <string>(), "ABC123", null));

            cache.GetAsync <IResponse>("test").Returns(Task.FromResult(cachedResponse));

            var conditionalResponse = Substitute.For <IResponse>();

            conditionalResponse.StatusCode.Returns(HttpStatusCode.OK);

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(conditionalResponse));

            await cachingClient.Send(request, CancellationToken.None);

            cache.Received().SetAsync("test", conditionalResponse).IgnoreAwait();
        }
        public async Task SendSendsNonGetRequests()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var cache = Substitute.For<ICache>();
            
            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request { Method = HttpMethod.Post, Endpoint = new Uri("test", UriKind.Relative) };

            await cachingClient.Send(request, CancellationToken.None);

            httpClient.Received().Send(request, CancellationToken.None).IgnoreAwait();
            cache.DidNotReceive().GetAsync<IResponse>("test").IgnoreAwait();
        }
Esempio n. 5
0
        public async Task SendSendsNonGetRequests()
        {
            var httpClient = Substitute.For <IHttpClient>();
            var cache      = Substitute.For <ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request {
                Method = HttpMethod.Post, Endpoint = new Uri("test", UriKind.Relative)
            };

            await cachingClient.Send(request, CancellationToken.None);

            httpClient.Received().Send(request, CancellationToken.None).IgnoreAwait();
            cache.DidNotReceive().GetAsync <IResponse>("test").IgnoreAwait();
        }
Esempio n. 6
0
        static DiscogsApiClientEnvironment CreateDiscogsApiClientEnvironment(
            DiscogsApiClientCredentials credentials
            )
        {
            if (credentials == null)
            {
                throw new ArgumentNullException(nameof(credentials));
            }

            var httpClient = new CachingHttpClient {
                BaseAddress = new Uri("https://api.discogs.com/")
            };
            var headers = httpClient.DefaultRequestHeaders;

            headers.Add("User-Agent", "Murg");
            headers.Add("Authorization", $"Discogs token={credentials.Token}");

            return(new DiscogsApiClientEnvironment(credentials, httpClient));
        }
        public async Task SendSendsConditionalRequestWithEtag()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var cache = Substitute.For<ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request { Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative) };

            var cachedResponse = Substitute.For<IResponse>();
            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary<string, Uri>(), new List<string>(), new List<string>(), "ABC123", null));

            cache.GetAsync<IResponse>("test").Returns(Task.FromResult(cachedResponse));

            await cachingClient.Send(request, CancellationToken.None);

            httpClient.Received().Send(request, CancellationToken.None).IgnoreAwait();

            Assert.AreEqual("ABC123", request.Headers["If-None-Match"]);
        }
        public async Task SendSendsAndSetsMissingResponses()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var cache = Substitute.For<ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request { Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative) };

            var response = Substitute.For<IResponse>();
            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(response));

            cache.GetAsync<IResponse>("test").Returns(Task.FromResult((IResponse)null));

            var actualReponse = await cachingClient.Send(request, CancellationToken.None);

            cache.Received().SetAsync("test", response).IgnoreAwait();

            Assert.AreEqual(response, actualReponse);
        }
Esempio n. 9
0
        public async Task SendSendsConditionalRequestWithEtag()
        {
            var httpClient = Substitute.For <IHttpClient>();
            var cache      = Substitute.For <ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request {
                Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative)
            };

            var cachedResponse = Substitute.For <IResponse>();

            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary <string, Uri>(), new List <string>(), new List <string>(), "ABC123", null));

            cache.GetAsync <IResponse>("test").Returns(Task.FromResult(cachedResponse));

            await cachingClient.Send(request, CancellationToken.None);

            httpClient.Received().Send(request, CancellationToken.None).IgnoreAwait();

            Assert.AreEqual("ABC123", request.Headers["If-None-Match"]);
        }
Esempio n. 10
0
        public async Task SendSendsAndSetsMissingResponses()
        {
            var httpClient = Substitute.For <IHttpClient>();
            var cache      = Substitute.For <ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request {
                Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative)
            };

            var response = Substitute.For <IResponse>();

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(response));

            cache.GetAsync <IResponse>("test").Returns(Task.FromResult((IResponse)null));

            var actualReponse = await cachingClient.Send(request, CancellationToken.None);

            cache.Received().SetAsync("test", response).IgnoreAwait();

            Assert.AreEqual(response, actualReponse);
        }
        public async Task SendSendsAndSetsReponseWithNoEtag()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var cache = Substitute.For<ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request { Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative) };

            var cachedResponse = Substitute.For<IResponse>();
            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary<string, Uri>(), new List<string>(), new List<string>(), String.Empty, null));

            cache.GetAsync<IResponse>("test").Returns(Task.FromResult(cachedResponse));

            var response = Substitute.For<IResponse>();

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(response));

            var actualReponse = await cachingClient.Send(request, CancellationToken.None);

            cache.Received().SetAsync("test", response).IgnoreAwait();

            Assert.AreEqual(response, actualReponse);
        }
        public async Task SendCachesConditionalResponseOnOk()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var cache = Substitute.For<ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request { Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative) };

            var cachedResponse = Substitute.For<IResponse>();
            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary<string, Uri>(), new List<string>(), new List<string>(), "ABC123", null));

            cache.GetAsync<IResponse>("test").Returns(Task.FromResult(cachedResponse));

            var conditionalResponse = Substitute.For<IResponse>();
            conditionalResponse.StatusCode.Returns(HttpStatusCode.OK);

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(conditionalResponse));

            await cachingClient.Send(request, CancellationToken.None);

            cache.Received().SetAsync("test", conditionalResponse).IgnoreAwait();
        }
        public async Task SendReturnsCachedReponseOnNotModified()
        {
            var httpClient = Substitute.For<IHttpClient>();
            var cache = Substitute.For<ICache>();

            var cachingClient = new CachingHttpClient(httpClient, cache);

            var request = new Request { Method = HttpMethod.Get, Endpoint = new Uri("test", UriKind.Relative) };

            var cachedResponse = Substitute.For<IResponse>();
            cachedResponse.ApiInfo.Returns(new ApiInfo(new Dictionary<string, Uri>(), new List<string>(), new List<string>(), "ABC123", null));

            cache.GetAsync<IResponse>("test").Returns(Task.FromResult(cachedResponse));

            var conditionalResponse = Substitute.For<IResponse>();
            conditionalResponse.StatusCode.Returns(HttpStatusCode.NotModified);

            httpClient.Send(request, CancellationToken.None).Returns(Task.FromResult(conditionalResponse));

            var actualResponse = await cachingClient.Send(request, CancellationToken.None);

            Assert.AreEqual(cachedResponse, actualResponse);
        }