using FluentAssertions; using StellaOps.TestKit.Evidence; using Xunit; namespace StellaOps.TestKit.Tests; public sealed partial class EvidenceChainTests { [Fact] public void RequirementLinked_PassesWithValidRequirementId() { var act = () => EvidenceChainAssert.RequirementLinked("REQ-TEST-001"); act.Should().NotThrow(); } [Fact] public void RequirementLinked_ThrowsWithEmptyRequirementId() { var act = () => EvidenceChainAssert.RequirementLinked(""); act.Should().Throw() .WithMessage("*cannot be empty*"); } [Fact] public void RequirementLinked_ThrowsWithWhitespaceRequirementId() { var act = () => EvidenceChainAssert.RequirementLinked(" "); act.Should().Throw(); } [Fact] public void TraceabilityComplete_PassesWithAllComponents() { var act = () => EvidenceChainAssert.TraceabilityComplete( "REQ-001", "MyTests.TestMethod", "sha256:abc123"); act.Should().NotThrow(); } [Fact] public void TraceabilityComplete_ThrowsWithMissingRequirement() { var act = () => EvidenceChainAssert.TraceabilityComplete( "", "MyTests.TestMethod", "sha256:abc123"); act.Should().Throw() .WithMessage("*Requirement ID is missing*"); } [Fact] public void TraceabilityComplete_ThrowsWithMissingTestId() { var act = () => EvidenceChainAssert.TraceabilityComplete( "REQ-001", null!, "sha256:abc123"); act.Should().Throw() .WithMessage("*Test ID is missing*"); } [Fact] public void TraceabilityComplete_ThrowsWithMissingArtifactId() { var act = () => EvidenceChainAssert.TraceabilityComplete( "REQ-001", "MyTests.TestMethod", " "); act.Should().Throw() .WithMessage("*Artifact ID is missing*"); } [Fact] public void TraceabilityComplete_ReportsAllMissingComponents() { var act = () => EvidenceChainAssert.TraceabilityComplete("", "", ""); act.Should().Throw() .WithMessage("*Requirement ID is missing*") .WithMessage("*Test ID is missing*") .WithMessage("*Artifact ID is missing*"); } }