Summary

Class:WireMock.Matchers.Request.RequestMessageHeaderMatcher
Assembly:WireMock.Net
File(s):C:\Users\Stef\Documents\GitHub\WireMock.Net\src\WireMock.Net\Matchers\Request\RequestMessageHeaderMatcher.cs
Covered lines:24
Uncovered lines:16
Coverable lines:40
Total lines:105
Line coverage:60%
Branch coverage:50%

Metrics

MethodCyclomatic complexity  NPath complexity  Sequence coverage  Branch coverage  
.ctor(...)10100100
.ctor(...)1000
.ctor(...)1000
GetMatchingScore(...)10100100
IsMatch(...)51666.6755.56

File(s)

C:\Users\Stef\Documents\GitHub\WireMock.Net\src\WireMock.Net\Matchers\Request\RequestMessageHeaderMatcher.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using JetBrains.Annotations;
 5using WireMock.Validation;
 6
 7namespace WireMock.Matchers.Request
 8{
 9    /// <summary>
 10    /// The request header matcher.
 11    /// </summary>
 12    public class RequestMessageHeaderMatcher : IRequestMatcher
 13    {
 14        /// <summary>
 15        /// The functions
 16        /// </summary>
 417        public Func<IDictionary<string, string>, bool>[] Funcs { get; }
 18
 19        /// <summary>
 20        /// The name
 21        /// </summary>
 822        public string Name { get; }
 23
 24        /// <value>
 25        /// The matchers.
 26        /// </value>
 827        public IMatcher[] Matchers { get; }
 28
 29        /// <summary>
 30        /// Initializes a new instance of the <see cref="RequestMessageHeaderMatcher"/> class.
 31        /// </summary>
 32        /// <param name="name">The name.</param>
 33        /// <param name="pattern">The pattern.</param>
 34        /// <param name="ignoreCase">The ignoreCase.</param>
 435        public RequestMessageHeaderMatcher([NotNull] string name, [NotNull] string pattern, bool ignoreCase = true)
 436        {
 437            Check.NotNull(name, nameof(name));
 438            Check.NotNull(pattern, nameof(pattern));
 39
 440            Name = name;
 441            Matchers = new IMatcher[] { new WildcardMatcher(pattern, ignoreCase) };
 442        }
 43
 44        /// <summary>
 45        /// Initializes a new instance of the <see cref="RequestMessageHeaderMatcher"/> class.
 46        /// </summary>
 47        /// <param name="name">The name.</param>
 48        /// <param name="matchers">The matchers.</param>
 049        public RequestMessageHeaderMatcher([NotNull] string name, [NotNull] params IMatcher[] matchers)
 050        {
 051            Check.NotNull(name, nameof(name));
 052            Check.NotNull(matchers, nameof(matchers));
 53
 054            Name = name;
 055            Matchers = matchers;
 056        }
 57
 58        /// <summary>
 59        /// Initializes a new instance of the <see cref="RequestMessageHeaderMatcher"/> class.
 60        /// </summary>
 61        /// <param name="funcs">The funcs.</param>
 062        public RequestMessageHeaderMatcher([NotNull] params Func<IDictionary<string, string>, bool>[] funcs)
 063        {
 064            Check.NotNull(funcs, nameof(funcs));
 65
 066            Funcs = funcs;
 067        }
 68
 69        /// <summary>
 70        /// Determines whether the specified RequestMessage is match.
 71        /// </summary>
 72        /// <param name="requestMessage">The RequestMessage.</param>
 73        /// <param name="requestMatchResult">The RequestMatchResult.</param>
 74        /// <returns>
 75        /// A value between 0.0 - 1.0 of the similarity.
 76        /// </returns>
 77        public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult)
 478        {
 479            double score = IsMatch(requestMessage);
 480            requestMatchResult.TotalScore += score;
 81
 482            requestMatchResult.TotalNumber++;
 83
 484            return score;
 485        }
 86
 87        private double IsMatch(RequestMessage requestMessage)
 488        {
 489             if (requestMessage.Headers == null)
 090                return MatchScores.Mismatch;
 91
 492             if (Funcs != null)
 093                return MatchScores.ToScore(Funcs.Any(f => f(requestMessage.Headers)));
 94
 495             if (Matchers == null)
 096                return MatchScores.Mismatch;
 97
 498             if (!requestMessage.Headers.ContainsKey(Name))
 099                return MatchScores.Mismatch;
 100
 4101            string value = requestMessage.Headers[Name];
 8102            return Matchers.Max(m => m.IsMatch(value));
 4103        }
 104    }
 105}