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:
@@ -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)));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user