public async Task ThrowsAsync(Func <Task> func, MessageItemCollection messages) { if (func == null) { throw new ArgumentNullException(nameof(func)); } if (messages == null) { throw new ArgumentNullException(nameof(messages)); } try { await func().ConfigureAwait(false); Assert.Fail("A ValidationException is expected."); } catch (AggregateException aex) { if (aex.InnerException is ValidationException vex) { CompareExpectedVsActual(messages, vex.Messages); } else { throw; } } catch (ValidationException vex) { CompareExpectedVsActual(messages, vex); } }
/// <summary> /// Compares the expected versus actual messages and reports the differences. /// </summary> /// <param name="expectedMessages">The expected messages.</param> /// <param name="actualMessages">The actual messages.</param> static public void CompareExpectedVsActual(MessageItemCollection expectedMessages, MessageItemCollection actualMessages) { var exp = (from e in expectedMessages ?? new MessageItemCollection() where !actualMessages.Any(a => a.Type == e.Type && a.Text == e.Text && (e.Property == null || a.Property == e.Property)) select e).ToList(); var act = (from a in actualMessages ?? new MessageItemCollection() where !expectedMessages.Any(e => a.Type == e.Type && a.Text == e.Text && (e.Property == null || a.Property == e.Property)) select a).ToList(); var sb = new StringBuilder(); if (exp.Count > 0) { sb.AppendLine(" Expected messages not matched:"); exp.ForEach(m => sb.AppendLine($" {m.Type}: {m.Text} {(m.Property != null ? $"[{m.Property}]" : null)}")); } if (act.Count > 0) { sb.AppendLine(" Actual messages not matched:"); act.ForEach(m => sb.AppendLine($" {m.Type}: {m.Text} {(m.Property != null ? $"[{m.Property}]" : null)}")); } if (sb.Length > 0) { Assert.Fail($"Messages mismatch:{System.Environment.NewLine}{sb.ToString()}"); } }
public static void Throws(Func <Task> func, MessageItemCollection messages) { if (func == null) { throw new ArgumentNullException(nameof(func)); } if (messages == null) { throw new ArgumentNullException(nameof(messages)); } try { func().Wait(); Assert.Fail("A ValidationException is expected."); } catch (AggregateException aex) { if (aex.InnerException is ValidationException vex) { CompareExpectedVsActual(messages, vex.Messages); } else { throw; } } catch (ValidationException vex) { CompareExpectedVsActual(messages, vex); } }
/// <summary> /// Runs the <paramref name="func"/> asynchonously expecting it to fail with a <see cref="ValidationException"/> containing the passed <paramref name="messages"/>. /// </summary> /// <param name="func">The function to execute.</param> /// <param name="messages">The <see cref="MessageItemCollection"/> collection.</param> /// <returns>The corresponding <see cref="Task"/>.</returns> /// <remarks>Will only check the <see cref="MessageItem.Property"/> where specified (not <c>null</c>).</remarks> public static void Run(Func <Task> func, MessageItemCollection messages) { Check.NotNull(func, nameof(func)); Check.NotNull(messages, nameof(messages)); try { func().Wait(); Assert.Fail("A ValidationException is expected."); } catch (AggregateException aex) { if (aex.InnerException is ValidationException vex) { CompareExpectedVsActual(messages, vex.Messages); } else { throw; } } catch (ValidationException vex) { CompareExpectedVsActual(messages, vex); } }
/// <summary> /// Compares the expected vs. actual messages and reports the differences. /// </summary> /// <param name="expectedMessages">The expected messages.</param> /// <param name="vex">The validation exception.</param> static public void CompareExpectedVsActual(MessageItemCollection expectedMessages, ValidationException vex) { if (vex == null) { throw new ArgumentNullException(nameof(vex)); } CompareExpectedVsActual(expectedMessages, vex.Messages); }
/// <summary> /// Expect a response with the specified messages. /// </summary> /// <param name="messages">The <see cref="MessageItemCollection"/> collection.</param> /// <returns>The <see cref="AgentTester"/> instance to support fluent/chaining usage.</returns> /// <remarks>Will only check the <see cref="MessageItem.Property"/> where specified (not <c>null</c>).</remarks> protected void SetExpectMessages(MessageItemCollection messages) { Check.NotNull(messages, nameof(messages)); if (_expectedMessages == null) { _expectedMessages = new MessageItemCollection(); } _expectedMessages.AddRange(messages); }
/// <summary> /// Runs the <paramref name="func"/> asynchonously expecting it to fail with a <see cref="ValidationException"/> containing the passed <paramref name="messages"/>. /// </summary> /// <param name="func">The function to execute.</param> /// <param name="messages">The expected <see cref="MessageType.Error">error</see> message texts.</param> /// <returns>The corresponding <see cref="Task"/>.</returns> public static Task RunAsync(Func <Task> func, params string[] messages) { var mic = new MessageItemCollection(); foreach (var text in messages) { mic.AddError(text); } return(RunAsync(func, mic)); }
/// <summary> /// Creates a deep copy of the <see cref="MessageItemCollection"/>. /// </summary> /// <returns>A deep copy of the <see cref="MessageItemCollection"/>.</returns> public override object Clone() { MessageItemCollection clone = new MessageItemCollection(); foreach (MessageItem item in this) { clone.Add((MessageItem)item.Clone()); } return(clone); }
/// <summary> /// Expect the specified messages. /// </summary> /// <param name="messages">The <see cref="MessageItemCollection"/> collection.</param> /// <remarks>Will only check the <see cref="MessageItem.Property"/> where specified (not <c>null</c>).</remarks> /// <returns>The <see cref="ValidationTester"/> instance to support fluent/chaining usage.</returns> public ValidationTester ExpectMessages(MessageItemCollection messages) { Check.NotNull(messages, nameof(messages)); if (_expectedMessages == null) { _expectedMessages = new MessageItemCollection(); } _expectedMessages.AddRange(messages); return(this); }
/// <summary> /// Expect a response with the specified <see cref="MessageType.Error"/> messages. /// </summary> /// <param name="messages">An array of expected <see cref="MessageType.Error"/> message texts.</param> /// <returns>The <see cref="AgentTester"/> instance to support fluent/chaining usage.</returns> protected void SetExpectMessages(params string[] messages) { var mic = new MessageItemCollection(); foreach (var text in messages) { mic.AddError(text); } SetExpectMessages(mic); }
public static void Throws(Func <Task> func, params string[] messages) { var mic = new MessageItemCollection(); foreach (var text in messages) { mic.AddError(text); } Throws(func, mic); }
public static void Throws(Action action, params string[] messages) { var mic = new MessageItemCollection(); foreach (var text in messages) { mic.AddError(text); } Throws(action, mic); }
/// <summary> /// Sets the <see cref="HttpResponse.Headers"/> for the <see cref="MessageItemCollection"/>. /// </summary> /// <param name="response">The <see cref="HttpResponse"/>.</param> /// <param name="messages">The <see cref="MessageItemCollection"/>.</param> public static void SetMessages(HttpResponse response, MessageItemCollection messages) { if (response == null) { throw new ArgumentNullException(nameof(response)); } if (messages != null && messages.Count > 0) { response.Headers[WebApiConsts.MessagesHeaderName] = JsonConvert.SerializeObject(messages); } }
/// <summary> /// Expect the specified <see cref="MessageType.Error"/> messages. /// </summary> /// <param name="messages">An array of expected <see cref="MessageType.Error"/> message texts.</param> /// <returns>The <see cref="ValidationTester"/> instance to support fluent/chaining usage.</returns> public ValidationTester ExpectMessages(params string[] messages) { var mic = new MessageItemCollection(); foreach (var text in messages) { mic.AddError(text); } ExpectMessages(mic); return(this); }
/// <summary> /// Gets a new <see cref="MessageItemCollection"/> for a selected <see cref="MessageItem.Property"/>. /// </summary> /// <param name="property">The name of the property that the message relates to.</param> /// <returns>A new <see cref="MessageItemCollection"/>.</returns> public MessageItemCollection GetMessagesForProperty(string property) { MessageItemCollection msgs = new MessageItemCollection(); foreach (MessageItem item in this) { if (item.Property == property) { msgs.Add(item); } } return(msgs); }
/// <summary> /// Gets a new <see cref="MessageItemCollection"/> for a selected <see cref="MessageType"/>. /// </summary> /// <param name="type">Message validatorType.</param> /// <returns>A new <see cref="MessageItemCollection"/>.</returns> public MessageItemCollection GetMessagesForType(MessageType type) { MessageItemCollection msgs = new MessageItemCollection(); foreach (MessageItem item in this) { if (item.Type == type) { msgs.Add(item); } } return(msgs); }
public static void Throws(Action action, MessageItemCollection messages) { Check.NotNull(action, nameof(action)); Check.NotNull(messages, nameof(messages)); try { action?.Invoke(); Assert.Fail("A ValidationException is expected."); } catch (ValidationException vex) { CompareExpectedVsActual(messages, vex); } }
public virtual void SaveServerNotifyMessageCat(HttpContext context) { YZRequest request = new YZRequest(context); MessageCat messageCat = request.GetEnum <MessageCat>("messageCat"); JArray post = request.GetPostData <JArray>(); MessageItemCollection messageItems = post.ToObject <MessageItemCollection>(); using (BPMConnection cn = new BPMConnection()) { cn.WebOpen(); MessageGroupCollection messageGroups = NotifyManager.GetDefaultNotifyMessages(cn); messageGroups[messageCat.ToString()].MessageItems = messageItems; NotifyManager.SaveDefaultNotifyMessages(cn, messageGroups); } }
/// <summary> /// Merges a <see cref="MessageItemCollection"/> into this. /// </summary> /// <param name="messages">The <see cref="MessageItemCollection"/> to merge.</param> public void MergeResult(MessageItemCollection messages) { if (messages == null || messages.Count == 0) { return; } foreach (var mi in messages) { if (!string.IsNullOrEmpty(mi.Property) && mi.Type == MessageType.Error) { if (!HasError(mi.Property)) { _propertyErrors.Add(mi.Property, mi); } } Messages.Add(mi); } }
public static Task ThrowsAsync(Func <Task> func, params string[] messages) { if (func == null) { throw new ArgumentNullException(nameof(func)); } if (messages == null) { throw new ArgumentNullException(nameof(messages)); } var mic = new MessageItemCollection(); foreach (var text in messages) { mic.AddError(text); } return(ThrowsAsync(func, mic)); }
public static Task ThrowsAsync(Func <Task> func, MessageItemCollection messages) => _test.ThrowsAsync(func, messages);
public static void Throws(Action action, MessageItemCollection messages) => _test.Throws(action, messages);
/// <summary> /// Compares the expected vs. actual messages and reports the differences. /// </summary> /// <param name="expectedMessages">The expected messages.</param> /// <param name="vex">The validation exception.</param> static internal void CompareExpectedVsActual(MessageItemCollection expectedMessages, ValidationException vex) { Check.NotNull(vex, nameof(vex)); CompareExpectedVsActual(expectedMessages, vex.Messages); }
public static void Throws(Func <Task> func, MessageItemCollection messages) => _test.Throws(func, messages);
/// <summary> /// Expect a response with the specified messages. /// </summary> /// <param name="messages">The <see cref="MessageItemCollection"/> collection.</param> /// <returns>The <see cref="GrpcAgentTest{TStartup, TAgent, TValue}"/> instance to support fluent/chaining usage.</returns> /// <remarks>Will only check the <see cref="MessageItem.Property"/> where specified (not <c>null</c>).</remarks> public GrpcAgentTest <TStartup, TAgent, TValue> ExpectMessages(MessageItemCollection messages) { SetExpectMessages(messages); return(this); }
public static void CompareExpectedVsActual(MessageItemCollection expectedMessages, ValidationException vex) => _test.CompareExpectedVsActual(expectedMessages, vex);
/// <summary> /// Creates a <see cref="SubscriberStatus.InvalidData"/> <see cref="Result"/> from a set of <paramref name="messages"/>. /// </summary> /// <param name="messages">The <see cref="MessageItemCollection"/>.</param> /// <param name="resultHandlingOverride">The <see cref="ResultHandling"/> where overridding the default behaviour.</param> /// <returns>The <see cref="SubscriberStatus.InvalidData"/> <see cref="Result"/>.</returns> public static Result InvalidData(MessageItemCollection messages, ResultHandling?resultHandlingOverride = null) => new Result { Status = SubscriberStatus.InvalidData, Reason = Check.NotNull(messages, nameof(messages)).ToString(), ResultHandling = resultHandlingOverride };