< Summary - Code Coverage

Information
Class: Plainquire.Filter.Mvc.ModelBinders.EntityFilterSetModelBinder
Assembly: Plainquire.Filter.Mvc
File(s): /home/runner/work/plainquire/plainquire/Plainquire.Filter/Plainquire.Filter.Mvc/ModelBinders/EntityFilterSetModelBinder.cs
Tag: 76_26890829585
Line coverage
94%
Covered lines: 18
Uncovered lines: 1
Coverable lines: 19
Total lines: 53
Line coverage: 94.7%
Branch coverage
66%
Covered branches: 4
Total branches: 6
Branch coverage: 66.6%
Method coverage
100%
Covered methods: 2
Total methods: 2
Method coverage: 100%

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
BindModelAsync()66.66%6694.44%

File(s)

/home/runner/work/plainquire/plainquire/Plainquire.Filter/Plainquire.Filter.Mvc/ModelBinders/EntityFilterSetModelBinder.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Mvc.ModelBinding;
 2using System;
 3using System.Collections.Generic;
 4using System.Threading.Tasks;
 5
 6namespace Plainquire.Filter.Mvc.ModelBinders;
 7
 8/// <summary>
 9/// ModelBinder for <see cref="EntityFilter{TEntity}"/>
 10/// Implements <see cref="IModelBinder" />
 11/// </summary>
 12/// <seealso cref="IModelBinder" />
 13public class EntityFilterSetModelBinder : IModelBinder
 14{
 15    private readonly IDictionary<Type, (ModelMetadata, IModelBinder)> _entityFilterBinders;
 16
 17    /// <summary>
 18    /// Initializes a new instance of the <see cref="EntityFilterSetModelBinder"/> class.
 19    /// </summary>
 20    /// <param name="entityFilterBinders">The entity filter binders.</param>
 21    /// <autogeneratedoc />
 22    public EntityFilterSetModelBinder(IDictionary<Type, (ModelMetadata, IModelBinder)> entityFilterBinders)
 223        => this._entityFilterBinders = entityFilterBinders;
 24
 25    /// <inheritdoc />
 26    public async Task BindModelAsync(ModelBindingContext bindingContext)
 27    {
 228        if (bindingContext == null)
 029            throw new ArgumentNullException(nameof(bindingContext));
 30
 231        var entityFilterSet = Activator.CreateInstance(bindingContext.ModelType)
 232            ?? throw new InvalidOperationException($"Cannot create instance of filter set '{bindingContext.ModelType.Nam
 33
 234        var entityFilterProperties = entityFilterSet.GetType().GetProperties();
 835        foreach (var entityFilter in entityFilterProperties)
 36        {
 237            var (modelMetadata, modelBinder) = _entityFilterBinders[entityFilter.PropertyType];
 38
 239            var filterBindingContext = DefaultModelBindingContext.CreateBindingContext(
 240                bindingContext.ActionContext,
 241                bindingContext.ValueProvider,
 242                modelMetadata,
 243                bindingInfo: null,
 244                bindingContext.OriginalModelName);
 45
 246            await modelBinder.BindModelAsync(filterBindingContext);
 47
 248            entityFilter.SetValue(entityFilterSet, filterBindingContext.Result.Model);
 249        }
 50
 251        bindingContext.Result = ModelBindingResult.Success(entityFilterSet);
 252    }
 53}