63 lines
1.8 KiB
C#
63 lines
1.8 KiB
C#
using System.Globalization;
|
|
using ImportAssist.Core;
|
|
using Xunit;
|
|
|
|
namespace ImportAssist.Core.Tests;
|
|
|
|
public sealed class InvoiceValidatorTests
|
|
{
|
|
[Theory]
|
|
[InlineData("de-DE")]
|
|
[InlineData("en-US")]
|
|
public void Validate_AcceptsDecimalPointRegardlessOfCurrentCulture(
|
|
string cultureName)
|
|
{
|
|
var originalCulture = CultureInfo.CurrentCulture;
|
|
|
|
try
|
|
{
|
|
CultureInfo.CurrentCulture = new CultureInfo(cultureName);
|
|
var row = new InvoiceRow(
|
|
"INV-001", "C-100", "125.50", "EUR");
|
|
|
|
var errors = InvoiceValidator.Validate(row);
|
|
|
|
Assert.Empty(errors);
|
|
}
|
|
finally
|
|
{
|
|
CultureInfo.CurrentCulture = originalCulture;
|
|
}
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("abc", "Betrag ist keine gültige Zahl.")]
|
|
[InlineData("125,50", "Betrag ist keine gültige Zahl.")]
|
|
[InlineData("1,250.00", "Betrag ist keine gültige Zahl.")]
|
|
[InlineData("0", "Betrag muss größer als null sein.")]
|
|
[InlineData("-10.00", "Betrag muss größer als null sein.")]
|
|
public void Validate_RejectsInvalidAmount(
|
|
string amount,
|
|
string expectedError)
|
|
{
|
|
var row = new InvoiceRow(
|
|
"INV-001", "C-100", amount, "EUR");
|
|
|
|
var errors = InvoiceValidator.Validate(row);
|
|
|
|
Assert.Equal(expectedError, Assert.Single(errors));
|
|
}
|
|
|
|
[Fact]
|
|
public void Validate_CollectsAllErrorsForOneInvoice()
|
|
{
|
|
var row = new InvoiceRow(" ", "\t", "0", "EUR");
|
|
|
|
var errors = InvoiceValidator.Validate(row);
|
|
|
|
Assert.Equal(3, errors.Count);
|
|
Assert.Contains("Rechnungsnummer fehlt.", errors);
|
|
Assert.Contains("Kundennummer fehlt.", errors);
|
|
Assert.Contains("Betrag muss größer als null sein.", errors);
|
|
}
|
|
} |