Files
Hy2026/tests/TarninaHub.Tests/Domain/IdeaAndApplicationRulesTests.cs
T
Rafał Tyński ded596d872 test(ideas): cover workflow, application window and controller outcomes
Add unit tests for idea status transitions, granted application windows and applications controller status mapping (409 when call closed, 201 on success).
2026-10-04 03:13:50 +02:00

41 lines
1.6 KiB
C#

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)));
}
}