private static void PopulateFullJsonSerializerSettingsTestBuilder(
            this IJsonTestBuilder jsonTestBuilder,
            IJsonSerializerSettingsTestBuilder jsonSerializerSettingsTestBuilder,
            JsonSerializerSettings jsonSerializerSettings = null)
        {
            var actualBuilder = (JsonTestBuilder)jsonTestBuilder;

            jsonSerializerSettings = jsonSerializerSettings
                                     ?? actualBuilder.GetServiceDefaultSerializerSettings()
                                     ?? new JsonSerializerSettings();

            jsonSerializerSettingsTestBuilder
            .WithCulture(jsonSerializerSettings.Culture)
            .WithContractResolverOfType(jsonSerializerSettings.ContractResolver?.GetType())
            .WithConstructorHandling(jsonSerializerSettings.ConstructorHandling)
            .WithDateFormatHandling(jsonSerializerSettings.DateFormatHandling)
            .WithDateParseHandling(jsonSerializerSettings.DateParseHandling)
            .WithDateTimeZoneHandling(jsonSerializerSettings.DateTimeZoneHandling)
            .WithDefaultValueHandling(jsonSerializerSettings.DefaultValueHandling)
            .WithFormatting(jsonSerializerSettings.Formatting)
            .WithMaxDepth(jsonSerializerSettings.MaxDepth)
            .WithMissingMemberHandling(jsonSerializerSettings.MissingMemberHandling)
            .WithNullValueHandling(jsonSerializerSettings.NullValueHandling)
            .WithObjectCreationHandling(jsonSerializerSettings.ObjectCreationHandling)
            .WithPreserveReferencesHandling(jsonSerializerSettings.PreserveReferencesHandling)
            .WithReferenceLoopHandling(jsonSerializerSettings.ReferenceLoopHandling)
            .WithTypeNameAssemblyFormatHandling(jsonSerializerSettings.TypeNameAssemblyFormatHandling)
            .WithTypeNameHandling(jsonSerializerSettings.TypeNameHandling);
        }
        /// <summary>
        /// Tests whether the <see cref="Microsoft.AspNetCore.Mvc.JsonResult"/>
        /// has <see cref="JsonSerializerSettings"/> by using builder.
        /// </summary>
        /// <param name="jsonTestBuilder">
        /// Instance of <see cref="IJsonTestBuilder"/> type.
        /// </param>
        /// <param name="jsonSerializerSettingsBuilder">Builder for testing <see cref="JsonSerializerSettings"/>.</param>
        /// <returns>The same <see cref="IAndJsonTestBuilder"/>.</returns>
        public static IAndJsonTestBuilder WithJsonSerializerSettings(
            this IJsonTestBuilder jsonTestBuilder,
            Action <IJsonSerializerSettingsTestBuilder> jsonSerializerSettingsBuilder)
        {
            var actualBuilder = (JsonTestBuilder)jsonTestBuilder;

            var actualJsonSerializerSettings = actualBuilder.GetJsonResult().SerializerSettings
                                               ?? actualBuilder.GetServiceDefaultSerializerSettings()
                                               ?? new JsonSerializerSettings();

            var newJsonSerializerSettingsTestBuilder = new JsonSerializerSettingsTestBuilder(
                actualBuilder.TestContext as ControllerTestContext);

            jsonSerializerSettingsBuilder(newJsonSerializerSettingsTestBuilder);
            var expectedJsonSerializerSettings = newJsonSerializerSettingsTestBuilder.GetJsonSerializerSettings();

            var validations = newJsonSerializerSettingsTestBuilder.GetJsonSerializerSettingsValidations();

            validations.ForEach(v => v(expectedJsonSerializerSettings, actualJsonSerializerSettings));

            return(actualBuilder);
        }
 /// <summary>
 /// Tests whether the <see cref="Microsoft.AspNetCore.Mvc.JsonResult"/>
 /// has the provided <see cref="JsonSerializerSettings"/>.
 /// </summary>
 /// <param name="jsonTestBuilder">
 /// Instance of <see cref="IJsonTestBuilder"/> type.
 /// </param>
 /// <param name="jsonSerializerSettings">Expected <see cref="JsonSerializerSettings"/> to test with.</param>
 /// <returns>The same <see cref="IAndJsonTestBuilder"/>.</returns>
 public static IAndJsonTestBuilder WithJsonSerializerSettings(
     this IJsonTestBuilder jsonTestBuilder,
     JsonSerializerSettings jsonSerializerSettings)
 => jsonTestBuilder
 .WithJsonSerializerSettings(s => jsonTestBuilder
                             .PopulateFullJsonSerializerSettingsTestBuilder(s, jsonSerializerSettings));