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());
        }
Beispiel #2
0
        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());
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #7
0
        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());
        }
Beispiel #9
0
        /// <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);
        }