82 lines
2.4 KiB
C#
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: []);
|
|
}
|