Files

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);
}
}