Trying to fix some tests that were originally written for httpRequest mock in order to bring them up to V4. I can't seem to wrap my head around how to get these to work in their desired way. My current code is as such. My issue seems to be around the extension method not being supported?
When I get to req.CreateResponse(StatusCode)
, and then the code blows up with this error:
System.NotSupportedException: Unsupported expression: x => x.CreateResponse(It.IsAny())
Extension methods (here: HttpRequestDataExtensions.CreateResponse) may not be used in setup / verification expressions.
Test:
var req = RequestHelper.GetHttpRequestData(body: GetRequestPayload());
HttpResponseData response = await _fnc.RunAsync(req);
Assert.IsNotNull(response);
Assert.AreEqual(response.StatusCode, StatusCode.NotFound);
Function:
public async Task<HttpResponseData> RunAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "v1/foo")] HttpRequestData req)
{
string requestBody = await req.ReadAsStringAsync();
var response = req.CreateResponse(HttpStatusCode.OK); <-- KABOOM
// ...
}
GetHttpRequestData:
var fc = new Mock<FunctionContext>();
var reqMock = new Mock<HttpRequestData>(fc.Object);
if (body != null)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(JsonConvert.SerializeObject(body));
writer.Flush();
stream.Position = 0;
reqMock.Setup(req => req.Body).Returns(stream);
}
// reqMock.Setup(x => x.CreateResponse(It.IsAny<HttpStatusCode>()))
// .Returns((HttpStatusCode x) => x);
//
reqMock.Setup(x => x.CreateResponse(It.IsAny<HttpStatusCode>()))
.Returns((HttpStatusCode x, HttpResponseData data) =>
{
return data;
});
var r = reqMock.Object;
return r;
CreateResponse extension:
public static HttpResponseData CreateResponse(this HttpRequestData request, HttpStatusCode statusCode)
{
var response = request.CreateResponse();
response.StatusCode = statusCode;
return response;
}