< Summary - MechanicsSoftware — Coverage Report

Information
Class: MechanicsSoftware.Application.UseCases.ServiceOrders.Handlers.GetAverageExecutionTimeHandler
Assembly: MechanicsSoftware.Application
File(s): /home/runner/work/mechanics-software/mechanics-software/src/MechanicsSoftware.Application/UseCases/ServiceOrders/Handlers/GetAverageExecutionTimeHandler.cs
Line coverage
100%
Covered lines: 17
Uncovered lines: 0
Coverable lines: 17
Total lines: 30
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%
ExecuteAsync()100%22100%

File(s)

/home/runner/work/mechanics-software/mechanics-software/src/MechanicsSoftware.Application/UseCases/ServiceOrders/Handlers/GetAverageExecutionTimeHandler.cs

#LineLine coverage
 1using MechanicsSoftware.Application.Abstractions;
 2using MechanicsSoftware.Domain.ValueObjects;
 3using Microsoft.EntityFrameworkCore;
 4
 5namespace MechanicsSoftware.Application.UseCases.ServiceOrders.Handlers;
 6
 47public sealed class GetAverageExecutionTimeHandler(IAppDbContext db)
 8{
 9    public async Task<AverageExecutionTimeResponse> ExecuteAsync(CancellationToken cancellationToken = default)
 410    {
 411        var completedStatus = new ServiceOrderStatus(ServiceOrderStatus.Status.Completed);
 412        var deliveredStatus = new ServiceOrderStatus(ServiceOrderStatus.Status.Delivered);
 13
 414        var completedOrders = await db.ServiceOrders
 415            .Where(o => o.CompletedAt != null)
 416            .Where(o => o.Status == completedStatus || o.Status == deliveredStatus)
 417            .Select(o => new { o.CreatedAt, o.CompletedAt })
 418            .ToListAsync(cancellationToken);
 19
 420        if (completedOrders.Count == 0)
 221            return new AverageExecutionTimeResponse(0, 0);
 22
 223        var averageHours = completedOrders
 224            .Average(o => (o.CompletedAt!.Value - o.CreatedAt).TotalHours);
 25
 226        return new AverageExecutionTimeResponse(
 227            Math.Round(averageHours, 2),
 228            completedOrders.Count);
 429    }
 30}