Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
StefH authored Aug 23, 2018
1 parent e6ecf5c commit f8d22d4
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 10 deletions.
11 changes: 8 additions & 3 deletions src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ namespace WireMock.Matchers.Request
public class RequestMessageCookieMatcher : IRequestMatcher
{
private readonly MatchBehaviour _matchBehaviour;
private readonly bool _ignoreCase;

/// <value>
/// The funcs.
Expand Down Expand Up @@ -41,6 +42,7 @@ public RequestMessageCookieMatcher(MatchBehaviour matchBehaviour, [NotNull] stri
Check.NotNull(pattern, nameof(pattern));

_matchBehaviour = matchBehaviour;
_ignoreCase = ignoreCase;
Name = name;
Matchers = new IStringMatcher[] { new WildcardMatcher(matchBehaviour, pattern, ignoreCase) };
}
Expand Down Expand Up @@ -84,22 +86,25 @@ private double IsMatch(RequestMessage requestMessage)
return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch);
}

// Check if we want to use IgnoreCase to compare the Cookie-Name and Cookie-Value
var cookies = !_ignoreCase ? requestMessage.Cookies : new Dictionary<string, string>(requestMessage.Cookies, StringComparer.OrdinalIgnoreCase);

if (Funcs != null)
{
return MatchScores.ToScore(Funcs.Any(f => f(requestMessage.Cookies)));
return MatchScores.ToScore(Funcs.Any(f => f(cookies)));
}

if (Matchers == null)
{
return MatchScores.Mismatch;
}

if (!requestMessage.Cookies.ContainsKey(Name))
if (!cookies.ContainsKey(Name))
{
return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch);
}

string value = requestMessage.Cookies[Name];
string value = cookies[Name];
return Matchers.Max(m => m.IsMatch(value));
}
}
Expand Down
12 changes: 9 additions & 3 deletions src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace WireMock.Matchers.Request
public class RequestMessageHeaderMatcher : IRequestMatcher
{
private readonly MatchBehaviour _matchBehaviour;
private readonly bool _ignoreCase;

/// <summary>
/// The functions
Expand Down Expand Up @@ -43,6 +44,7 @@ public RequestMessageHeaderMatcher(MatchBehaviour matchBehaviour, [NotNull] stri
Check.NotNull(pattern, nameof(pattern));

_matchBehaviour = matchBehaviour;
_ignoreCase = ignoreCase;
Name = name;
Matchers = new IStringMatcher[] { new WildcardMatcher(matchBehaviour, pattern, ignoreCase) };
}
Expand All @@ -60,6 +62,7 @@ public RequestMessageHeaderMatcher(MatchBehaviour matchBehaviour, [NotNull] stri
Check.NotNull(patterns, nameof(patterns));

_matchBehaviour = matchBehaviour;
_ignoreCase = ignoreCase;
Name = name;
Matchers = patterns.Select(pattern => new WildcardMatcher(matchBehaviour, pattern, ignoreCase)).Cast<IStringMatcher>().ToArray();
}
Expand Down Expand Up @@ -103,22 +106,25 @@ private double IsMatch(RequestMessage requestMessage)
return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch);
}

// Check if we want to use IgnoreCase to compare the Header-Name and Header-Value(s)
var headers = !_ignoreCase ? requestMessage.Headers : new Dictionary<string, WireMockList<string>>(requestMessage.Headers, StringComparer.OrdinalIgnoreCase);

if (Funcs != null)
{
return MatchScores.ToScore(Funcs.Any(f => f(requestMessage.Headers.ToDictionary(entry => entry.Key, entry => entry.Value.ToArray()))));
return MatchScores.ToScore(Funcs.Any(f => f(headers.ToDictionary(entry => entry.Key, entry => entry.Value.ToArray()))));
}

if (Matchers == null)
{
return MatchScores.Mismatch;
}

if (!requestMessage.Headers.ContainsKey(Name))
if (!headers.ContainsKey(Name))
{
return MatchBehaviourHelper.Convert(_matchBehaviour, MatchScores.Mismatch);
}

WireMockList<string> list = requestMessage.Headers[Name];
WireMockList<string> list = headers[Name];
return Matchers.Max(m => list.Max(value => m.IsMatch(value))); // TODO : is this correct ?
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using NFluent;
using WireMock.Matchers;
using WireMock.Matchers.Request;
Expand Down Expand Up @@ -134,5 +133,37 @@ public void RequestMessageCookieMatcher_GetMatchingScore_Func_Match()
// Assert
Check.That(score).IsEqualTo(1.0d);
}

[Fact]
public void RequestMessageCookieMatcher_GetMatchingScore_CaseIgnoreForCookieValue()
{
// Assign
var cookies = new Dictionary<string, string> { { "cook", "teST" } };
var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies);
var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "cook", "test", true);

// Act
var result = new RequestMatchResult();
double score = matcher.GetMatchingScore(requestMessage, result);

// Assert
Check.That(score).IsEqualTo(1.0d);
}

[Fact]
public void RequestMessageCookieMatcher_GetMatchingScore_CaseIgnoreForCookieName()
{
// Assign
var cookies = new Dictionary<string, string> { { "cook", "teST" } };
var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, null, cookies);
var matcher = new RequestMessageCookieMatcher(MatchBehaviour.AcceptOnMatch, "CooK", "test", true);

// Act
var result = new RequestMatchResult();
double score = matcher.GetMatchingScore(requestMessage, result);

// Assert
Check.That(score).IsEqualTo(1.0d);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using NFluent;
using WireMock.Matchers;
using WireMock.Matchers.Request;
Expand Down Expand Up @@ -134,5 +133,37 @@ public void RequestMessageHeaderMatcher_GetMatchingScore_Func_Match()
// Assert
Check.That(score).IsEqualTo(1.0d);
}

[Fact]
public void RequestMessageHeaderMatcher_GetMatchingScore_CaseIgnoreForHeaderValue()
{
// Assign
var headers = new Dictionary<string, string[]> { { "h", new[] { "teST" } } };
var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, headers);
var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, "h", "test", true);

// Act
var result = new RequestMatchResult();
double score = matcher.GetMatchingScore(requestMessage, result);

// Assert
Check.That(score).IsEqualTo(1.0d);
}

[Fact]
public void RequestMessageHeaderMatcher_GetMatchingScore_CaseIgnoreForHeaderName()
{
// Assign
var headers = new Dictionary<string, string[]> { { "teST", new[] { "x" } } };
var requestMessage = new RequestMessage(new UrlDetails("http://localhost"), "GET", "127.0.0.1", null, headers);
var matcher = new RequestMessageHeaderMatcher(MatchBehaviour.AcceptOnMatch, "TEST", "x", true);

// Act
var result = new RequestMatchResult();
double score = matcher.GetMatchingScore(requestMessage, result);

// Assert
Check.That(score).IsEqualTo(1.0d);
}
}
}

0 comments on commit f8d22d4

Please sign in to comment.