mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-25 10:52:52 +01:00
AllowOnlyDefinedHttpStatusCodeInResponse (#422)
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<VersionPrefix>1.1.10</VersionPrefix>
|
<VersionPrefix>1.2.0</VersionPrefix>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<Choose>
|
<Choose>
|
||||||
|
|||||||
@@ -61,8 +61,6 @@ namespace WireMock.Net.ConsoleApplication
|
|||||||
handlebarsContext.RegisterHelper(transformer.Name, transformer.Render);
|
handlebarsContext.RegisterHelper(transformer.Name, transformer.Render);
|
||||||
},
|
},
|
||||||
|
|
||||||
AllowAnyHttpStatusCodeInResponse = true
|
|
||||||
|
|
||||||
// Uncomment below if you want to use the CustomFileSystemFileHandler
|
// Uncomment below if you want to use the CustomFileSystemFileHandler
|
||||||
// FileSystemHandler = new CustomFileSystemFileHandler()
|
// FileSystemHandler = new CustomFileSystemFileHandler()
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ namespace WireMock.Owin
|
|||||||
|
|
||||||
bool? AllowBodyForAllHttpMethods { get; set; }
|
bool? AllowBodyForAllHttpMethods { get; set; }
|
||||||
|
|
||||||
bool? AllowAnyHttpStatusCodeInResponse { get; set; }
|
bool? AllowOnlyDefinedHttpStatusCodeInResponse { get; set; }
|
||||||
|
|
||||||
bool? DisableJsonBodyParsing { get; set; }
|
bool? DisableJsonBodyParsing { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,12 +104,12 @@ namespace WireMock.Owin.Mappers
|
|||||||
|
|
||||||
private int MapStatusCode(int code)
|
private int MapStatusCode(int code)
|
||||||
{
|
{
|
||||||
if (_options.AllowAnyHttpStatusCodeInResponse == true || Enum.IsDefined(typeof(HttpStatusCode), code))
|
if (_options.AllowOnlyDefinedHttpStatusCodeInResponse == true && !Enum.IsDefined(typeof(HttpStatusCode), code))
|
||||||
{
|
{
|
||||||
return code;
|
return (int)HttpStatusCode.OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (int)HttpStatusCode.OK;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool IsFault(ResponseMessage responseMessage)
|
private bool IsFault(ResponseMessage responseMessage)
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ namespace WireMock.Owin
|
|||||||
/// <inheritdoc cref="IWireMockMiddlewareOptions.AllowBodyForAllHttpMethods"/>
|
/// <inheritdoc cref="IWireMockMiddlewareOptions.AllowBodyForAllHttpMethods"/>
|
||||||
public bool? AllowBodyForAllHttpMethods { get; set; }
|
public bool? AllowBodyForAllHttpMethods { get; set; }
|
||||||
|
|
||||||
/// <inheritdoc cref="IWireMockMiddlewareOptions.AllowAnyHttpStatusCodeInResponse"/>
|
/// <inheritdoc cref="IWireMockMiddlewareOptions.AllowOnlyDefinedHttpStatusCodeInResponse"/>
|
||||||
public bool? AllowAnyHttpStatusCodeInResponse { get; set; }
|
public bool? AllowOnlyDefinedHttpStatusCodeInResponse { get; set; }
|
||||||
|
|
||||||
/// <inheritdoc cref="IWireMockMiddlewareOptions.DisableResponseBodyParsing"/>
|
/// <inheritdoc cref="IWireMockMiddlewareOptions.DisableResponseBodyParsing"/>
|
||||||
public bool? DisableJsonBodyParsing { get; set; }
|
public bool? DisableJsonBodyParsing { get; set; }
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Net;
|
using System.Net;
|
||||||
|
using WireMock.Settings;
|
||||||
|
|
||||||
namespace WireMock.ResponseBuilders
|
namespace WireMock.ResponseBuilders
|
||||||
{
|
{
|
||||||
@@ -9,6 +10,7 @@ namespace WireMock.ResponseBuilders
|
|||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The with status code.
|
/// The with status code.
|
||||||
|
/// By default all status codes are allowed, to change this behaviour, see <inheritdoc cref="IWireMockServerSettings.AllowOnlyDefinedHttpStatusCodeInResponse"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="code">The code.</param>
|
/// <param name="code">The code.</param>
|
||||||
/// <returns>The <see cref="IResponseBuilder"/>.</returns>
|
/// <returns>The <see cref="IResponseBuilder"/>.</returns>
|
||||||
@@ -16,6 +18,7 @@ namespace WireMock.ResponseBuilders
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The with status code.
|
/// The with status code.
|
||||||
|
/// By default all status codes are allowed, to change this behaviour, see <inheritdoc cref="IWireMockServerSettings.AllowOnlyDefinedHttpStatusCodeInResponse"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="code">The code.</param>
|
/// <param name="code">The code.</param>
|
||||||
/// <returns>The <see cref="IResponseBuilder"/>.</returns>
|
/// <returns>The <see cref="IResponseBuilder"/>.</returns>
|
||||||
@@ -23,6 +26,7 @@ namespace WireMock.ResponseBuilders
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The with status code.
|
/// The with status code.
|
||||||
|
/// By default all status codes are allowed, to change this behaviour, see <inheritdoc cref="IWireMockServerSettings.AllowOnlyDefinedHttpStatusCodeInResponse"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="code">The code.</param>
|
/// <param name="code">The code.</param>
|
||||||
/// <returns>The <see cref="IResponseBuilder"/>.</returns>
|
/// <returns>The <see cref="IResponseBuilder"/>.</returns>
|
||||||
|
|||||||
@@ -269,10 +269,10 @@ namespace WireMock.Server
|
|||||||
_settings.Logger.Info("AllowBodyForAllHttpMethods is set to True");
|
_settings.Logger.Info("AllowBodyForAllHttpMethods is set to True");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.AllowAnyHttpStatusCodeInResponse == true)
|
if (settings.AllowOnlyDefinedHttpStatusCodeInResponse == true)
|
||||||
{
|
{
|
||||||
_options.AllowAnyHttpStatusCodeInResponse = _settings.AllowAnyHttpStatusCodeInResponse;
|
_options.AllowOnlyDefinedHttpStatusCodeInResponse = _settings.AllowOnlyDefinedHttpStatusCodeInResponse;
|
||||||
_settings.Logger.Info("AllowAnyHttpStatusCodeInResponse is set to True");
|
_settings.Logger.Info("AllowOnlyDefinedHttpStatusCodeInResponse is set to True");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.AllowPartialMapping == true)
|
if (settings.AllowPartialMapping == true)
|
||||||
|
|||||||
@@ -139,10 +139,12 @@ namespace WireMock.Settings
|
|||||||
bool? AllowBodyForAllHttpMethods { get; set; }
|
bool? AllowBodyForAllHttpMethods { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Allow any HttpStatusCode in the response. Also null, 0, empty or invalid. (default set to false).
|
/// Allow only a HttpStatus Code in the response which is defined. (default set to false).
|
||||||
|
/// - false : also null, 0, empty or invalid HttpStatus codes are allowed.
|
||||||
|
/// - true : only codes defined in <see cref="System.Net.HttpStatusCode"/> are allowed.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// [PublicAPI]
|
/// [PublicAPI]
|
||||||
bool? AllowAnyHttpStatusCodeInResponse { get; set; }
|
bool? AllowOnlyDefinedHttpStatusCodeInResponse { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Set to true to disable Json deserialization when processing requests. (default set to false).
|
/// Set to true to disable Json deserialization when processing requests. (default set to false).
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ namespace WireMock.Settings
|
|||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
public bool? AllowBodyForAllHttpMethods { get; set; }
|
public bool? AllowBodyForAllHttpMethods { get; set; }
|
||||||
|
|
||||||
/// <inheritdoc cref="IWireMockServerSettings.AllowAnyHttpStatusCodeInResponse"/>
|
/// <inheritdoc cref="IWireMockServerSettings.AllowOnlyDefinedHttpStatusCodeInResponse"/>
|
||||||
public bool? AllowAnyHttpStatusCodeInResponse { get; set; }
|
public bool? AllowOnlyDefinedHttpStatusCodeInResponse { get; set; }
|
||||||
|
|
||||||
/// <inheritdoc cref="IWireMockServerSettings.DisableJsonBodyParsing"/>
|
/// <inheritdoc cref="IWireMockServerSettings.DisableJsonBodyParsing"/>
|
||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace WireMock.Settings
|
|||||||
RequestLogExpirationDuration = parser.GetIntValue("RequestLogExpirationDuration"),
|
RequestLogExpirationDuration = parser.GetIntValue("RequestLogExpirationDuration"),
|
||||||
AllowCSharpCodeMatcher = parser.GetBoolValue("AllowCSharpCodeMatcher"),
|
AllowCSharpCodeMatcher = parser.GetBoolValue("AllowCSharpCodeMatcher"),
|
||||||
AllowBodyForAllHttpMethods = parser.GetBoolValue("AllowBodyForAllHttpMethods"),
|
AllowBodyForAllHttpMethods = parser.GetBoolValue("AllowBodyForAllHttpMethods"),
|
||||||
AllowAnyHttpStatusCodeInResponse = parser.GetBoolValue("AllowAnyHttpStatusCodeInResponse"),
|
AllowOnlyDefinedHttpStatusCodeInResponse = parser.GetBoolValue("AllowOnlyDefinedHttpStatusCodeInResponse"),
|
||||||
DisableJsonBodyParsing = parser.GetBoolValue("DisableJsonBodyParsing")
|
DisableJsonBodyParsing = parser.GetBoolValue("DisableJsonBodyParsing")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -70,11 +70,9 @@ namespace WireMock.Net.Tests.Owin.Mappers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(0, 200)]
|
|
||||||
[InlineData(-1, 200)]
|
|
||||||
[InlineData(10000, 200)]
|
|
||||||
[InlineData(300, 300)]
|
[InlineData(300, 300)]
|
||||||
public async Task OwinResponseMapper_MapAsync_StatusCode(object code, int expected)
|
[InlineData(500, 500)]
|
||||||
|
public async Task OwinResponseMapper_MapAsync_Valid_StatusCode(object code, int expected)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var responseMessage = new ResponseMessage
|
var responseMessage = new ResponseMessage
|
||||||
@@ -89,8 +87,46 @@ namespace WireMock.Net.Tests.Owin.Mappers
|
|||||||
_responseMock.VerifySet(r => r.StatusCode = expected, Times.Once);
|
_responseMock.VerifySet(r => r.StatusCode = expected, Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(0, 200)]
|
||||||
|
[InlineData(-1, 200)]
|
||||||
|
[InlineData(10000, 200)]
|
||||||
|
[InlineData(300, 300)]
|
||||||
|
public async Task OwinResponseMapper_MapAsync_Invalid_StatusCode_When_AllowOnlyDefinedHttpStatusCodeInResponseSet_Is_True(object code, int expected)
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
_optionsMock.SetupGet(o => o.AllowOnlyDefinedHttpStatusCodeInResponse).Returns(true);
|
||||||
|
var responseMessage = new ResponseMessage
|
||||||
|
{
|
||||||
|
StatusCode = code
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await _sut.MapAsync(responseMessage, _responseMock.Object);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
_responseMock.VerifySet(r => r.StatusCode = expected, Times.Once);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task OwinResponseMapper_MapAsync_StatusCodeNull()
|
public async Task OwinResponseMapper_MapAsync_Null_StatusCode_When_AllowOnlyDefinedHttpStatusCodeInResponseSet_Is_True()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
_optionsMock.SetupGet(o => o.AllowOnlyDefinedHttpStatusCodeInResponse).Returns(true);
|
||||||
|
var responseMessage = new ResponseMessage
|
||||||
|
{
|
||||||
|
StatusCode = null
|
||||||
|
};
|
||||||
|
|
||||||
|
// Act
|
||||||
|
await _sut.MapAsync(responseMessage, _responseMock.Object);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
_responseMock.VerifyNoOtherCalls();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task OwinResponseMapper_MapAsync_StatusCode_Is_Null()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var responseMessage = new ResponseMessage
|
var responseMessage = new ResponseMessage
|
||||||
@@ -110,10 +146,9 @@ namespace WireMock.Net.Tests.Owin.Mappers
|
|||||||
[InlineData(-1, -1)]
|
[InlineData(-1, -1)]
|
||||||
[InlineData(10000, 10000)]
|
[InlineData(10000, 10000)]
|
||||||
[InlineData(300, 300)]
|
[InlineData(300, 300)]
|
||||||
public async Task OwinResponseMapper_MapAsync_StatusCode_WithAllowAll(object code, int expected)
|
public async Task OwinResponseMapper_MapAsync_StatusCode_Is_NotInEnumRange(object code, int expected)
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
_optionsMock.SetupGet(o => o.AllowAnyHttpStatusCodeInResponse).Returns(true);
|
|
||||||
var responseMessage = new ResponseMessage
|
var responseMessage = new ResponseMessage
|
||||||
{
|
{
|
||||||
StatusCode = code
|
StatusCode = code
|
||||||
@@ -126,23 +161,6 @@ namespace WireMock.Net.Tests.Owin.Mappers
|
|||||||
_responseMock.VerifySet(r => r.StatusCode = expected, Times.Once);
|
_responseMock.VerifySet(r => r.StatusCode = expected, Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
|
||||||
public async Task OwinResponseMapper_MapAsync_StatusCode_WithAllowAll_Null()
|
|
||||||
{
|
|
||||||
// Arrange
|
|
||||||
_optionsMock.SetupGet(o => o.AllowAnyHttpStatusCodeInResponse).Returns(true);
|
|
||||||
var responseMessage = new ResponseMessage
|
|
||||||
{
|
|
||||||
StatusCode = null
|
|
||||||
};
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await _sut.MapAsync(responseMessage, _responseMock.Object);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
_responseMock.VerifyNoOtherCalls();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task OwinResponseMapper_MapAsync_NoBody()
|
public async Task OwinResponseMapper_MapAsync_NoBody()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,10 @@
|
|||||||
<AssemblyOriginatorKeyFile>../../src/WireMock.Net/WireMock.Net.snk</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>../../src/WireMock.Net/WireMock.Net.snk</AssemblyOriginatorKeyFile>
|
||||||
<!--<DelaySign>true</DelaySign>-->
|
<!--<DelaySign>true</DelaySign>-->
|
||||||
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
|
<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
|
||||||
|
|
||||||
|
<!--https://developercommunity.visualstudio.com/content/problem/26347/unit-tests-fail-with-fileloadexception-newtonsoftj-1.html-->
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||||
|
|||||||
@@ -141,21 +141,21 @@ namespace WireMock.Net.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void WireMockServer_WireMockServerSettings_AllowAnyHttpStatusCodeInResponse()
|
public void WireMockServer_WireMockServerSettings_AllowOnlyDefinedHttpStatusCodeInResponse()
|
||||||
{
|
{
|
||||||
// Assign and Act
|
// Assign and Act
|
||||||
var server = WireMockServer.Start(new WireMockServerSettings
|
var server = WireMockServer.Start(new WireMockServerSettings
|
||||||
{
|
{
|
||||||
Logger = _loggerMock.Object,
|
Logger = _loggerMock.Object,
|
||||||
AllowAnyHttpStatusCodeInResponse = true
|
AllowOnlyDefinedHttpStatusCodeInResponse = true
|
||||||
});
|
});
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
var options = server.GetPrivateFieldValue<IWireMockMiddlewareOptions>("_options");
|
var options = server.GetPrivateFieldValue<IWireMockMiddlewareOptions>("_options");
|
||||||
Check.That(options.AllowAnyHttpStatusCodeInResponse).Equals(true);
|
Check.That(options.AllowOnlyDefinedHttpStatusCodeInResponse).Equals(true);
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
_loggerMock.Verify(l => l.Info(It.Is<string>(s => s.Contains("AllowAnyHttpStatusCodeInResponse") && s.Contains("True"))));
|
_loggerMock.Verify(l => l.Info(It.Is<string>(s => s.Contains("AllowOnlyDefinedHttpStatusCodeInResponse") && s.Contains("True"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|||||||
Reference in New Issue
Block a user