< Summary - Combined Code Coverage

Information
Class: NLightning.Bolt11.Services.InvoiceValidationService
Assembly: NLightning.Bolt11
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Bolt11/Services/InvoiceValidationService.cs
Tag: 36_15743069263
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 53
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ValidateInvoice(...)100%11100%
ValidateRequiredFields(...)100%88100%
ValidateFieldCombinations(...)100%22100%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Bolt11/Services/InvoiceValidationService.cs

#LineLine coverage
 1namespace NLightning.Bolt11.Services;
 2
 3using Interfaces;
 4using Models;
 5
 6public class InvoiceValidationService : IInvoiceValidationService
 7{
 8    public ValidationResult ValidateInvoice(Invoice invoice)
 9    {
 8410        var results = new List<ValidationResult>
 8411        {
 8412            ValidateRequiredFields(invoice),
 8413            ValidateFieldCombinations(invoice),
 8414        };
 15
 25216        var errors = results.SelectMany(r => r.Errors).ToList();
 8417        return new ValidationResult(errors.Count == 0, errors);
 18    }
 19
 20    public ValidationResult ValidateRequiredFields(Invoice invoice)
 21    {
 10822        var errors = new List<string>();
 23
 24        // Payment hash is required (p field)
 10825        if (invoice.PaymentHash is null)
 1226            errors.Add($"{nameof(invoice.PaymentHash)} is required");
 27
 28        // Payment secret is required (s field)
 10829        if (invoice.PaymentSecret is null)
 830            errors.Add($"{nameof(invoice.PaymentSecret)} is required");
 31
 32        // Either description or description hash is required (d or h field)
 10833        var hasDescription = invoice.Description is not null;
 10834        var hasDescriptionHash = invoice.DescriptionHash is not null;
 10835        if (!hasDescription && !hasDescriptionHash)
 836            errors.Add($"Either {nameof(invoice.Description)} or {nameof(invoice.DescriptionHash)} is required");
 37
 10838        return new ValidationResult(errors.Count == 0, errors);
 39    }
 40
 41    public ValidationResult ValidateFieldCombinations(Invoice invoice)
 42    {
 10043        var errors = new List<string>();
 44
 45        // Description and description hash are mutually exclusive
 10046        var hasDescription = invoice.Description is not null;
 10047        var hasDescriptionHash = invoice.DescriptionHash is not null;
 10048        if (hasDescription && hasDescriptionHash)
 1249            errors.Add($"{nameof(invoice.Description)} and {nameof(invoice.DescriptionHash)} cannot both be present");
 50
 10051        return new ValidationResult(errors.Count == 0, errors);
 52    }
 53}