fix tests. new product advisories enhancements
This commit is contained in:
@@ -20,12 +20,16 @@ public sealed class GraphSnapshotBuilder
|
||||
var nodes = batch.Nodes;
|
||||
var edges = batch.Edges;
|
||||
|
||||
var nodesById = nodes.ToImmutableDictionary(
|
||||
node => node["id"]!.GetValue<string>(),
|
||||
node => node,
|
||||
StringComparer.Ordinal);
|
||||
var nodesById = nodes
|
||||
.GroupBy(node => node["id"]!.GetValue<string>(), StringComparer.Ordinal)
|
||||
.ToImmutableDictionary(
|
||||
g => g.Key,
|
||||
g => g.First(),
|
||||
StringComparer.Ordinal);
|
||||
|
||||
var artifactNodeId = ResolveArtifactNodeId(sbomSnapshot, nodes);
|
||||
var artifactNodeId = nodes.Length > 0
|
||||
? ResolveArtifactNodeId(sbomSnapshot, nodes)
|
||||
: string.Empty;
|
||||
var snapshotId = ComputeSnapshotId(tenant, sbomSnapshot.ArtifactDigest, sbomSnapshot.SbomDigest);
|
||||
|
||||
var derivedSbomDigests = sbomSnapshot.BaseArtifacts
|
||||
@@ -308,6 +312,15 @@ public sealed class GraphSnapshotBuilder
|
||||
var kind = kindNode.GetValue<string>();
|
||||
if (!edge.TryGetPropertyValue("canonical_key", out var canonicalKeyNode) || canonicalKeyNode is null)
|
||||
{
|
||||
// Fallback to simple source/target properties when canonical_key is absent
|
||||
if (edge.TryGetPropertyValue("source", out var fallbackSource) && fallbackSource is not null &&
|
||||
edge.TryGetPropertyValue("target", out var fallbackTarget) && fallbackTarget is not null)
|
||||
{
|
||||
sourceNodeId = fallbackSource.GetValue<string>();
|
||||
targetNodeId = fallbackTarget.GetValue<string>();
|
||||
return nodesById.ContainsKey(sourceNodeId) && nodesById.ContainsKey(targetNodeId);
|
||||
}
|
||||
|
||||
sourceNodeId = string.Empty;
|
||||
targetNodeId = string.Empty;
|
||||
return false;
|
||||
@@ -355,6 +368,10 @@ public sealed class GraphSnapshotBuilder
|
||||
artifactNodeByDigest.TryGetValue(builtTargetDigest.GetValue<string>(), out target);
|
||||
}
|
||||
break;
|
||||
case "SBOM_VERSION_OF":
|
||||
source = canonicalKey.TryGetPropertyValue("sbom_node_id", out var sbomSource) ? sbomSource?.GetValue<string>() : null;
|
||||
target = canonicalKey.TryGetPropertyValue("artifact_node_id", out var sbomTarget) ? sbomTarget?.GetValue<string>() : null;
|
||||
break;
|
||||
case "DEPENDS_ON":
|
||||
source = canonicalKey.TryGetPropertyValue("component_node_id", out var dependsSource) ? dependsSource?.GetValue<string>() : null;
|
||||
if (canonicalKey.TryGetPropertyValue("dependency_node_id", out var dependsTargetNode) && dependsTargetNode is not null)
|
||||
|
||||
@@ -37,7 +37,10 @@ public sealed class GraphInspectorTransformer
|
||||
foreach (var component in snapshot.Components)
|
||||
{
|
||||
var componentNode = GetOrCreateComponentNode(snapshot, componentNodes, component, component.Provenance);
|
||||
nodes.Add(componentNode);
|
||||
if (!nodes.Any(n => n["id"]!.GetValue<string>() == componentNode["id"]!.GetValue<string>()))
|
||||
{
|
||||
nodes.Add(componentNode);
|
||||
}
|
||||
|
||||
foreach (var relationship in component.Relationships ?? Array.Empty<GraphInspectorRelationship>())
|
||||
{
|
||||
@@ -56,7 +59,10 @@ public sealed class GraphInspectorTransformer
|
||||
},
|
||||
relationship.Provenance);
|
||||
|
||||
nodes.Add(targetNode);
|
||||
if (!nodes.Any(n => n["id"]!.GetValue<string>() == targetNode["id"]!.GetValue<string>()))
|
||||
{
|
||||
nodes.Add(targetNode);
|
||||
}
|
||||
|
||||
var edge = CreateRelationshipEdge(snapshot, componentNode, targetNode, relationship);
|
||||
edges.Add(edge);
|
||||
@@ -112,7 +118,10 @@ public sealed class GraphInspectorTransformer
|
||||
new GraphInspectorComponent { Purl = targetPurl },
|
||||
provenanceOverride: null);
|
||||
componentNodes[key] = targetNode;
|
||||
nodes.Add(targetNode);
|
||||
if (!nodes.Any(n => n["id"]!.GetValue<string>() == targetNode["id"]!.GetValue<string>()))
|
||||
{
|
||||
nodes.Add(targetNode);
|
||||
}
|
||||
}
|
||||
|
||||
var orderedNodes = nodes
|
||||
|
||||
Reference in New Issue
Block a user