public void ValidModelItem_BuildsLogEntry() { var server = new TestServerBuilder() .AddGraphType <LogTestController>() .Build(); var builder = server.CreateFieldContextBuilder <LogTestController>(nameof(LogTestController.ValidatableInputObject)); var context = builder.CreateExecutionContext(); // valid range 0 - 35 var item = new ValidatableObject() { Age = 18, }; var generator = new ModelStateGenerator(); var argumentToTest = CreateArgument("testItem", item); var dictionary = generator.CreateStateDictionary(argumentToTest); var entry = new ActionMethodModelStateValidatedLogEntry( builder.GraphMethod.Object, context.Request, dictionary); this.ValidateModelDictionaryToLogEntry(builder.GraphMethod.Object, context.Request, dictionary, entry); }
private void ValidateModelDictionaryToLogEntry( IGraphMethod graphMethod, IGraphFieldRequest fieldRequest, InputModelStateDictionary dictionary, ActionMethodModelStateValidatedLogEntry logEntry) { Assert.AreEqual(fieldRequest.Id, logEntry.PipelineRequestId); Assert.AreEqual(graphMethod.Parent.ObjectType.FriendlyName(true), logEntry.ControllerName); Assert.AreEqual(graphMethod.Name, logEntry.ActionName); Assert.AreEqual(dictionary.IsValid, logEntry.ModelDataIsValid); foreach (var kvp in dictionary) { var itemResult = kvp.Value; if (itemResult.ValidationState == InputModelValidationState.Invalid) { var entryResult = logEntry.ModelItems.Cast <ModelStateEntryLogItem>().First(x => itemResult.Name == x.Name); Assert.AreEqual(itemResult.Name, entryResult.Name); Assert.AreEqual(itemResult.ValidationState.ToString(), entryResult.ValidationState); var itemErrors = itemResult.Errors; var entryErrors = entryResult.Errors; if (itemErrors.Count == 0) { // log entry should skip the property if // no errors are recorded Assert.IsTrue(entryErrors == null); continue; } Assert.AreEqual(itemErrors.Count, entryErrors.Count); for (var i = 0; i < itemErrors.Count; i++) { var itemError = itemErrors[i]; var entryError = entryErrors[i] as ModelStateErrorLogItem; Assert.AreEqual(itemError.ErrorMessage, entryError.ErrorMessage); var itemException = itemError.Exception; var entryException = entryError.Exception as ExceptionLogItem; Assert.AreEqual(itemException == null, entryException == null); if (itemException != null) { Assert.AreEqual(itemException.Message, entryException.ExceptionMessage); Assert.AreEqual(itemException.StackTrace, entryException.StackTrace); Assert.AreEqual(itemException.GetType().FriendlyName(true), entryException.TypeName); } } } } }
/// <inheritdoc /> public virtual void ActionMethodModelStateValidated(IGraphMethod action, IDataRequest request, InputModelStateDictionary modelState) { if (!this.IsEnabled(LogLevel.Trace)) { return; } var entry = new ActionMethodModelStateValidatedLogEntry(action, request, modelState); this.LogEvent(LogLevel.Trace, entry); }