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); }