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).
This commit is contained in:
Rafał Tyński
2026-10-04 03:13:50 +02:00
parent 127ca92f63
commit ded596d872
3 changed files with 155 additions and 0 deletions
@@ -0,0 +1,40 @@
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)));
}
}