using System.Threading; using System.Threading.Tasks; using StellaOps.Graph.Api.Contracts; using StellaOps.Graph.Api.Services; using Xunit; using StellaOps.TestKit; namespace StellaOps.Graph.Api.Tests; public sealed class LineageServiceTests { [Trait("Category", TestCategories.Unit)] [Fact] public async Task GetLineageAsync_ReturnsSbomAndArtifactChain() { var repository = new InMemoryGraphRepository(); var service = new InMemoryGraphLineageService(repository); var request = new GraphLineageRequest { SbomDigest = "sha256:sbom-b", MaxDepth = 3 }; var response = await service.GetLineageAsync("acme", request, CancellationToken.None); Assert.Contains(response.Nodes, node => node.Id == "gn:acme:sbom:sha256:sbom-b"); Assert.Contains(response.Nodes, node => node.Id == "gn:acme:sbom:sha256:sbom-a"); Assert.Contains(response.Nodes, node => node.Id == "gn:acme:artifact:sha256:abc"); Assert.Contains(response.Edges, edge => edge.Kind == "SBOM_LINEAGE_PARENT"); Assert.Contains(response.Edges, edge => edge.Kind == "SBOM_VERSION_OF"); } }