using System; using System.Linq; using System.Text.Json.Nodes; using StellaOps.Graph.Indexer.Ingestion.Sbom; using Xunit; namespace StellaOps.Graph.Indexer.Tests; public sealed class SbomLineageTransformerTests { [Fact] public void Transform_adds_lineage_edges_when_present() { var snapshot = new SbomSnapshot { Tenant = "tenant-a", ArtifactDigest = "sha256:artifact", SbomDigest = "sha256:sbom", SbomFormat = "cyclonedx", SbomFormatVersion = "1.6", Lineage = new[] { new SbomLineageReference { Relationship = "parent", SbomDigest = "sha256:parent", ArtifactDigest = "sha256:parent-artifact", CollectedAt = DateTimeOffset.Parse("2025-12-01T00:00:00Z") } } }; var transformer = new SbomIngestTransformer(); var batch = transformer.Transform(snapshot); Assert.Contains(batch.Nodes, n => n["kind"]!.GetValue() == "sbom"); var edgeKinds = batch.Edges .Select(e => e["kind"]!.GetValue()) .ToArray(); Assert.Contains("SBOM_VERSION_OF", edgeKinds); Assert.Contains("SBOM_LINEAGE_PARENT", edgeKinds); } }