Files
ImportAssist/tests/ImportAssist.Core.Tests/InvoiceAnalysisReportValidationTests.cs

82 lines
2.4 KiB
C#

using ImportAssist.Core;
using Xunit;
namespace ImportAssist.Core.Tests;
public sealed class InvoiceAnalysisReportValidationTests
{
[Theory]
[InlineData(3, "INV-002", true)]
[InlineData(99, "INV-002", false)]
[InlineData(null, "INV-002", false)]
[InlineData(3, "INV-999", false)]
[InlineData(2, "INV-001", false)]
[InlineData(3, null, false)]
public void Validate_ChecksFindingAgainstSourceReport(
int? lineNumber,
string? invoiceId,
bool expectedValid)
{
var analysis = CreateAnalysis(lineNumber, invoiceId);
var report = CreateReport("INV-002");
var errors = InvoiceAnalysisValidator.Validate(analysis, report);
if (expectedValid)
Assert.Empty(errors);
else
Assert.NotEmpty(errors);
}
[Theory]
[InlineData("")]
[InlineData(" \t")]
public void Validate_AcceptsNullForMissingSourceInvoiceId(
string sourceInvoiceId)
{
var analysis = CreateAnalysis(3, null);
var report = CreateReport(sourceInvoiceId);
var errors = InvoiceAnalysisValidator.Validate(analysis, report);
Assert.Empty(errors);
}
private static InvoiceAnalysis CreateAnalysis(
int? lineNumber,
string? invoiceId) =>
new(
Summary: "Testanalyse",
Findings:
[
new AnalysisFinding(
LineNumber: lineNumber,
InvoiceId: invoiceId,
RuleId: "INV-002",
Description: "Kundennummer fehlt.",
NextCheck: "Kundennummer anhand des Belegs prüfen.",
MissingInformation: ["Kundennummer"])
],
Limitations: []);
private static ImportReport CreateReport(string invoiceId) =>
new(
SourceBlob: "test.csv",
CheckedAtUtc: DateTimeOffset.UnixEpoch,
Status: "Completed",
Rows:
[
new InvoiceCheckResult(
LineNumber: 2,
InvoiceId: "INV-001",
IsValid: true,
Errors: []),
new InvoiceCheckResult(
LineNumber: 3,
InvoiceId: invoiceId,
IsValid: false,
Errors: ["Kundennummer fehlt."])
],
FileErrors: []);
}