Summary

Class:WireMock.Matchers.Request.RequestMessageParamMatcher
Assembly:WireMock.Net
File(s):C:\Users\Stef\Documents\GitHub\WireMock.Net\src\WireMock.Net\Matchers\Request\RequestMessageParamMatcher.cs
Covered lines:26
Uncovered lines:0
Coverable lines:26
Total lines:85
Line coverage:100%
Branch coverage:100%

Metrics

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

File(s)

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

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using JetBrains.Annotations;
 5using WireMock.Util;
 6using WireMock.Validation;
 7
 8namespace WireMock.Matchers.Request
 9{
 10    /// <summary>
 11    /// The request parameters matcher.
 12    /// </summary>
 13    public class RequestMessageParamMatcher : IRequestMatcher
 14    {
 15        /// <summary>
 16        /// The funcs
 17        /// </summary>
 518        public Func<IDictionary<string, WireMockList<string>>, bool>[] Funcs { get; }
 19
 20        /// <summary>
 21        /// The key
 22        /// </summary>
 323        public string Key { get; }
 24
 25        /// <summary>
 26        /// The values
 27        /// </summary>
 528        public IEnumerable<string> Values { get; }
 29
 30        /// <summary>
 31        /// Initializes a new instance of the <see cref="RequestMessageParamMatcher"/> class.
 32        /// </summary>
 33        /// <param name="key">
 34        /// The key.
 35        /// </param>
 36        /// <param name="values">
 37        /// The values.
 38        /// </param>
 339        public RequestMessageParamMatcher([NotNull] string key, [CanBeNull] IEnumerable<string> values)
 340        {
 341            Check.NotNull(key, nameof(key));
 42
 343            Key = key;
 344            Values = values;
 345        }
 46
 47        /// <summary>
 48        /// Initializes a new instance of the <see cref="RequestMessageParamMatcher"/> class.
 49        /// </summary>
 50        /// <param name="funcs">The funcs.</param>
 151        public RequestMessageParamMatcher([NotNull] params Func<IDictionary<string, WireMockList<string>>, bool>[] funcs
 152        {
 153            Check.NotNull(funcs, nameof(funcs));
 154            Funcs = funcs;
 155        }
 56
 57        /// <summary>
 58        /// Determines whether the specified RequestMessage is match.
 59        /// </summary>
 60        /// <param name="requestMessage">The RequestMessage.</param>
 61        /// <param name="requestMatchResult">The RequestMatchResult.</param>
 62        /// <returns>
 63        /// A value between 0.0 - 1.0 of the similarity.
 64        /// </returns>
 65        public double GetMatchingScore(RequestMessage requestMessage, RequestMatchResult requestMatchResult)
 466        {
 467            double score = IsMatch(requestMessage);
 468            requestMatchResult.TotalScore += score;
 69
 470            requestMatchResult.TotalNumber++;
 71
 472            return score;
 473        }
 74
 75        private double IsMatch(RequestMessage requestMessage)
 476        {
 477             if (Funcs != null)
 278                return MatchScores.ToScore(requestMessage.Query != null && Funcs.Any(f => f(requestMessage.Query)));
 79
 380            List<string> values = requestMessage.GetParameter(Key);
 81
 382             return MatchScores.ToScore(values?.Intersect(Values).Count() == Values.Count());
 483        }
 84    }
 85}