< Summary - MechanicsSoftware — Coverage Report

Information
Class: MechanicsSoftware.Application.UseCases.ServiceOrders.Handlers.ListServiceOrdersHandler
Assembly: MechanicsSoftware.Application
File(s): /home/runner/work/mechanics-software/mechanics-software/src/MechanicsSoftware.Application/UseCases/ServiceOrders/Handlers/ListServiceOrdersHandler.cs
Line coverage
100%
Covered lines: 37
Uncovered lines: 0
Coverable lines: 37
Total lines: 53
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
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%44100%
ParseStatus(...)100%22100%

File(s)

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

#LineLine coverage
 1using MechanicsSoftware.Application.Abstractions;
 2using MechanicsSoftware.Application.UseCases.ServiceOrders.Queries;
 3using MechanicsSoftware.Domain.ValueObjects;
 4using Microsoft.EntityFrameworkCore;
 5
 6namespace MechanicsSoftware.Application.UseCases.ServiceOrders.Handlers;
 7
 108public sealed class ListServiceOrdersHandler(IAppDbContext db)
 9{
 10    public async Task<IReadOnlyList<ServiceOrderSummaryResponse>> ExecuteAsync(
 11        ListServiceOrdersQuery query, CancellationToken cancellationToken = default)
 1012    {
 1013        var completed = new ServiceOrderStatus(ServiceOrderStatus.Status.Completed);
 1014        var delivered = new ServiceOrderStatus(ServiceOrderStatus.Status.Delivered);
 1015        var inExecution = new ServiceOrderStatus(ServiceOrderStatus.Status.InExecution);
 1016        var awaitingApproval = new ServiceOrderStatus(ServiceOrderStatus.Status.AwaitingApproval);
 1017        var inDiagnosis = new ServiceOrderStatus(ServiceOrderStatus.Status.InDiagnosis);
 18
 1019        var orders = db.ServiceOrders
 1020            .Where(o => o.Status != completed && o.Status != delivered);
 21
 1022        if (!string.IsNullOrWhiteSpace(query.Status))
 423        {
 424            var parsed = ParseStatus(query.Status);
 425            if (parsed.HasValue)
 226            {
 227                var statusVo = new ServiceOrderStatus(parsed.Value);
 228                orders = orders.Where(o => o.Status == statusVo);
 229            }
 430        }
 31
 1032        return await orders
 1033            .OrderBy(o => o.Status == inExecution ? 1
 1034                : o.Status == awaitingApproval ? 2
 1035                : o.Status == inDiagnosis ? 3 : 4)
 1036            .ThenBy(o => o.CreatedAt)
 1037            .Select(o => new ServiceOrderSummaryResponse(
 1038                o.Id,
 1039                o.CustomerId,
 1040                o.VehicleId,
 1041                o.Status.ToString()!,
 1042                o.CreatedAt))
 1043            .ToListAsync(cancellationToken);
 1044    }
 45
 46    private static ServiceOrderStatus.Status? ParseStatus(string value)
 447    {
 448        var normalized = value.Replace("_", "");
 449        return Enum.TryParse<ServiceOrderStatus.Status>(normalized, ignoreCase: true, out var result)
 450            ? result
 451            : null;
 452    }
 53}