Files
duempelkas/tests/Duempelkas.Tests/TransferDirectionTests.cs
T

42 lines
2.1 KiB
C#

using Bunit;
using Duempelkas.App.Components.Dialogs;
using Duempelkas.App.Services;
using Duempelkas.Domain.Enums;
using Xunit;
namespace Duempelkas.Tests;
public class TransferDirectionTests
{
[Theory]
[InlineData(1)]
[InlineData(2)]
public async Task BothSides_ShowSameDirection(int accountId)
{
using var f = new LedgerUiFixture();
var entries = f.Service<IEntryService>();
await entries.CreateTransferAsync(1, 2, DateTime.Today, "Zur Bank", 20m);
var entry = Assert.Single(await entries.GetEntriesAsync(accountId, (int?)null));
var dialog = f.Context.Render<AddTransferDialog>(p => p.Add(x => x.SourceAccountId, accountId).Add(x => x.EditEntry, entry));
dialog.WaitForAssertion(() => Assert.Contains("Von: Barkasse → Nach: Girokonto", dialog.Find("#transfer-direction").TextContent));
Assert.Contains("Gesamtsumme unverändert", dialog.Markup);
Assert.Contains(accountId == 2 ? "Von Konto" : "Nach Konto", dialog.Find("label[for=transfer-account]").TextContent);
}
[Fact]
public async Task IncomingEdit_MovesSource_AndRejectsSameAccountWithoutChanges()
{
using var f = new LedgerUiFixture();
var entries = f.Service<IEntryService>();
var third = await f.Service<IAccountService>().CreateAccountAsync("Sparkonto");
await entries.CreateTransferAsync(1, 2, DateTime.Today, "Zur Bank", 20m);
var incoming = Assert.Single(await entries.GetEntriesAsync(2, (int?)null));
await Assert.ThrowsAsync<InvalidOperationException>(() => entries.UpdateTransferAsync(incoming.Id, 2, DateTime.Today, "Unzulässig", 99m));
Assert.Equal(20m, Assert.Single(await entries.GetEntriesAsync(2, (int?)null)).Amount);
await entries.UpdateTransferAsync(incoming.Id, third.Id, DateTime.Today, "Andere Quelle", 25m);
Assert.Empty(await entries.GetEntriesAsync(1, (int?)null));
Assert.Equal(EntryType.Expense, Assert.Single(await entries.GetEntriesAsync(third.Id, (int?)null)).Type);
Assert.Equal(EntryType.Income, Assert.Single(await entries.GetEntriesAsync(2, (int?)null)).Type);
}
}