@@ -102,6 +102,38 @@ public async Task ProcessDetectorsAsync_HappyPathReturnsDetectedComponentsAsync(
102
102
results . ResultCode . Should ( ) . Be ( ProcessingResultCode . Success ) ;
103
103
}
104
104
105
+ [ TestMethod ]
106
+ public async Task ProcessDetectorsAsync_WithSourceFileLocationSetReturnsDetectedComponentsAsync ( )
107
+ {
108
+ var defaultArgs = new ScanSettings
109
+ {
110
+ SourceDirectory = new DirectoryInfo ( Path . Combine ( Environment . CurrentDirectory , "SourceDirectory" ) ) ,
111
+ DetectorArgs = new Dictionary < string , string > ( ) ,
112
+ SourceFileRoot = new DirectoryInfo ( Path . Combine ( Environment . CurrentDirectory , "SourceDirectory" , "SourceFileRoot" ) ) ,
113
+ } ;
114
+
115
+ var componentDetectorMock1 = this . SetupFileDetectorMock ( "firstFileDetectorId" , sourceDirectory : defaultArgs . SourceDirectory ) ;
116
+ var componentDetectorMock2 = this . SetupFileDetectorMock ( "secondFileDetectorId" , sourceDirectory : defaultArgs . SourceDirectory ) ;
117
+
118
+ this . detectorsToUse =
119
+ [
120
+ componentDetectorMock1 . Object , componentDetectorMock2 . Object ,
121
+ ] ;
122
+
123
+ var results = await this . serviceUnderTest . ProcessDetectorsAsync ( defaultArgs , this . detectorsToUse , new DetectorRestrictions ( ) ) ;
124
+
125
+ componentDetectorMock1 . Verify ( x => x . ExecuteDetectorAsync ( It . Is < ScanRequest > ( request => request . SourceDirectory == defaultArgs . SourceDirectory && request . SourceFileRoot == defaultArgs . SourceFileRoot ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
126
+ componentDetectorMock2 . Verify ( x => x . ExecuteDetectorAsync ( It . Is < ScanRequest > ( request => request . SourceDirectory == defaultArgs . SourceDirectory && request . SourceFileRoot == defaultArgs . SourceFileRoot ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
127
+
128
+ this . ValidateExpectedComponents ( results , this . detectorsToUse ) ;
129
+ this . GetDiscoveredComponentsFromDetectorProcessingResult ( results ) . FirstOrDefault ( x => x . Component ? . Type == ComponentType . Npm ) . Component
130
+ . Should ( ) . Be ( this . componentDictionary [ componentDetectorMock1 . Object . Id ] . Component ) ;
131
+ this . GetDiscoveredComponentsFromDetectorProcessingResult ( results ) . FirstOrDefault ( x => x . Component ? . Type == ComponentType . NuGet ) . Component
132
+ . Should ( ) . Be ( this . componentDictionary [ componentDetectorMock2 . Object . Id ] . Component ) ;
133
+
134
+ results . ResultCode . Should ( ) . Be ( ProcessingResultCode . Success ) ;
135
+ }
136
+
105
137
[ TestMethod ]
106
138
public async Task ProcessDetectorsAsync_NullDetectedComponentsReturnIsCoalescedAsync ( )
107
139
{
@@ -555,21 +587,21 @@ public async Task ProcessDetectorsAsync_InitializesExperimentsAsync()
555
587
this . experimentServiceMock . Verify ( x => x . InitializeAsync ( ) , Times . Once ) ;
556
588
}
557
589
558
- private Mock < FileComponentDetector > SetupFileDetectorMock ( string id )
590
+ private Mock < FileComponentDetector > SetupFileDetectorMock ( string id , DirectoryInfo sourceDirectory = null )
559
591
{
560
592
var mockFileDetector = new Mock < FileComponentDetector > ( ) ;
561
593
mockFileDetector . SetupAllProperties ( ) ;
562
594
mockFileDetector . SetupGet ( x => x . Id ) . Returns ( id ) ;
563
595
564
- var sourceDirectory = new DirectoryInfo ( Path . Combine ( Environment . CurrentDirectory , "Some" , "Source" , "Directory" ) ) ;
596
+ sourceDirectory ??= DefaultArgs . SourceDirectory ;
565
597
this . componentDictionary . Should ( ) . ContainKey ( id , $ "MockDetector id:{ id } , should be in mock dictionary") ;
566
598
567
599
var expectedResult = this . ExpectedResultForDetector ( id ) ;
568
600
569
- mockFileDetector . Setup ( x => x . ExecuteDetectorAsync ( It . Is < ScanRequest > ( request => request . SourceDirectory == DefaultArgs . SourceDirectory && request . ComponentRecorder != null ) , It . IsAny < CancellationToken > ( ) ) ) . Returns (
601
+ mockFileDetector . Setup ( x => x . ExecuteDetectorAsync ( It . Is < ScanRequest > ( request => request . SourceDirectory == sourceDirectory && request . ComponentRecorder != null ) , It . IsAny < CancellationToken > ( ) ) ) . Returns (
570
602
( ScanRequest request , CancellationToken cancellationToken ) => mockFileDetector . Object . ExecuteDetectorAsync ( request , cancellationToken ) ) . Verifiable ( ) ;
571
603
572
- mockFileDetector . Setup ( x => x . ExecuteDetectorAsync ( It . Is < ScanRequest > ( request => request . SourceDirectory == DefaultArgs . SourceDirectory && request . ComponentRecorder != null ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync (
604
+ mockFileDetector . Setup ( x => x . ExecuteDetectorAsync ( It . Is < ScanRequest > ( request => request . SourceDirectory == sourceDirectory && request . ComponentRecorder != null ) , It . IsAny < CancellationToken > ( ) ) ) . ReturnsAsync (
573
605
( ScanRequest request , CancellationToken cancellationToken ) =>
574
606
{
575
607
this . FillComponentRecorder ( request . ComponentRecorder , id ) ;
0 commit comments