public static T WithTypedClients <T, TClient1, TClient2>(TeePeeBuilder <TClient1> teePeeBuilder1, TeePeeBuilder <TClient2> teePeeBuilder2, Action <IServiceCollection> setup = null) where T : class where TClient1 : class where TClient2 : class { var serviceCollection = new ServiceCollection(); var teePeeMessageHandler1 = teePeeBuilder1.Build().HttpHandler; var teePeeMessageHandler2 = teePeeBuilder2.Build().HttpHandler; if (setup != null) { // Use your own Typed Client setup here setup(serviceCollection); serviceCollection.AddTrackingForTypedClient <TClient1>(teePeeMessageHandler1); serviceCollection.AddTrackingForTypedClient <TClient2>(teePeeMessageHandler2); } else { serviceCollection.AddHttpClient <TClient1>(_ => { }) .AddHttpMessageHandler(_ => teePeeMessageHandler1); serviceCollection.AddHttpClient <TClient2>(_ => { }) .AddHttpMessageHandler(_ => teePeeMessageHandler2); } serviceCollection.AddTransient <T>(); return(serviceCollection.BuildServiceProvider().GetService <T>()); }
public void WithUrlDoesNotThrowIfAbsolute(string absoluteUrl) { // Given var builder = new TeePeeBuilder(); // When var ex = Record.Exception(() => builder.ForRequest(absoluteUrl, HttpMethod.Get)); // Then Assert.Null(ex); }
public void ForRequestThrowsIfNotAbsolute(string relativeUrl) { // Given var builder = new TeePeeBuilder(); // When var ex = Record.Exception(() => builder.ForRequest(relativeUrl, HttpMethod.Get)); // Then Assert.IsType <ArgumentException>(ex); Assert.Contains("must be an absolute URI", ex.Message); }
public static T WithDefaultClient <T>(TeePeeBuilder teePeeBuilder) where T : class { var teePeeMessageHandler = teePeeBuilder.Build().HttpHandler; var serviceCollection = new ServiceCollection(); serviceCollection.AddHttpClient(Options.DefaultName) .AddHttpMessageHandler(_ => teePeeMessageHandler); serviceCollection.AddTransient <T>(); return(serviceCollection.BuildServiceProvider().GetService <T>()); }
public void ContainingQueryParamThrowsIfUrlHasQueryString() { // Given var builder = new TeePeeBuilder(); var requestBuilder = builder.ForRequest("https://site.net/api/items?filter=value", HttpMethod.Get); // When var ex = Record.Exception(() => requestBuilder.ContainingQueryParam("sort", "name")); // Then Assert.IsType <InvalidOperationException>(ex); Assert.Contains("Url has already been configured to match with a QueryString", ex.Message); }
public void ForRequestDoesNotThrowOnDifferentUrlAndMethod(string firstUrl, HttpMethod firstMethod, string secondUrl, HttpMethod secondMethod) { // Given var builder = new TeePeeBuilder(); builder.ForRequest(firstUrl, firstMethod); // When var ex = Record.Exception(() => builder.ForRequest(secondUrl, secondMethod)); Assert.Null(ex); }
public void ForRequestThrowsOnDuplicateUrlAndMethod(string url, HttpMethod method) { // Given var builder = new TeePeeBuilder(); builder.ForRequest(url, method); // When var ex = Record.Exception(() => builder.ForRequest(url, method)); Assert.IsType <ArgumentException>(ex); Assert.Contains("already a request match for", ex.Message); }
public async Task ThrowsIfNoMatchInStrictMode() { // Given m_TrackingBuilder = new TeePeeBuilder(mode: TeePeeMode.Strict); // When var ex = await Record.ExceptionAsync(async() => await SendRequest()); // Then Assert.NotNull(ex); var nex = Assert.IsType <NotSupportedException>(ex); Assert.Contains("request was made which did not match any of the TeePee rules.", nex.Message); }
public void WithBodyThrowsIfCalledMoreThanOnce() { // Given var builder = new TeePeeBuilder(); var requestBuilder = builder.ForRequest("https://site.net/api/items", HttpMethod.Get) .WithBody("test"); // When var ex = Record.Exception(() => requestBuilder.WithBody("test")); // Then Assert.IsType <InvalidOperationException>(ex); Assert.Contains("matching Body has already been added", ex.Message); }
public void ContainingHeaderThrowsIfDupeName() { // Given var builder = new TeePeeBuilder(); var requestBuilder = builder.ForRequest("https://site.net/api/other", HttpMethod.Get) .ContainingHeader("Authorization", "Bearer x"); // When var ex = Record.Exception(() => requestBuilder.ContainingHeader("Authorization", "Bearer y")); // Then Assert.IsType <ArgumentException>(ex); Assert.Contains("already been added", ex.Message); }
public void ContainingQueryParamThrowsIfAnotherMatchForUrlWithQueryStringAlreadyExists() { // Given var builder = new TeePeeBuilder(); builder.ForRequest("https://site.net/api/items?filter=value", HttpMethod.Get); var requestBuilder = builder.ForRequest("https://site.net/api/other", HttpMethod.Get); // When var ex = Record.Exception(() => requestBuilder.ContainingQueryParam("sort", "name")); // Then Assert.IsType <InvalidOperationException>(ex); Assert.Contains("request matches already exist with QueryString matching", ex.Message); }
public async Task RespondsWithCorrectBodyWithCustomJsonSerializerOptions() { // Given var jsonSerializeOptions = new JsonSerializerOptions { IgnoreNullValues = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; m_TrackingBuilder = new TeePeeBuilder(bodySerializeOptions: jsonSerializeOptions); var bodyObject = new { Nullable = (string)null, Case = "value", EnumVal = ToTestJsonSettings.Off }; RequestMatchBuilder().Responds() .WithBody(bodyObject); // When var response = await SendRequest(); // Then Assert.NotNull(response); var responseBody = await response.Content.ReadAsStringAsync(); Assert.Equal("{\"case\":\"value\",\"enumVal\":3}", responseBody); }
public static T WithTypedClient <T, TClient>(TeePeeBuilder teePeeBuilder, Action <IServiceCollection> configureServices = null) where T : class where TClient : class { var serviceCollection = new ServiceCollection(); var teePeeMessageHandler = teePeeBuilder.Build().HttpHandler; if (configureServices != null) { // Use your own Typed Client setup here configureServices(serviceCollection); serviceCollection.AddTrackingForTypedClient <TClient>(teePeeMessageHandler); } else { // Otherwise, register the Typed Client here serviceCollection.AddHttpClient <TClient>(_ => { }) .AddHttpMessageHandler(_ => teePeeMessageHandler); } serviceCollection.AddTransient <T>(); return(serviceCollection.BuildServiceProvider().GetService <T>()); }