New IFxConverter.ConvertToChf(amount, fromCurrency) and FxConverter wrap the vendor IFxService and the FixerIo API key so callers stop threading the key through every conversion. ViewService drops IFxService and ISettingsService from its constructor and takes IFxConverter instead; GetAccountViewList and GetBalanceSheetView no longer read settingsService.GetSettings() per method. FxConverterTestShould locks in the target-currency + API-key routing. 40 tests total, all passing. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
34 lines
1 KiB
C#
34 lines
1 KiB
C#
using NSubstitute;
|
|
using Schaad.Accounting.Datasets;
|
|
using Schaad.Accounting.Services;
|
|
using Schaad.Finance.Api;
|
|
using Shouldly;
|
|
|
|
namespace Schaad.Accounting.Tests;
|
|
|
|
public class FxConverterTestShould
|
|
{
|
|
private readonly IFxService fxService = Substitute.For<IFxService>();
|
|
private readonly SettingsDataset settings = new() { DataPath = "", FixerIoApiKey = "test-key" };
|
|
|
|
private FxConverter BuildConverter() => new(fxService, settings);
|
|
|
|
[Fact]
|
|
public void DelegateToFxServiceWithChfAsTargetAndConfiguredApiKeyWhenConverting()
|
|
{
|
|
fxService.ConvertCurrency(100m, "USD", "CHF", "test-key").Returns(90m);
|
|
|
|
var result = BuildConverter().ConvertToChf(100m, "USD");
|
|
|
|
result.ShouldBe(90m);
|
|
fxService.Received(1).ConvertCurrency(100m, "USD", "CHF", "test-key");
|
|
}
|
|
|
|
[Fact]
|
|
public void PassNegativeAmountsThroughWhenConverting()
|
|
{
|
|
fxService.ConvertCurrency(-50m, "EUR", "CHF", Arg.Any<string>()).Returns(-48m);
|
|
|
|
BuildConverter().ConvertToChf(-50m, "EUR").ShouldBe(-48m);
|
|
}
|
|
}
|