< Summary - MechanicsSoftware — Coverage Report

Information
Class: MechanicsSoftware.Application.UseCases.ServiceOrders.Handlers.RejectServiceOrderHandler
Assembly: MechanicsSoftware.Application
File(s): /home/runner/work/mechanics-software/mechanics-software/src/MechanicsSoftware.Application/UseCases/ServiceOrders/Handlers/RejectServiceOrderHandler.cs
Line coverage
100%
Covered lines: 16
Uncovered lines: 0
Coverable lines: 16
Total lines: 35
Line coverage: 100%
Branch coverage
75%
Covered branches: 3
Total branches: 4
Branch coverage: 75%
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()75%44100%

File(s)

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

#LineLine coverage
 1using MechanicsSoftware.Application.Abstractions;
 2using MechanicsSoftware.Application.Exceptions;
 3using MechanicsSoftware.Domain.Entities;
 4using MechanicsSoftware.Domain.Enums;
 5using Microsoft.Extensions.Logging;
 6
 7namespace MechanicsSoftware.Application.UseCases.ServiceOrders.Handlers;
 8
 129public sealed class RejectServiceOrderHandler(IAppDbContext db, IEmailNotifier emailNotifier, ILogger<RejectServiceOrder
 10{
 11    public async Task<ServiceOrderResponse> ExecuteAsync(
 12        Guid serviceOrderId, CancellationToken cancellationToken = default)
 1013    {
 1014        var order = await db.ServiceOrders.FindFullAsync(serviceOrderId, cancellationToken);
 15
 816        order.Reject();
 17
 618        var availablePartItems = order.PartItems
 619            .Where(p => p.Availability == PartAvailability.Available);
 20
 2221        foreach (var partItem in availablePartItems)
 222        {
 223            var part = await db.Parts.FindAsync([partItem.PartId], cancellationToken)
 224                ?? throw new NotFoundException(nameof(Part), partItem.PartId);
 25
 226            part.Release(partItem.Quantity, serviceOrderId);
 227        }
 28
 629        await db.SaveChangesAsync(cancellationToken);
 30
 631        await emailNotifier.TrySendStatusEmailAsync(db, logger, order, cancellationToken);
 32
 633        return ServiceOrderResponse.From(order);
 634    }
 35}