Esempio n. 1
0
    public static async Task Options_Can_Be_Cloned()
    {
        // Arrange
        var url     = "https://google.com/";
        var payload = new MyObject()
        {
            Message = "Hello world!"
        };

        var options = new HttpClientInterceptorOptions()
                      .RegisterGetJson(url, payload, statusCode: HttpStatusCode.NotFound);

        // Act
        var clone = options.Clone()
                    .RegisterGetJson(url, payload, statusCode: HttpStatusCode.InternalServerError);

        // Assert
        clone.OnMissingRegistration.ShouldBe(options.OnMissingRegistration);
        clone.OnSend.ShouldBe(options.OnSend);
        clone.ThrowOnMissingRegistration.ShouldBe(options.ThrowOnMissingRegistration);

        await HttpAssert.GetAsync(options, url, HttpStatusCode.NotFound);

        await HttpAssert.GetAsync(clone, url, HttpStatusCode.InternalServerError);

        // Arrange
        options.OnMissingRegistration = (_) => Task.FromResult <HttpResponseMessage>(null);
        options.OnSend = (_) => Task.CompletedTask;
        options.ThrowOnMissingRegistration = true;
        options.Clear();

        // Act and Assert
        clone.ThrowOnMissingRegistration.ShouldNotBe(options.ThrowOnMissingRegistration);
        clone.OnMissingRegistration.ShouldNotBe(options.OnMissingRegistration);
        clone.OnSend.ShouldNotBe(options.OnSend);

        await Should.ThrowAsync <HttpRequestNotInterceptedException>(() => HttpAssert.GetAsync(options, url, HttpStatusCode.InternalServerError));

        await HttpAssert.GetAsync(clone, url, HttpStatusCode.InternalServerError);

        // Arrange
        options = new HttpClientInterceptorOptions()
                  .ThrowsOnMissingRegistration();

        // Act
        clone = options.Clone();

        // Assert
        clone.ThrowOnMissingRegistration.ShouldBe(options.ThrowOnMissingRegistration);
        clone.OnMissingRegistration.ShouldBe(options.OnMissingRegistration);
        clone.OnSend.ShouldBe(options.OnSend);
    }