feat(usability): explain booking fields and validate decimal input (U06)

This commit is contained in:
2026-11-02 06:32:32 +01:00
parent 33a8abf5cc
commit 76ba79b63e
12 changed files with 205 additions and 42 deletions
@@ -0,0 +1,35 @@
using Duempelkas.App.Services;
using Xunit;
namespace Duempelkas.Tests;
public class BookingInputTests
{
[Theory]
[InlineData("12,50", true)]
[InlineData("12.50", true)]
[InlineData(" 12,50 ", true)]
[InlineData("12,500", false)]
[InlineData("-12,50", false)]
[InlineData("1.234,56", false)]
[InlineData("1,234.56", false)]
[InlineData("12,50 €", false)]
[InlineData("0", false)]
[InlineData("", false)]
[InlineData("9999999999999999999999999999999999999", false)]
public void DecimalInput_HasExplicitRules(string text, bool valid)
{
Assert.Equal(valid, BookingInput.TryAmount(text, out var amount));
if (valid) Assert.Equal(12.50m, amount);
}
[Fact]
public void ServiceValidation_RejectsInvalidData()
{
Assert.Throws<ArgumentException>(() => BookingInput.Validate(default, "Test", 1m));
Assert.Throws<ArgumentException>(() => BookingInput.Validate(DateTime.Today, " ", 1m));
Assert.Throws<ArgumentException>(() => BookingInput.Validate(DateTime.Today, "Test", -1m));
Assert.Throws<ArgumentException>(() => BookingInput.Validate(DateTime.Today, "Test", 1.001m));
Assert.Equal(default, BookingInput.Date("2026-02-30"));
}
}