示例#1
0
    public static async Task GetResponseAsync_Returns_Empty_Response_If_Custom_Response_Headers_Using_Stream()
    {
        // Arrange
        var method = HttpMethod.Get;
        var uri    = new Uri("https://google.com/");

        var responseHeaders = new Dictionary <string, IEnumerable <string> >()
        {
            ["a"] = new[] { "b" },
            ["c"] = new[] { "d", "e" },
        };

        var options = new HttpClientInterceptorOptions()
                      .RegisterStream(method, uri, contentStream: EmptyStream, responseHeaders: responseHeaders);

        var request = new HttpRequestMessage(method, uri);

        // Act
        var actual = await options.GetResponseAsync(request);

        // Assert
        actual.ShouldNotBeNull();
        actual.RequestMessage.ShouldBe(request);
        actual.Content.ShouldNotBeNull();
        actual.Content.Headers.ContentLength.ShouldBe(0);
        actual.Headers.GetValues("a").ShouldBe(new[] { "b" });
        actual.Headers.GetValues("c").ShouldBe(new[] { "d", "e" });
    }
示例#2
0
    public static async Task GetResponseAsync_Returns_Empty_Response_If_Custom_Response_Header()
    {
        // Arrange
        var method = HttpMethod.Get;
        var uri    = new Uri("https://google.com/");

        var headers = new Dictionary <string, string>()
        {
            ["a"] = "b",
            ["c"] = "d",
        };

        var options = new HttpClientInterceptorOptions()
                      .RegisterByteArray(method, uri, contentFactory: Array.Empty <byte>, responseHeaders: headers);

        var request = new HttpRequestMessage(method, uri);

        // Act
        HttpResponseMessage actual = await options.GetResponseAsync(request);

        // Assert
        actual.ShouldNotBeNull();
        actual.RequestMessage.ShouldBe(request);
        actual.Content.ShouldNotBeNull();
        actual.Content.Headers.ContentLength.ShouldBe(0);
        actual.Headers.GetValues("a").ShouldBe(new[] { "b" });
        actual.Headers.GetValues("c").ShouldBe(new[] { "d" });
    }
    /// <inheritdoc />
    protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (_options.OnSend != null)
        {
            await _options.OnSend(request).ConfigureAwait(false);
        }

        var response = await _options.GetResponseAsync(request, cancellationToken).ConfigureAwait(false);

        if (response == null && _options.OnMissingRegistration != null)
        {
            response = await _options.OnMissingRegistration(request).ConfigureAwait(false);
        }

        if (response != null)
        {
            return(response);
        }

        if (_options.ThrowOnMissingRegistration)
        {
#pragma warning disable CA1062
            throw new HttpRequestNotInterceptedException(
                      $"No HTTP response is configured for {request.Method.Method} {request.RequestUri}.",
                      request);
#pragma warning restore CA1062
        }

        return(await base.SendAsync(request, cancellationToken).ConfigureAwait(false));
    }
示例#4
0
    public static async Task GetResponseAsync_Throws_If_Request_Is_Null()
    {
        // Arrange
        var options = new HttpClientInterceptorOptions();
        HttpRequestMessage request = null;

        // Act and Assert
        await Should.ThrowAsync <ArgumentNullException>(() => options.GetResponseAsync(request), "request");
    }
示例#5
0
    public static async Task GetResponseAsync_Returns_Null_If_Request_Not_Registered()
    {
        // Arrange
        var options = new HttpClientInterceptorOptions();
        var request = new HttpRequestMessage(HttpMethod.Get, "https://google.com");

        // Act
        HttpResponseMessage actual = await options.GetResponseAsync(request);

        // Assert
        actual.ShouldBeNull();
    }
示例#6
0
    public static async Task GetResponseAsync_Returns_Null_If_Request_Uri_Does_Not_Match_Blank_Request()
    {
        // Arrange
        var options = new HttpClientInterceptorOptions()
                      .RegisterByteArray(HttpMethod.Get, new Uri("https://google.co.uk/"), contentFactory: EmptyContent);

        var request = new HttpRequestMessage();

        // Act
        HttpResponseMessage actual = await options.GetResponseAsync(request);

        // Assert
        actual.ShouldBeNull();
    }
示例#7
0
    public static async Task GetResponseAsync_Throws_If_ContentStream_Cannot_Be_Created()
    {
        // Arrange
        var method = HttpMethod.Get;
        var uri    = new Uri("https://google.com/");

        var options = new HttpClientInterceptorOptions()
                      .RegisterStream(method, uri, contentStream: () => throw new NotImplementedException());

        using var request = new HttpRequestMessage(method, uri);

        // Act and Assert
        await Should.ThrowAsync <NotImplementedException>(() => options.GetResponseAsync(request));
    }
示例#8
0
    public static async Task GetResponseAsync_Returns_Response_If_Request_Matches_Default_Constructor()
    {
        // Arrange
        var method = HttpMethod.Get;
        var uri    = new Uri("https://google.com/");

        var options = new HttpClientInterceptorOptions()
                      .RegisterByteArray(method, uri, contentFactory: EmptyContent);

        var request = new HttpRequestMessage(method, uri);

        // Act
        HttpResponseMessage actual = await options.GetResponseAsync(request);

        // Assert
        actual.ShouldNotBeNull();
        actual.RequestMessage.ShouldBe(request);
    }
示例#9
0
    public static async Task GetResponseAsync_Returns_Response_If_Request_Matches(bool caseSensitive, bool expectNull)
    {
        // Arrange
        var method        = HttpMethod.Get;
        var uriToRegister = new Uri("https://google.com/uk");
        var uriToRequest  = new Uri("https://google.com/UK");

        var options = new HttpClientInterceptorOptions(caseSensitive)
                      .RegisterByteArray(method, uriToRegister, contentFactory: EmptyContent);

        var request = new HttpRequestMessage(method, uriToRequest);

        // Act
        using HttpResponseMessage actual = await options.GetResponseAsync(request);

        // Assert
        (actual == null).ShouldBe(expectNull);
    }
示例#10
0
    public static async Task GetResponseAsync_Returns_Empty_Response_If_ContentStream_Returns_Null_Asynchronous()
    {
        // Arrange
        var method = HttpMethod.Get;
        var uri    = new Uri("https://google.com/");

        var options = new HttpClientInterceptorOptions()
                      .RegisterStream(method, uri, () => Task.FromResult <Stream>(null));

        var request = new HttpRequestMessage(method, uri);

        // Act
        HttpResponseMessage actual = await options.GetResponseAsync(request);

        // Assert
        actual.ShouldNotBeNull();
        actual.RequestMessage.ShouldBe(request);
        actual.Content.ShouldNotBeNull();
        actual.Content.Headers?.ContentLength.ShouldBe(0);
        actual.Content.Headers?.ContentType?.MediaType.ShouldBe("application/json");
    }