private static void AddFromBodyArgumentsToRequestBody( RequestBuilder requestBuilder, TestServerAction action, RequestContentOptions contentOptions) { var fromBodyArgument = action.ArgumentValues.Values.SingleOrDefault(x => x.IsBody); if (fromBodyArgument != null) { requestBuilder.And(x => x.Content = contentOptions.ContentBuilder(fromBodyArgument.Instance)); } }
/// <summary> /// Create a <see cref="Microsoft.AspNetCore.TestHost.RequestBuilder"/> configured automatically /// with the generated uri from the <paramref name="actionSelector"/>. /// At this moment this method only resolver HTTP API using ASP.NET CORE Attribute Routing /// </summary> /// <typeparam name="TController">The controller to use</typeparam> /// <param name="server">The TestServer</param> /// <param name="actionSelector">The action selector used to discover the uri</param> /// <param name="tokenValues">The optional token values used to create the uri</param> /// <param name="contentOptions">Determines if [FromBody] arguments are included as request content. /// By default they are included as application/json content</param> /// <returns></returns> public static RequestBuilder CreateHttpApiRequest <TController>(this TestServer server, Expression <Func <TController, object> > actionSelector, object tokenValues = null, RequestContentOptions contentOptions = null) where TController : class { if (!IsController <TController>()) { throw new InvalidOperationException($"The type {typeof(TController).FullName} is not a valid MVC controller."); } if (actionSelector == null) { throw new ArgumentNullException(nameof(actionSelector)); } // Include content as Json by default contentOptions = contentOptions ?? new IncludeContentAsJson(); var action = GetTestServerAction(actionSelector); if (!IsValidActionMethod(action.MethodInfo)) { throw new InvalidOperationException($"The action selector is not a valid action for MVC Controller."); } //the uri discover use only attribute route conventions.. var validUri = UriDiscover.Discover <TController>( action, tokenValues); var requestBuilder = server.CreateRequest(validUri); if (contentOptions.IncludeFromBodyAsContent) { AddFromBodyArgumentsToRequestBody(requestBuilder, action, contentOptions); } if (contentOptions.IncludeFromFormAsContent) { AddFromFormArgumentsToRequestForm(requestBuilder, action, contentOptions); } AddFromHeaderArgumentsToRequestForm(requestBuilder, action); return(requestBuilder); }