Summary

Class:WireMock.Transformers.HandleBarsLinq
Assembly:WireMock.Net
File(s):C:\Users\azureuser\Documents\Github\WireMock.Net\src\WireMock.Net\Transformers\HandleBarsLinq.cs
Covered lines:50
Uncovered lines:0
Coverable lines:50
Total lines:88
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\azureuser\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 and return
 228                    return;
 129                }
 530            });
 31
 132            Handlebars.RegisterHelper("Linq", (writer, options, context, arguments) =>
 333            {
 334                (JToken valueToProcess, string linqStatement) = ParseArguments(arguments);
 135
 136                try
 337                {
 338                    var result = ExecuteDynamicLinq(valueToProcess, linqStatement);
 239                    options.Template(writer, result);
 240                }
 241                catch (ParseException)
 242                {
 143                    // Ignore ParseException and return
 244                    return;
 145                }
 346            });
 147        }
 48
 49        private static dynamic ExecuteDynamicLinq(JToken value, string linqStatement)
 650        {
 51            // Convert a single object to a Queryable JObject-list with 1 entry.
 652            var queryable1 = new[] { value }.AsQueryable();
 53
 54            // Generate the DynamicLinq select statement.
 655            string dynamicSelect = JsonUtils.GenerateDynamicLinqStatement(value);
 56
 57            // Execute DynamicLinq Select statement.
 658            var queryable2 = queryable1.Select(dynamicSelect);
 59
 60            // Execute the Select(...) method and get first result with FirstOrDefault().
 661            return queryable2.Select(linqStatement).FirstOrDefault();
 462        }
 63
 64        private static (JToken valueToProcess, string linqStatement) ParseArguments(object[] arguments)
 965        {
 1866            Check.Condition(arguments, args => args.Length == 2, nameof(arguments));
 867            Check.NotNull(arguments[0], "arguments[0]");
 768            Check.NotNullOrEmpty(arguments[1] as string, "arguments[1]");
 69
 70            JToken valueToProcess;
 771            switch (arguments[0])
 72            {
 73                case string jsonAsString:
 174                    valueToProcess = new JValue(jsonAsString);
 175                    break;
 76
 77                case JToken jsonAsJObject:
 578                    valueToProcess = jsonAsJObject;
 579                    break;
 80
 81                default:
 182                    throw new NotSupportedException($"The value '{arguments[0]}' with type '{arguments[0]?.GetType()}' c
 83            }
 84
 685            return (valueToProcess, arguments[1] as string);
 686        }
 87    }
 88}