summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/SomhairlesDream.Cli.Tests/ArgumentsTests.fs27
-rw-r--r--tests/SomhairlesDream.Modeling.Tests/PipelineTests.fs31
2 files changed, 58 insertions, 0 deletions
diff --git a/tests/SomhairlesDream.Cli.Tests/ArgumentsTests.fs b/tests/SomhairlesDream.Cli.Tests/ArgumentsTests.fs
index f55762e..38c8741 100644
--- a/tests/SomhairlesDream.Cli.Tests/ArgumentsTests.fs
+++ b/tests/SomhairlesDream.Cli.Tests/ArgumentsTests.fs
@@ -60,6 +60,33 @@ let ``run command parses explicit ids and render flag`` () =
| Help -> failwith "expected run command"
[<Fact>]
+let ``run command with probe design applies probe defaults`` () =
+ match Arguments.parse [| "run"; "--design"; "probe" |] |> expectOk with
+ | Run options ->
+ Assert.Equal("probe-001", options.Ids.ProjectId)
+ Assert.Equal("run-001", options.Ids.RunId)
+ Assert.Equal("probe-base-000", options.Ids.BaseId)
+ Assert.Equal("probe-target-007", options.Ids.TargetId)
+ Assert.Equal("probe", options.Design)
+ | Verify _
+ | Help -> failwith "expected run command"
+
+[<Fact>]
+let ``run command with probe design keeps explicit ids`` () =
+ match Arguments.parse [| "run"; "--design"; "probe"; "--run-id"; "run-x" |] |> expectOk with
+ | Run options ->
+ Assert.Equal("probe-001", options.Ids.ProjectId)
+ Assert.Equal("run-x", options.Ids.RunId)
+ Assert.Equal("probe-base-000", options.Ids.BaseId)
+ | Verify _
+ | Help -> failwith "expected run command"
+
+[<Fact>]
+let ``run command rejects unknown design`` () =
+ match Arguments.parse [| "run"; "--design"; "steampunk" |] |> expectError with
+ | message -> Assert.Contains("invalid design", message)
+
+[<Fact>]
let ``verify command requires exactly one manifest path`` () =
match Arguments.parse [| "verify"; "run"; "extra" |] |> expectError with
| message -> Assert.Contains("manifest", message)
diff --git a/tests/SomhairlesDream.Modeling.Tests/PipelineTests.fs b/tests/SomhairlesDream.Modeling.Tests/PipelineTests.fs
index 7a5e3e1..221e7d7 100644
--- a/tests/SomhairlesDream.Modeling.Tests/PipelineTests.fs
+++ b/tests/SomhairlesDream.Modeling.Tests/PipelineTests.fs
@@ -60,6 +60,7 @@ type private TestBridge(?wrongObjectIds: bool) =
let private options root bridge =
{ PipelineOptions.ArtifactRoot = root
Ids = ids
+ Steps = Design.steps
Render = true
Bridge = bridge
Clock = fun () -> DateTimeOffset.Parse("2026-09-20T12:00:00Z")
@@ -89,6 +90,36 @@ let ``design steps expose the fixed ordered object contract`` () =
"heritage.crossbeam" |] = steps[2].ObjectIds)
[<Fact>]
+let ``probe design steps expose the cumulative real-probe contract`` () =
+ let steps = Design.probeSteps
+
+ Assert.Equal(7, steps.Length)
+ Assert.True([| "probe-01-bus"; "probe-02-boom"; "probe-03-rtg"; "probe-04-hga"; "probe-05-instruments"; "probe-06-mast"; "probe-07-livery" |] = (steps |> Array.map _.StepId))
+ Assert.True([| 0; 1; 2; 3; 4; 5; 6 |] = (steps |> Array.map _.Index))
+ Assert.Equal(22, steps[0].ObjectIds.Length)
+ Assert.Equal(31, steps[1].ObjectIds.Length)
+ Assert.Equal(43, steps[2].ObjectIds.Length)
+ Assert.Equal(49, steps[3].ObjectIds.Length)
+ Assert.Equal(55, steps[4].ObjectIds.Length)
+ Assert.Equal(56, steps[5].ObjectIds.Length)
+ Assert.Equal(56, steps[6].ObjectIds.Length)
+ Assert.True(steps[0].ObjectIds |> Array.contains "probe.bus.electronics.decagon")
+ Assert.True(steps[0].ObjectIds |> Array.contains "probe.bus.bay.panel.00")
+ Assert.True(steps[2].ObjectIds |> Array.contains "probe.rtg.01.fin.02")
+ Assert.True(steps[3].ObjectIds |> Array.contains "probe.hga.reflector")
+ Assert.True(steps[4].ObjectIds |> Array.contains "probe.optical.aperture")
+ Assert.True([| "probe.science.boom" |] = (steps[5].ObjectIds |> Array.except steps[4].ObjectIds))
+ Assert.True([||] = (steps[6].ObjectIds |> Array.except steps[5].ObjectIds))
+ Assert.Equal(6, steps[6].Changes.Length)
+ Assert.True(steps[6].Changes |> Array.forall (fun change -> change.Kind = "update"))
+
+[<Fact>]
+let ``design forProject selects steps by project id prefix`` () =
+ Assert.True(Design.steps = Design.forProject "heritage-001")
+ Assert.True(Design.probeSteps = Design.forProject "probe-001")
+ Assert.True(Design.probeSteps = Design.forProject "probe-42")
+
+[<Fact>]
let ``pipeline commits each step and writes manifest after complete event`` () =
withTempDirectory (fun root ->
let manifest = Pipeline.run (options root (TestBridge() :> IArtifactBridge)) |> expectOk