Add unit tests for idea status transitions, granted application windows and applications controller status mapping (409 when call closed, 201 on success).
41 lines
1.6 KiB
C#
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)));
|
|
}
|
|
}
|