Summary

Class:WireMock.Transformers.HandleBarsLinq
Assembly:WireMock.Net
File(s):C:\Users\StefHeyenrath\Documents\GitHub\WireMock.Net\src\WireMock.Net\Transformers\HandleBarsLinq.cs
Covered lines:48
Uncovered lines:0
Coverable lines:48
Total lines:86
Line coverage:100%
Branch coverage:92.8%

Metrics

MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
Register()0011
ExecuteDynamicLinq(...)0010
ParseArguments(...)0010.9

File(s)

C:\Users\StefHeyenrath\Documents\GitHub\WireMock.Net\src\WireMock.Net\Transformers\HandleBarsLinq.cs

#LineLine coverage
 1using System;
 2using System.Linq;
 3using System.Linq.Dynamic.Core;
 4using System.Linq.Dynamic.Core.Exceptions;
 5using HandlebarsDotNet;
 6using Newtonsoft.Json.Linq;
 7using WireMock.Util;
 8using WireMock.Validation;
 9
 10namespace WireMock.Transformers
 11{
 12    internal static class HandleBarsLinq
 13    {
 14        public static void Register()
 115        {
 116            Handlebars.RegisterHelper("Linq", (writer, context, arguments) =>
 817            {
 818                (JToken valueToProcess, string linqStatement) = ParseArguments(arguments);
 119
 120                try
 521                {
 522                    object result = ExecuteDynamicLinq(valueToProcess, linqStatement);
 423                    writer.WriteSafeString(result);
 424                }
 225                catch (ParseException)
 226                {
 127                    // Ignore ParseException
 228                }
 529            });
 30
 131            Handlebars.RegisterHelper("Linq", (writer, options, context, arguments) =>
 332            {
 333                (JToken valueToProcess, string linqStatement) = ParseArguments(arguments);
 134
 135                try
 336                {
 337                    var result = ExecuteDynamicLinq(valueToProcess, linqStatement);
 238                    options.Template(writer, result);
 239                }
 240                catch (ParseException)
 241                {
 142                    // Ignore ParseException
 243                }
 344            });
 145        }
 46
 47        private static dynamic ExecuteDynamicLinq(JToken value, string linqStatement)
 648        {
 49            // Convert a single object to a Queryable JObject-list with 1 entry.
 650            var queryable1 = new[] { value }.AsQueryable();
 51
 52            // Generate the DynamicLinq select statement.
 653            string dynamicSelect = JsonUtils.GenerateDynamicLinqStatement(value);
 54
 55            // Execute DynamicLinq Select statement.
 656            var queryable2 = queryable1.Select(dynamicSelect);
 57
 58            // Execute the Select(...) method and get first result with FirstOrDefault().
 659            return queryable2.Select(linqStatement).FirstOrDefault();
 460        }
 61
 62        private static (JToken valueToProcess, string linqStatement) ParseArguments(object[] arguments)
 963        {
 1864            Check.Condition(arguments, args => args.Length == 2, nameof(arguments));
 865            Check.NotNull(arguments[0], "arguments[0]");
 766            Check.NotNullOrEmpty(arguments[1] as string, "arguments[1]");
 67
 68            JToken valueToProcess;
 769            switch (arguments[0])
 70            {
 71                case string jsonAsString:
 172                    valueToProcess = new JValue(jsonAsString);
 173                    break;
 74
 75                case JToken jsonAsJObject:
 576                    valueToProcess = jsonAsJObject;
 577                    break;
 78
 79                default:
 180                    throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' c
 81            }
 82
 683            return (valueToProcess, (string) arguments[1]);
 684        }
 85    }
 86}