using FluentAssertions; using StellaOps.TestKit; using StellaOps.Testing.Determinism; using Xunit; namespace StellaOps.TestKit.Tests; public sealed partial class DeterminismManifestTests { [Trait("Category", TestCategories.Unit)] [Fact] public void CreateManifest_WithReproducibilityMetadata_IncludesMetadata() { var artifactBytes = "Test artifact"u8.ToArray(); var artifactInfo = new ArtifactInfo { Type = "sbom", Name = "test", Version = "1.0.0" }; var toolchain = new ToolchainInfo { Platform = ".NET 10.0", Components = new[] { new ComponentInfo { Name = "Scanner", Version = "1.0.0" } } }; var reproducibility = new ReproducibilityMetadata { DeterministicSeed = 42, ClockFixed = true, OrderingGuarantee = "sorted", NormalizationRules = new[] { "UTF-8", "LF line endings", "sorted JSON keys" } }; var manifest = DeterminismManifestWriter.CreateManifest( artifactBytes, artifactInfo, toolchain, reproducibility: reproducibility); manifest.Reproducibility.Should().NotBeNull(); manifest.Reproducibility!.DeterministicSeed.Should().Be(42); manifest.Reproducibility.ClockFixed.Should().BeTrue(); manifest.Reproducibility.OrderingGuarantee.Should().Be("sorted"); manifest.Reproducibility.NormalizationRules.Should().ContainInOrder( "UTF-8", "LF line endings", "sorted JSON keys"); } [Trait("Category", TestCategories.Unit)] [Fact] public void CreateManifest_WithVerificationInfo_IncludesVerification() { var artifactBytes = "Test artifact"u8.ToArray(); var artifactInfo = new ArtifactInfo { Type = "sbom", Name = "test", Version = "1.0.0" }; var toolchain = new ToolchainInfo { Platform = ".NET 10.0", Components = new[] { new ComponentInfo { Name = "Scanner", Version = "1.0.0" } } }; var verification = new VerificationInfo { Command = "dotnet test --verify-determinism", ExpectedHash = "abc123def456", Baseline = "baselines/test-bundle.json" }; var manifest = DeterminismManifestWriter.CreateManifest( artifactBytes, artifactInfo, toolchain, verification: verification); manifest.Verification.Should().NotBeNull(); manifest.Verification!.Command.Should().Be("dotnet test --verify-determinism"); manifest.Verification.ExpectedHash.Should().Be("abc123def456"); manifest.Verification.Baseline.Should().Be("baselines/test-bundle.json"); } }