using StellaOps.TaskRunner.Core.Execution; using StellaOps.TaskRunner.Core.Execution.Simulation; using StellaOps.TaskRunner.Core.Planning; using StellaOps.TaskRunner.Core.TaskPacks; using StellaOps.TestKit; namespace StellaOps.TaskRunner.Tests; public sealed class PackRunStateFactoryTests { [Trait("Category", TestCategories.Unit)] [Fact] public void CreateInitialState_AssignsGateReasons() { var manifest = TestManifests.Load(TestManifests.Sample); var planner = new TaskPackPlanner(); var planResult = planner.Plan(manifest); Assert.True(planResult.Success); Assert.NotNull(planResult.Plan); var plan = planResult.Plan!; var context = new PackRunExecutionContext("run-state-factory", plan, DateTimeOffset.UtcNow); var graphBuilder = new PackRunExecutionGraphBuilder(); var graph = graphBuilder.Build(plan); var simulationEngine = new PackRunSimulationEngine(); var timestamp = DateTimeOffset.UtcNow; var state = PackRunStateFactory.CreateInitialState(context, graph, simulationEngine, timestamp); Assert.Equal("run-state-factory", state.RunId); Assert.Equal(plan.Hash, state.PlanHash); Assert.True(state.Steps.TryGetValue("approval", out var approvalStep)); Assert.Equal(PackRunStepExecutionStatus.Pending, approvalStep.Status); Assert.Equal("requires-approval", approvalStep.StatusReason); Assert.True(state.Steps.TryGetValue("plan-step", out var planStep)); Assert.Equal(PackRunStepExecutionStatus.Pending, planStep.Status); Assert.Null(planStep.StatusReason); } }