using App.Core.Services.Licensing; namespace App.Core.Tests.Licensing; public class TrialStateTests { [Fact] public void GetDaysRemaining_OnInstallDay_Returns30() { var installDate = new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc); var state = new TrialState(installDate, "hash", installDate); Assert.Equal(30, state.GetDaysRemaining(installDate)); } [Fact] public void GetDaysRemaining_AfterFifteenDays_Returns15() { var installDate = new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc); var state = new TrialState(installDate, "hash", installDate); Assert.Equal(15, state.GetDaysRemaining(installDate.AddDays(15))); } [Fact] public void GetDaysRemaining_NeverGoesNegative() { var installDate = new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc); var state = new TrialState(installDate, "hash", installDate); Assert.Equal(0, state.GetDaysRemaining(installDate.AddDays(90))); } [Fact] public void IsExpired_ExactlyOnDay30_IsTrue() { var installDate = new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc); var state = new TrialState(installDate, "hash", installDate); Assert.True(state.IsExpired(installDate.AddDays(30))); Assert.False(state.IsExpired(installDate.AddDays(29))); } [Fact] public void WithUpdatedLastRun_DoesNotChangeInstallDate() { var installDate = new DateTime(2026, 1, 1, 0, 0, 0, DateTimeKind.Utc); var state = new TrialState(installDate, "hash", installDate); var updated = state.WithUpdatedLastRun(installDate.AddDays(5)); Assert.Equal(installDate, updated.InstallDateUtc); Assert.Equal(installDate.AddDays(5), updated.LastRunTimestampUtc); } }