< Summary - Combined Code Coverage

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

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ValidateInvoice(...)100%210%
ValidateRequiredFields(...)0%7280%
ValidateFieldCombinations(...)0%620%

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    {
 010        var results = new List<ValidationResult>
 011        {
 012            ValidateRequiredFields(invoice),
 013            ValidateFieldCombinations(invoice),
 014        };
 15
 016        var errors = results.SelectMany(r => r.Errors).ToList();
 017        return new ValidationResult(errors.Count == 0, errors);
 18    }
 19
 20    public ValidationResult ValidateRequiredFields(Invoice invoice)
 21    {
 022        var errors = new List<string>();
 23
 24        // Payment hash is required (p field)
 025        if (invoice.PaymentHash is null)
 026            errors.Add($"{nameof(invoice.PaymentHash)} is required");
 27
 28        // Payment secret is required (s field)
 029        if (invoice.PaymentSecret is null)
 030            errors.Add($"{nameof(invoice.PaymentSecret)} is required");
 31
 32        // Either description or description hash is required (d or h field)
 033        var hasDescription = invoice.Description is not null;
 034        var hasDescriptionHash = invoice.DescriptionHash is not null;
 035        if (!hasDescription && !hasDescriptionHash)
 036            errors.Add($"Either {nameof(invoice.Description)} or {nameof(invoice.DescriptionHash)} is required");
 37
 038        return new ValidationResult(errors.Count == 0, errors);
 39    }
 40
 41    public ValidationResult ValidateFieldCombinations(Invoice invoice)
 42    {
 043        var errors = new List<string>();
 44
 45        // Description and description hash are mutually exclusive
 046        var hasDescription = invoice.Description is not null;
 047        var hasDescriptionHash = invoice.DescriptionHash is not null;
 048        if (hasDescription && hasDescriptionHash)
 049            errors.Add($"{nameof(invoice.Description)} and {nameof(invoice.DescriptionHash)} cannot both be present");
 50
 051        return new ValidationResult(errors.Count == 0, errors);
 52    }
 53}