public async Task CheckNullBehaviorCombination(bool?omitNullValuedAttributes, bool?allowClientOverride,
                                                       string clientOverride, bool omitsNulls)
        {
            // Override some null handling options
            NullAttributeResponseBehavior nullAttributeResponseBehavior;

            if (omitNullValuedAttributes.HasValue && allowClientOverride.HasValue)
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior(omitNullValuedAttributes.Value, allowClientOverride.Value);
            }
            else if (omitNullValuedAttributes.HasValue)
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior(omitNullValuedAttributes.Value);
            }
            else if (allowClientOverride.HasValue)
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior(allowClientOverride: allowClientOverride.Value);
            }
            else
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior();
            }

            var jsonApiOptions = _fixture.GetService <IJsonApiOptions>();

            jsonApiOptions.NullAttributeResponseBehavior = nullAttributeResponseBehavior;
            jsonApiOptions.AllowCustomQueryParameters    = true;

            var httpMethod  = new HttpMethod("GET");
            var queryString = allowClientOverride.HasValue
                ? $"&omitNull={clientOverride}"
                : "";
            var route   = $"/api/v1/todoItems/{_todoItem.Id}?include=owner{queryString}";
            var request = new HttpRequestMessage(httpMethod, route);

            // Act
            var response = await _fixture.Client.SendAsync(request);

            var body = await response.Content.ReadAsStringAsync();

            var deserializeBody = JsonConvert.DeserializeObject <Document>(body);

            // Assert: does response contain a null valued attribute?
            Assert.Equal(omitsNulls, !deserializeBody.SingleData.Attributes.ContainsKey("description"));
            Assert.Equal(omitsNulls, !deserializeBody.Included[0].Attributes.ContainsKey("lastName"));
        }
        public void CheckNullBehaviorCombination(bool?omitNullValuedAttributes, bool?allowClientOverride, string clientOverride, bool omitsNulls)
        {
            NullAttributeResponseBehavior nullAttributeResponseBehavior;

            if (omitNullValuedAttributes.HasValue && allowClientOverride.HasValue)
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior(omitNullValuedAttributes.Value, allowClientOverride.Value);
            }
            else if (omitNullValuedAttributes.HasValue)
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior(omitNullValuedAttributes.Value);
            }
            else if
            (allowClientOverride.HasValue)
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior(allowClientOverride: allowClientOverride.Value);
            }
            else
            {
                nullAttributeResponseBehavior = new NullAttributeResponseBehavior();
            }

            var jsonApiContextMock = new Mock <IJsonApiContext>();

            jsonApiContextMock.SetupGet(m => m.Options)
            .Returns(new JsonApiOptions()
            {
                NullAttributeResponseBehavior = nullAttributeResponseBehavior
            });

            var httpContext = new DefaultHttpContext();

            if (clientOverride != null)
            {
                httpContext.Request.QueryString = new QueryString($"?omitNullValuedAttributes={clientOverride}");
            }
            var httpContextAccessorMock = new Mock <IHttpContextAccessor>();

            httpContextAccessorMock.SetupGet(m => m.HttpContext).Returns(httpContext);

            var sut = new DocumentBuilderOptionsProvider(jsonApiContextMock.Object, httpContextAccessorMock.Object);
            var documentBuilderOptions = sut.GetDocumentBuilderOptions();

            Assert.Equal(omitsNulls, documentBuilderOptions.OmitNullValuedAttributes);
        }