< Summary

Information
Class: Pozitron.QuerySpecification.RepositoryWithMapper<T>
Assembly: Pozitron.QuerySpecification.EntityFrameworkCore
File(s): /home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification.EntityFrameworkCore/RepositoryWithMapper.cs
Tag: 44_11195777782
Line coverage
100%
Covered lines: 32
Uncovered lines: 0
Coverable lines: 32
Total lines: 67
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
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%
.ctor(...)100%11100%
.ctor(...)100%11100%
.ctor(...)100%11100%
ProjectToFirstAsync()100%22100%
ProjectToFirstOrDefaultAsync()100%11100%
ProjectToListAsync()100%11100%
ProjectToListAsync()100%11100%

File(s)

/home/runner/work/QuerySpecification/QuerySpecification/src/QuerySpecification.EntityFrameworkCore/RepositoryWithMapper.cs

#LineLine coverage
 1namespace Pozitron.QuerySpecification;
 2
 3public abstract class RepositoryWithMapper<T> : RepositoryBase<T>, IProjectionRepository<T> where T : class
 4{
 515    private readonly PaginationSettings _paginationSettings = PaginationSettings.Default;
 6
 7    protected RepositoryWithMapper(DbContext dbContext)
 488        : base(dbContext)
 9    {
 4810    }
 11    protected RepositoryWithMapper(DbContext dbContext, SpecificationEvaluator specificationEvaluator)
 112        : base(dbContext, specificationEvaluator)
 13    {
 114    }
 15    protected RepositoryWithMapper(DbContext dbContext, PaginationSettings paginationSettings)
 116        : base(dbContext)
 17    {
 118        _paginationSettings = paginationSettings;
 119    }
 20    protected RepositoryWithMapper(DbContext dbContext, SpecificationEvaluator specificationEvaluator, PaginationSetting
 121        : base(dbContext, specificationEvaluator)
 22    {
 123        _paginationSettings = paginationSettings;
 124    }
 25
 26    protected abstract IQueryable<TResult> Map<TResult>(IQueryable<T> source);
 27
 28    public virtual async Task<TResult> ProjectToFirstAsync<TResult>(Specification<T> specification, CancellationToken ca
 29    {
 230        var query = GenerateQuery(specification).AsNoTracking();
 31
 232        var projectedQuery = Map<TResult>(query);
 33
 234        var result = await projectedQuery.FirstOrDefaultAsync(cancellationToken);
 35
 236        return result ?? throw new EntityNotFoundException(typeof(T).Name);
 137    }
 38    public virtual async Task<TResult?> ProjectToFirstOrDefaultAsync<TResult>(Specification<T> specification, Cancellati
 39    {
 240        var query = GenerateQuery(specification).AsNoTracking();
 41
 242        var projectedQuery = Map<TResult>(query);
 43
 244        return await projectedQuery.FirstOrDefaultAsync(cancellationToken);
 245    }
 46    public virtual async Task<List<TResult>> ProjectToListAsync<TResult>(Specification<T> specification, CancellationTok
 47    {
 148        var query = GenerateQuery(specification).AsNoTracking();
 49
 150        var projectedQuery = Map<TResult>(query);
 51
 152        return await projectedQuery.ToListAsync(cancellationToken);
 153    }
 54    public virtual async Task<PagedResult<TResult>> ProjectToListAsync<TResult>(Specification<T> specification, PagingFi
 55    {
 256        var query = GenerateQuery(specification, true).AsNoTracking();
 257        var projectedQuery = Map<TResult>(query);
 58
 259        var count = await projectedQuery.CountAsync(cancellationToken);
 260        var pagination = new Pagination(_paginationSettings, count, filter);
 61
 262        projectedQuery = projectedQuery.ApplyPaging(pagination);
 263        var data = await projectedQuery.ToListAsync(cancellationToken);
 64
 265        return new PagedResult<TResult>(data, pagination);
 266    }
 67}