From c92183558b444b3e6ba308ad4be5fa7d02e58c41 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Fri, 23 Jun 2023 15:20:57 +0200 Subject: [PATCH] Fixed logic for FluentAssertions WithHeader (#959) --- .../Assertions/WireMockAssertions.cs | 6 ++-- .../WireMockAssertionsTests.cs | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.cs b/src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.cs index cb170987..93759edf 100644 --- a/src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.cs +++ b/src/WireMock.Net.FluentAssertions/Assertions/WireMockAssertions.cs @@ -149,15 +149,15 @@ public class WireMockAssertions using (new AssertionScope($"header \"{expectedKey}\" from requests sent with value(s)")) { - var headerValues = _headers.First(h => h.Key == expectedKey).Value; + var matchingHeaderValues = _headers.Where(h => h.Key == expectedKey).SelectMany(h => h.Value.ToArray()).ToArray(); if (expectedValues.Length == 1) { - headerValues.Should().Contain(expectedValues.First(), because, becauseArgs); + matchingHeaderValues.Should().Contain(expectedValues.First(), because, becauseArgs); } else { - var trimmedHeaderValues = string.Join(",", headerValues.Select(x => x)).Split(',').Select(x => x.Trim()).ToList(); + var trimmedHeaderValues = string.Join(",", matchingHeaderValues.Select(x => x)).Split(',').Select(x => x.Trim()).ToList(); foreach (var expectedValue in expectedValues) { trimmedHeaderValues.Should().Contain(expectedValue, because, becauseArgs); diff --git a/test/WireMock.Net.Tests/FluentAssertions/WireMockAssertionsTests.cs b/test/WireMock.Net.Tests/FluentAssertions/WireMockAssertionsTests.cs index 90b96855..28f651bc 100644 --- a/test/WireMock.Net.Tests/FluentAssertions/WireMockAssertionsTests.cs +++ b/test/WireMock.Net.Tests/FluentAssertions/WireMockAssertionsTests.cs @@ -210,6 +210,36 @@ public class WireMockAssertionsTests : IDisposable .Be($"{string.Join(NewLine, missingValue1Message, missingValue2Message)}{NewLine}"); } + [Fact] + public async Task HaveReceivedACall_WithHeader_ShouldCheckAllRequests() + { + // Arrange + using var server = WireMockServer.Start(); + using var client = server.CreateClient(); + + // Act 1 + await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/") + { + Headers = + { + Authorization = new AuthenticationHeaderValue("Bearer", "invalidToken") + } + }); + + // Act 2 + await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "/") + { + Headers = + { + Authorization = new AuthenticationHeaderValue("Bearer", "validToken") + } + }); + + // Assert + server.Should().HaveReceivedACall().WithHeader("Authorization", "Bearer invalidToken"); + server.Should().HaveReceivedACall().WithHeader("Authorization", "Bearer validToken"); + } + [Fact] public async Task HaveReceivedACall_AtUrl_WhenACallWasMadeToUrl_Should_BeOK() {