public async Task TheExecuteAsyncMethodShouldNotApplyFieldsIfNotSupplied() { // Arrange Mock.Get(this.queryCollection) .Setup(queryCollection => queryCollection.ContainsKey("fields")) .Returns(false); var partialJsonResult = new PartialJsonResult(new { foo = "bar" }, new JsonSerializerSettings()); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Assert.Equal("{\"foo\":\"bar\"}", this.body.ToString()); }
public async Task TheExecuteAsyncMethodShouldNotApplyFieldsIfNotSupplied() { // Arrange Mock.Get(this.fieldsParser) .Setup(fieldsParser => fieldsParser.Parse(this.httpRequest)) .Returns(FieldsParserResult.NoValue()); var partialJsonResult = new PartialJsonResult(new { foo = "bar" }, new JsonSerializerSettings()); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Assert.Equal("{\"foo\":\"bar\"}", this.body.ToString()); }
public async Task TheExecuteAsyncMethodShouldReturnStatusCode400IfFieldsMalformed() { // Arrange Mock.Get(this.fieldsParser) .Setup(fieldsParser => fieldsParser.Parse(this.httpRequest)) .Returns(FieldsParserResult.Failed()); var partialJsonResult = new PartialJsonResult(new { }); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Mock.Get(this.httpResponse) .VerifySet(httpResponse => httpResponse.StatusCode = 400); Assert.Equal(0, this.body.Length); }
public async Task TheExecuteAsyncMethodShouldNotWriteBodyIfFieldsMalformed() { // Arrange Mock.Get(this.queryCollection) .Setup(queryCollection => queryCollection.ContainsKey("fields")) .Returns(true); Mock.Get(this.queryCollection) .SetupGet(queryCollection => queryCollection["fields"]) .Returns("foo/"); var partialJsonResult = new PartialJsonResult(new { }); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Assert.Equal(0, this.body.Length); }
public async Task TheExecuteAsyncMethodShouldNotIgnoreCase() { // Arrange Fields.TryParse("FOO", out var fields); Mock.Get(this.fieldsParser) .Setup(fieldsParser => fieldsParser.Parse(this.httpRequest)) .Returns(FieldsParserResult.Success(fields)); this.mvcPartialJsonOptions.IgnoreCase = false; var partialJsonResult = new PartialJsonResult(new { foo = "bar", baz = "qux" }, new JsonSerializerSettings()); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Assert.Equal("{}", this.body.ToString()); }
public async Task TheExecuteAsyncMethodShouldReturnStatusCode400IfFieldsMalformed() { // Arrange Mock.Get(this.queryCollection) .Setup(queryCollection => queryCollection.ContainsKey("fields")) .Returns(true); Mock.Get(this.queryCollection) .SetupGet(queryCollection => queryCollection["fields"]) .Returns("foo/"); var partialJsonResult = new PartialJsonResult(new { }); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Mock.Get(this.httpResponse) .VerifySet(httpResponse => httpResponse.StatusCode = 400); }
public async Task TheExecuteAsyncMethodShouldNotReturnStatusCode400IfFieldsMalformedButParseErrorsIgnored() { // Arrange Mock.Get(this.fieldsParser) .Setup(fieldsParser => fieldsParser.Parse(this.httpRequest)) .Returns(FieldsParserResult.Failed()); var partialJsonResult = new PartialJsonResult(new { foo = "bar" }); this.mvcPartialJsonOptions.IgnoreParseErrors = true; // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Mock.Get(this.httpResponse) .VerifySet(httpResponse => httpResponse.StatusCode = 400, Times.Never); Assert.Equal("{\"foo\":\"bar\"}", this.body.ToString()); }
public async Task TheExecuteAsyncMethodShouldNotIgnoreCase() { // Arrange Mock.Get(this.queryCollection) .Setup(queryCollection => queryCollection.ContainsKey("fields")) .Returns(true); Mock.Get(this.queryCollection) .SetupGet(queryCollection => queryCollection["fields"]) .Returns("FOO"); this.partialJsonOptions.IgnoreCase = false; var partialJsonResult = new PartialJsonResult(new { foo = "bar", baz = "qux" }, new JsonSerializerSettings()); // Act await this.executor.ExecuteAsync(this.actionContext, partialJsonResult); // Assert Assert.Equal("{}", this.body.ToString()); }
/// <summary> /// Executes the <see cref="PartialJsonResult"/> and writes the response. /// </summary> /// <param name="context">The <see cref="ActionContext"/>.</param> /// <param name="result">The <see cref="PartialJsonResult"/>.</param> /// <returns>A <see cref="Task"/> which will complete when writing has completed.</returns> public Task ExecuteAsync(ActionContext context, PartialJsonResult result) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (result == null) { throw new ArgumentNullException(nameof(result)); } var request = context.HttpContext.Request; var response = context.HttpContext.Response; Fields?fields; if (!request.TryGetFields(out fields)) { response.StatusCode = 400; return(TaskCache.CompletedTask); } string resolvedContentType = null; Encoding resolvedContentTypeEncoding = null; ResponseContentTypeHelper.ResolveContentTypeAndEncoding( result.ContentType, response.ContentType, DefaultContentType, out resolvedContentType, out resolvedContentTypeEncoding); response.ContentType = resolvedContentType; if (result.StatusCode != null) { response.StatusCode = result.StatusCode.Value; } var serializerSettings = result.SerializerSettings ?? Options.SerializerSettings; Logger.PartialJsonResultExecuting(result.Value); using (var writer = WriterFactory.CreateWriter(response.Body, resolvedContentTypeEncoding)) { using (var jsonWriter = new JsonTextWriter(writer)) { jsonWriter.ArrayPool = _charPool; jsonWriter.CloseOutput = false; var jsonSerializer = JsonSerializer.Create(serializerSettings); if (fields.HasValue) { jsonSerializer.Serialize(jsonWriter, result.Value, path => fields.Value.Matches(path, this.Options.IgnoreCase)); } else { jsonSerializer.Serialize(jsonWriter, result.Value); } } } return(TaskCache.CompletedTask); }