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); }
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 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(); }
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(); }
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); }
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); }
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); }