using System; using PolyTraderSharp.Services; using Xunit; namespace PolyTrader.Tests { /// /// Sicherheitsnetz für die Anzeige-Zeitzone. Die frühere Fassung rechnete hart gegen die /// WINDOWS-ID "W. Europe Standard Time" – auf Linux ohne vollständiges ICU wirft das. /// Diese Tests halten fest, dass beide Schreibweisen tragen und ein unbekannter Wert /// niemals fatal ist, sondern auf die Systemzeitzone zurückfällt. /// public class AppTimeZoneTests { [Theory] [InlineData("Europe/Berlin")] // IANA – Empfehlung, funktioniert auf beiden Plattformen [InlineData("W. Europe Standard Time")] // Windows – Altbestand muss weiter tragen public void Known_ids_resolve_to_the_same_zone(string id) { AppTimeZone.Configure(id); // Der Bezeichner unterscheidet sich je Plattform; entscheidend ist der Versatz. var berlinWinter = new DateTime(2026, 1, 15, 12, 0, 0, DateTimeKind.Utc); Assert.Equal(TimeSpan.FromHours(1), AppTimeZone.Current.GetUtcOffset(berlinWinter)); var berlinSommer = new DateTime(2026, 7, 15, 12, 0, 0, DateTimeKind.Utc); Assert.Equal(TimeSpan.FromHours(2), AppTimeZone.Current.GetUtcOffset(berlinSommer)); } [Fact] public void Unknown_id_falls_back_to_system_zone_and_warns() { string? warning = null; AppTimeZone.Configure("Gibt/EsNicht", w => warning = w); Assert.Equal(TimeZoneInfo.Local.Id, AppTimeZone.Current.Id); Assert.NotNull(warning); Assert.Contains("Gibt/EsNicht", warning); } [Theory] [InlineData(null)] [InlineData("")] [InlineData(" ")] public void Empty_id_means_system_zone(string? id) { AppTimeZone.Configure(id); Assert.Equal(TimeZoneInfo.Local.Id, AppTimeZone.Current.Id); } [Fact] public void ToDisplay_converts_utc_into_the_configured_zone() { AppTimeZone.Configure("Europe/Berlin"); // 12:00 UTC im Januar = 13:00 Berliner Zeit (MEZ). var utc = new DateTime(2026, 1, 15, 12, 0, 0, DateTimeKind.Utc); Assert.Equal(13, AppTimeZone.ToDisplay(utc).Hour); } [Fact] public void ToDisplay_leaves_already_local_timestamps_alone() { AppTimeZone.Configure(null); // Systemzeitzone var local = new DateTime(2026, 1, 15, 12, 0, 0, DateTimeKind.Local); Assert.Equal(12, AppTimeZone.ToDisplay(local).Hour); } } }