/// <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> public static void CompareExpectedVsActualMessages(MessageItemCollection?expectedMessages, MessageItemCollection?actualMessages) { var exp = (from e in expectedMessages ?? new MessageItemCollection() where !(actualMessages ?? new MessageItemCollection()).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 ?? new MessageItemCollection()).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}"); } }
/// <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> /// Adds the messages to response trailers as a binary byte array. /// </summary> private static void AddMessagesToResponseTrailers(GrpcServiceBase service, MessageItemCollection?messages) { if (messages == null || messages.Count == 0) { return; } using var ms = new MemoryStream(); using var bdw = new BsonDataWriter(ms); var js = new JsonSerializer(); js.Serialize(bdw, new GrpcMessages { Messages = messages }); service.Context.ResponseTrailers.Add(GrpcConsts.MessagesHeaderName, ms.ToArray()); }
/// <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 void CompareExpectedVsActual(MessageItemCollection?expectedMessages, MessageItemCollection?actualMessages) => _test.CompareExpectedVsActual(expectedMessages, actualMessages);