< Summary - MechanicsSoftware — Coverage Report

Information
Class: MechanicsSoftware.Domain.ValueObjects.BudgetStatus
Assembly: MechanicsSoftware.Domain
File(s): /home/runner/work/mechanics-software/mechanics-software/src/MechanicsSoftware.Domain/ValueObjects/BudgetStatus.cs
Line coverage
92%
Covered lines: 23
Uncovered lines: 2
Coverable lines: 25
Total lines: 45
Line coverage: 92%
Branch coverage
78%
Covered branches: 11
Total branches: 14
Branch coverage: 78.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Value()100%11100%
TransitionTo(...)80%101091.66%
GetEqualityComponents()100%11100%
ToString()75%4485.71%
CreatePending()100%11100%

File(s)

/home/runner/work/mechanics-software/mechanics-software/src/MechanicsSoftware.Domain/ValueObjects/BudgetStatus.cs

#LineLine coverage
 1using MechanicsSoftware.Domain.Exceptions;
 2
 3namespace MechanicsSoftware.Domain.ValueObjects;
 4
 2585public sealed class BudgetStatus(BudgetStatus.Status value) : ValueObject
 6{
 7    public enum Status
 8    {
 9        Pending,
 10        Approved,
 11        Rejected
 12    }
 13
 32214    public Status Value => value;
 15
 16    public BudgetStatus TransitionTo(Status newStatus)
 7817    {
 7818        if (Value == newStatus)
 219            throw new DomainException($"Cannot transition from '{this}' to '{new BudgetStatus(newStatus)}': already in t
 20
 7621        return (Value, newStatus) switch
 7622        {
 5023            (Status.Pending, Status.Approved) => new BudgetStatus(Status.Approved),
 1824            (Status.Pending, Status.Rejected) => new BudgetStatus(Status.Rejected),
 425            (Status.Approved, _) => throw new DomainException("Cannot transition from 'APPROVED' state: it is terminal."
 426            (Status.Rejected, _) => throw new DomainException("Cannot transition from 'REJECTED' state: it is terminal."
 027            _ => throw new DomainException($"Invalid transition from '{this}' to '{new BudgetStatus(newStatus)}'.")
 7628        };
 6829    }
 30
 31    protected override IEnumerable<object?> GetEqualityComponents()
 4432    {
 4433        yield return Value;
 1634    }
 35
 10236    public override string ToString() => Value switch
 10237    {
 4038        Status.Pending => "PENDING",
 4639        Status.Approved => "APPROVED",
 1640        Status.Rejected => "REJECTED",
 041        _ => Value.ToString()
 10242    };
 43
 11644    public static BudgetStatus CreatePending() => new(Status.Pending);
 45}