using FluentAssertions; using IBKRTrader.Core.Configuration; namespace IBKRTrader.Tests.Configuration; /// /// Die Ablageorte müssen auf beiden Plattformen bestimmbar und beschreibbar sein. Bisher lag alles /// neben der Binärdatei – unter /opt hat der Dienstbenutzer dort keinen Schreibzugriff, der /// Dienst wäre beim ersten Logeintrag gescheitert. /// [Trait("cat", "unit")] public class AppPathsTests { [Fact] public void AlleVerzeichnisse_SindErmittelbarUndExistieren() { // Der Zugriff legt sie an – ein Dienst darf nicht daran scheitern, dass ein Verzeichnis fehlt. foreach (var dir in new[] { AppPaths.Config, AppPaths.Data, AppPaths.Logs }) { dir.Should().NotBeNullOrWhiteSpace(); Directory.Exists(dir).Should().BeTrue($"AppPaths muss \"{dir}\" anlegen"); } } [Fact] public void Verzeichnisse_SindTatsaechlichBeschreibbar() { // Die Auflösung prüft den Schreibzugriff durch einen echten Schreibversuch. Dieser Test // haelt fest, dass das Ergebnis stimmt – eine reine Attributpruefung waere hier wertlos, // weil unter Linux Besitzer/Gruppe/Modus und unter Windows die ACL entscheiden. foreach (var dir in new[] { AppPaths.Config, AppPaths.Data, AppPaths.Logs }) { var probe = Path.Combine(dir, $"test-{Guid.NewGuid():N}.tmp"); File.WriteAllText(probe, "x"); File.Delete(probe); } } [Fact] public void ConfigFile_LiegtImKonfigurationsverzeichnis() { var path = AppPaths.ConfigFile("master.key"); Path.GetDirectoryName(path).Should().Be(AppPaths.Config.TrimEnd(Path.DirectorySeparatorChar)); Path.GetFileName(path).Should().Be("master.key"); } [Fact] public void DataPath_LiegtImDatenverzeichnis() { AppPaths.DataPath("Backups").Should().StartWith(AppPaths.Data); } [Fact] public void Describe_NenntAlleDreiOrte() { // Wird beim Start geloggt – im Betrieb muss sichtbar sein, wohin geschrieben wird. var text = AppPaths.Describe(); text.Should().Contain("config=").And.Contain("data=").And.Contain("logs="); } }