< Summary

Information
Class: Fluorite.Strainer.Services.Validation.FilterOperatorValidator
Assembly: Fluorite.Strainer
File(s): /builds/fluorite/strainer/src/Strainer/Services/Validation/FilterOperatorValidator.cs
Line coverage
100%
Covered lines: 36
Uncovered lines: 0
Coverable lines: 36
Total lines: 71
Line coverage: 100%
Branch coverage
100%
Covered branches: 16
Total branches: 16
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
Validate(...)100%44100%
Validate(...)100%1212100%

File(s)

/builds/fluorite/strainer/src/Strainer/Services/Validation/FilterOperatorValidator.cs

#LineLine coverage
 1using Fluorite.Strainer.Collections;
 2using Fluorite.Strainer.Models.Filtering.Operators;
 3using Fluorite.Strainer.Services.Filtering;
 4
 5namespace Fluorite.Strainer.Services.Validation;
 6
 7public class FilterOperatorValidator : IFilterOperatorValidator
 8{
 189    public FilterOperatorValidator()
 10    {
 11
 1812    }
 13
 14    public void Validate(IFilterOperator filterOperator)
 15    {
 16816        Guard.Against.Null(filterOperator);
 17
 16818        if (string.IsNullOrWhiteSpace(filterOperator.Symbol))
 19        {
 320            throw new InvalidOperationException(
 321                $"{nameof(IFilterOperator.Symbol)} for filter operator " +
 322                $"\"{filterOperator}\" cannot be null, empty or contain " +
 323                $"only whitespace characters.");
 24        }
 25
 16526        if (filterOperator.ExpressionProvider == null)
 27        {
 128            throw new InvalidOperationException(
 129                $"{nameof(IFilterOperator.ExpressionProvider)} for filter operator " +
 130                $"\"{filterOperator}\" cannot be null.");
 31        }
 16432    }
 33
 34    public void Validate(IEnumerable<IFilterOperator> filterOperators, IReadOnlySet<string> excludedBuiltInFilterOperato
 35    {
 1136        Guard.Against.Null(filterOperators);
 37
 1138        if (!filterOperators.Any())
 39        {
 140            return;
 41        }
 42
 34543        foreach (var @operator in filterOperators)
 44        {
 16345            Validate(@operator);
 46
 16347            if (excludedBuiltInFilterOperators.Contains(@operator.Symbol)
 16348                && FilterOperatorMapper.DefaultOperators.TryGetValue(@operator.Symbol, out var builtInOperator)
 16349                && ReferenceEquals(builtInOperator, @operator))
 50            {
 151                throw new InvalidOperationException(
 152                    $"Excluded built-in filter operator symbol {@operator.Symbol} detected in configuration values. " +
 153                    $"Please ensure that no such filter operators are supplied when marking them as excluded.");
 54            }
 55        }
 56
 957        var duplicatedSymbols = filterOperators
 16258            .GroupBy(f => f.Symbol)
 17059            .FirstOrDefault(g => g.Count() > 1);
 960        if (duplicatedSymbols != null)
 61        {
 162            throw new InvalidOperationException(
 163                $"More then one filter operator found with the same" +
 164                $"symbol: \"{duplicatedSymbols.Key}\". " +
 165                $"Symbol representing filter operator must be unique. " +
 166                $"Please remove or change symbol for either of operators. " +
 167                $"Conflicting filter operators:\n" +
 368                $"{string.Join(Environment.NewLine, duplicatedSymbols.Select(f => f.ToString()))}");
 69        }
 870    }
 71}