Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions artifacts/verb-output-schemas.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"sdk": {
"version": "11.0.100-preview.3.26207.106",
"version": "11.0.100-preview.4.26230.115",
"rollForward": "disable"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -655,30 +655,33 @@ public void CmmiAllChildrenComplete_Requirement_InResolved_ReturnsValid()
}

private static ValidTransition AssertValid(TransitionOutcome outcome) =>
((IUnion)outcome).Value.ShouldBeOfType<ValidTransition>();
outcome is ValidTransition v ? v
: throw new Shouldly.ShouldAssertException(
$"Expected ValidTransition but got a different case of TransitionOutcome");

private static InvalidTransition AssertInvalid(TransitionOutcome outcome) =>
((IUnion)outcome).Value.ShouldBeOfType<InvalidTransition>();
outcome is InvalidTransition iv ? iv
: throw new Shouldly.ShouldAssertException(
$"Expected InvalidTransition but got a different case of TransitionOutcome");

private static NoOpTransition AssertNoOp(TransitionOutcome outcome) =>
((IUnion)outcome).Value.ShouldBeOfType<NoOpTransition>();
outcome is NoOpTransition n ? n
: throw new Shouldly.ShouldAssertException(
$"Expected NoOpTransition but got a different case of TransitionOutcome");

/// <summary>
/// Asserts the transition was accepted (either ValidTransition or NoOpTransition,
/// AB#3170) and returns the target state. Used for theory tests where some data
/// rows produce a genuine transition and others are at-target idempotent re-fires.
/// </summary>
private static string AssertAccepted(TransitionOutcome outcome)
{
var inner = ((IUnion)outcome).Value;
return inner switch
private static string AssertAccepted(TransitionOutcome outcome) =>
outcome switch
{
ValidTransition v => v.TargetState,
NoOpTransition n => n.TargetState,
InvalidTransition iv => throw new Shouldly.ShouldAssertException(
$"Expected accepted transition (Valid or NoOp), got Invalid: {iv.Message}"),
_ => throw new InvalidOperationException($"Unexpected outcome type: {inner?.GetType().Name ?? "null"}"),
_ => throw new InvalidOperationException($"Unexpected outcome type: {outcome}"),
};
}
}

14 changes: 10 additions & 4 deletions tests/Polyphony.Tests/Routing/TransitionValidatorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -422,15 +422,21 @@ public void Validate_NoOp_DoesNotInvokePreconditions()

var result = CreateValidator().Validate(item, "item_satisfied", []);

((IUnion)result).Value.ShouldBeOfType<NoOpTransition>();
AssertNoOp(result);
}

private static ValidTransition AssertValid(TransitionOutcome outcome) =>
((IUnion)outcome).Value.ShouldBeOfType<ValidTransition>();
outcome is ValidTransition v ? v
: throw new ShouldAssertException(
$"Expected ValidTransition but got a different case of TransitionOutcome");

private static InvalidTransition AssertInvalid(TransitionOutcome outcome) =>
((IUnion)outcome).Value.ShouldBeOfType<InvalidTransition>();
outcome is InvalidTransition iv ? iv
: throw new ShouldAssertException(
$"Expected InvalidTransition but got a different case of TransitionOutcome");

private static NoOpTransition AssertNoOp(TransitionOutcome outcome) =>
((IUnion)outcome).Value.ShouldBeOfType<NoOpTransition>();
outcome is NoOpTransition n ? n
: throw new ShouldAssertException(
$"Expected NoOpTransition but got a different case of TransitionOutcome");
}
Loading