@@ -778,4 +778,48 @@ public void FilterBaseImageComponents_DependencyGraphsUnchangedWhenFlagDisabled(
778778 graph . Should ( ) . ContainKey ( retainedComponent . Component . Id ) ;
779779 graph . Should ( ) . ContainKey ( baseImageComponent . Component . Id ) ;
780780 }
781+
782+ [ TestMethod ]
783+ public void FilterBaseImageComponents_PrunesReferrersToFilteredComponents ( )
784+ {
785+ var filePath = Path . Join ( this . sourceDirectory . FullName , "file1" ) ;
786+ var singleFileRecorder = this . componentRecorder . CreateSingleFileComponentRecorder ( filePath ) ;
787+
788+ // base-pkg is a root that depends on child-pkg (non-base-image).
789+ var baseImageComponent = new DetectedComponent ( new NpmComponent ( "base-pkg" , "1.0.0" ) , containerDetailsId : 1 , containerLayerId : 0 ) ;
790+ var childComponent = new DetectedComponent ( new NpmComponent ( "child-pkg" , "1.0.0" ) , containerDetailsId : 1 , containerLayerId : 1 ) ;
791+
792+ singleFileRecorder . RegisterUsage ( baseImageComponent , isExplicitReferencedDependency : true ) ;
793+ singleFileRecorder . RegisterUsage ( childComponent , parentComponentId : baseImageComponent . Component . Id ) ;
794+
795+ var containerDetailsMap = new Dictionary < int , ContainerDetails >
796+ {
797+ [ 1 ] = new ContainerDetails
798+ {
799+ Id = 1 ,
800+ Layers = [ new DockerLayer { LayerIndex = 0 , IsBaseImage = true } , new DockerLayer { LayerIndex = 1 , IsBaseImage = false } ] ,
801+ } ,
802+ } ;
803+
804+ var processingResult = new DetectorProcessingResult
805+ {
806+ ResultCode = ProcessingResultCode . Success ,
807+ ContainersDetailsMap = containerDetailsMap ,
808+ ComponentRecorders = [ ( this . componentDetectorMock . Object , this . componentRecorder ) ] ,
809+ } ;
810+
811+ var result = this . serviceUnderTest . GenerateScanResultFromProcessingResult (
812+ processingResult , new ScanSettings { SourceDirectory = this . sourceDirectory , FilterBaseImageComponents = true } ) ;
813+
814+ // Only child-pkg should remain (base-pkg is exclusively from base image layer).
815+ result . ComponentsFound . Should ( ) . HaveCount ( 1 ) ;
816+ var child = result . ComponentsFound . Single ( ) ;
817+ ( ( NpmComponent ) child . Component ) . Name . Should ( ) . Be ( "child-pkg" ) ;
818+
819+ // TopLevelReferrers should not reference the filtered base-image component.
820+ child . TopLevelReferrers ? . Should ( ) . NotContain ( c => c . Id == baseImageComponent . Component . Id ) ;
821+
822+ // AncestralReferrers should not reference the filtered base-image component.
823+ child . AncestralReferrers ? . Should ( ) . NotContain ( c => c . Id == baseImageComponent . Component . Id ) ;
824+ }
781825}
0 commit comments