using TarninaHub.Domain.Enums; using TarninaHub.Domain.Rules; namespace TarninaHub.Tests.Domain; public class IdeaAndApplicationRulesTests { [Theory] [InlineData(IdeaStatus.Draft, IdeaStatus.Submitted, true)] [InlineData(IdeaStatus.Submitted, IdeaStatus.InReview, true)] [InlineData(IdeaStatus.InReview, IdeaStatus.Accepted, true)] [InlineData(IdeaStatus.InReview, IdeaStatus.Rejected, true)] [InlineData(IdeaStatus.Draft, IdeaStatus.Accepted, false)] [InlineData(IdeaStatus.Accepted, IdeaStatus.Draft, false)] public void IdeaWorkflow_EnforcesTransitions(IdeaStatus from, IdeaStatus to, bool expected) { Assert.Equal(expected, IdeaWorkflow.CanTransition(from, to)); } [Fact] public void IdeaWorkflow_RecognizesTerminalStates() { Assert.True(IdeaWorkflow.IsTerminal(IdeaStatus.Accepted)); Assert.True(IdeaWorkflow.IsTerminal(IdeaStatus.Rejected)); Assert.False(IdeaWorkflow.IsTerminal(IdeaStatus.Draft)); } [Fact] public void ApplicationWindow_IsOpenOnlyWithinOpenCallWindow() { var opensAt = new DateTimeOffset(2026, 9, 1, 0, 0, 0, TimeSpan.Zero); var closesAt = new DateTimeOffset(2026, 12, 31, 23, 59, 59, TimeSpan.Zero); var now = new DateTimeOffset(2026, 10, 4, 12, 0, 0, TimeSpan.Zero); Assert.True(ApplicationWindow.IsOpen("open", opensAt, closesAt, now)); Assert.False(ApplicationWindow.IsOpen("closed", opensAt, closesAt, now)); Assert.False(ApplicationWindow.IsOpen("open", opensAt, closesAt, opensAt.AddDays(-1))); Assert.False(ApplicationWindow.IsOpen("open", opensAt, closesAt, closesAt.AddSeconds(1))); } }