45 lines
2.2 KiB
C#
45 lines
2.2 KiB
C#
using StellaOps.Policy.Engine.Domain;
|
|
using StellaOps.Policy.Engine.Services;
|
|
using Xunit;
|
|
|
|
namespace StellaOps.Policy.Engine.Tests;
|
|
|
|
public class PolicyPackRepositoryTests
|
|
{
|
|
private readonly InMemoryPolicyPackRepository repository = new();
|
|
|
|
[Fact]
|
|
public async Task ActivateRevision_WithSingleApprover_ActivatesImmediately()
|
|
{
|
|
await repository.CreateAsync("pack-1", "Pack", CancellationToken.None);
|
|
await repository.UpsertRevisionAsync("pack-1", 1, requiresTwoPersonApproval: false, PolicyRevisionStatus.Approved, CancellationToken.None);
|
|
|
|
var result = await repository.RecordActivationAsync("pack-1", 1, "alice", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
|
|
|
Assert.Equal(PolicyActivationResultStatus.Activated, result.Status);
|
|
Assert.NotNull(result.Revision);
|
|
Assert.Equal(PolicyRevisionStatus.Active, result.Revision!.Status);
|
|
Assert.Single(result.Revision.Approvals);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ActivateRevision_WithTwoPersonRequirement_ReturnsPendingUntilSecondApproval()
|
|
{
|
|
await repository.CreateAsync("pack-2", "Pack", CancellationToken.None);
|
|
await repository.UpsertRevisionAsync("pack-2", 1, requiresTwoPersonApproval: true, PolicyRevisionStatus.Approved, CancellationToken.None);
|
|
|
|
var first = await repository.RecordActivationAsync("pack-2", 1, "alice", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
|
Assert.Equal(PolicyActivationResultStatus.PendingSecondApproval, first.Status);
|
|
Assert.Equal(PolicyRevisionStatus.Approved, first.Revision!.Status);
|
|
Assert.Single(first.Revision.Approvals);
|
|
|
|
var duplicate = await repository.RecordActivationAsync("pack-2", 1, "alice", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
|
Assert.Equal(PolicyActivationResultStatus.DuplicateApproval, duplicate.Status);
|
|
|
|
var second = await repository.RecordActivationAsync("pack-2", 1, "bob", DateTimeOffset.UtcNow, null, CancellationToken.None);
|
|
Assert.Equal(PolicyActivationResultStatus.Activated, second.Status);
|
|
Assert.Equal(PolicyRevisionStatus.Active, second.Revision!.Status);
|
|
Assert.Equal(2, second.Revision.Approvals.Length);
|
|
}
|
|
}
|