28
28
using SonarLint . VisualStudio . IssueVisualization . Security . DependencyRisks ;
29
29
using SonarLint . VisualStudio . IssueVisualization . Security . ReportView ;
30
30
using SonarLint . VisualStudio . IssueVisualization . Security . ReportView . Hotspots ;
31
+ using SonarLint . VisualStudio . IssueVisualization . Security . ReportView . Taint ;
31
32
using SonarLint . VisualStudio . TestInfrastructure ;
32
33
33
34
namespace SonarLint . VisualStudio . IssueVisualization . Security . UnitTests . ReportView ;
@@ -39,6 +40,7 @@ public class ReportViewModelTest
39
40
private IActiveSolutionBoundTracker activeSolutionBoundTracker ;
40
41
private IDependencyRisksStore dependencyRisksStore ;
41
42
private IHotspotsReportViewModel hotspotsReportViewModel ;
43
+ private ITaintsReportViewModel taintsReportViewModel ;
42
44
private IShowDependencyRiskInBrowserHandler showDependencyRiskInBrowserHandler ;
43
45
private IChangeDependencyRiskStatusHandler changeDependencyRiskStatusHandler ;
44
46
private INavigateToRuleDescriptionCommand navigateToRuleDescriptionCommand ;
@@ -54,6 +56,7 @@ public void Initialize()
54
56
activeSolutionBoundTracker = Substitute . For < IActiveSolutionBoundTracker > ( ) ;
55
57
dependencyRisksStore = Substitute . For < IDependencyRisksStore > ( ) ;
56
58
hotspotsReportViewModel = Substitute . For < IHotspotsReportViewModel > ( ) ;
59
+ taintsReportViewModel = Substitute . For < ITaintsReportViewModel > ( ) ;
57
60
showDependencyRiskInBrowserHandler = Substitute . For < IShowDependencyRiskInBrowserHandler > ( ) ;
58
61
changeDependencyRiskStatusHandler = Substitute . For < IChangeDependencyRiskStatusHandler > ( ) ;
59
62
navigateToRuleDescriptionCommand = Substitute . For < INavigateToRuleDescriptionCommand > ( ) ;
@@ -63,6 +66,7 @@ public void Initialize()
63
66
threadHandling = Substitute . ForPartsOf < NoOpThreadHandler > ( ) ;
64
67
eventHandler = Substitute . For < PropertyChangedEventHandler > ( ) ;
65
68
hotspotsReportViewModel . GetHotspotsGroupViewModels ( ) . Returns ( [ ] ) ;
69
+ taintsReportViewModel . GetTaintsGroupViewModels ( ) . Returns ( [ ] ) ;
66
70
67
71
testSubject = CreateTestSubject ( ) ;
68
72
}
@@ -75,6 +79,7 @@ public void Class_SubscribesToEvents()
75
79
{
76
80
hotspotsReportViewModel . Received ( 1 ) . HotspotsChanged += Arg . Any < EventHandler > ( ) ;
77
81
dependencyRisksStore . Received ( 1 ) . DependencyRisksChanged += Arg . Any < EventHandler > ( ) ;
82
+ taintsReportViewModel . Received ( 1 ) . TaintsChanged += Arg . Any < EventHandler > ( ) ;
78
83
}
79
84
80
85
[ TestMethod ]
@@ -96,19 +101,50 @@ public void Ctor_InitializesDependencyRisks()
96
101
VerifyExpectedDependencyRiskGroupViewModel ( testSubject . GroupViewModels [ 0 ] as GroupDependencyRiskViewModel , dependencyRisk ) ;
97
102
}
98
103
104
+ [ TestMethod ]
105
+ public void Ctor_InitializesHotspots ( )
106
+ {
107
+ var hotspotGroupViewModel = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
108
+ var hotspotGroupViewModel2 = CreateMockedGroupViewModel ( filePath : "myFile2.cs" ) ;
109
+ hotspotsReportViewModel . GetHotspotsGroupViewModels ( ) . Returns ( [ hotspotGroupViewModel , hotspotGroupViewModel2 ] ) ;
110
+
111
+ testSubject = CreateTestSubject ( ) ;
112
+
113
+ testSubject . GroupViewModels . Should ( ) . HaveCount ( 2 ) ;
114
+ testSubject . GroupViewModels . Should ( ) . Contain ( hotspotGroupViewModel ) ;
115
+ testSubject . GroupViewModels . Should ( ) . Contain ( hotspotGroupViewModel2 ) ;
116
+ }
117
+
118
+ [ TestMethod ]
119
+ public void Ctor_InitializesTaints ( )
120
+ {
121
+ var taintGroupViewModel = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
122
+ var taintGroupViewModel2 = CreateMockedGroupViewModel ( filePath : "myFile2.cs" ) ;
123
+ taintsReportViewModel . GetTaintsGroupViewModels ( ) . Returns ( [ taintGroupViewModel , taintGroupViewModel2 ] ) ;
124
+
125
+ testSubject = CreateTestSubject ( ) ;
126
+
127
+ testSubject . GroupViewModels . Should ( ) . HaveCount ( 2 ) ;
128
+ testSubject . GroupViewModels . Should ( ) . Contain ( taintGroupViewModel ) ;
129
+ testSubject . GroupViewModels . Should ( ) . Contain ( taintGroupViewModel2 ) ;
130
+ }
131
+
99
132
[ TestMethod ]
100
133
public void Ctor_MixedIssuesTypes_CreatesGroupViewModelsCorrectly ( )
101
134
{
102
135
var dependencyRisk = CreateDependencyRisk ( ) ;
103
136
MockRisksInStore ( dependencyRisk ) ;
104
137
var hotspotGroupViewModel = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
105
138
hotspotsReportViewModel . GetHotspotsGroupViewModels ( ) . Returns ( [ hotspotGroupViewModel ] ) ;
139
+ var taintGroupViewModel = CreateMockedGroupViewModel ( filePath : "myFile2.cs" ) ;
140
+ taintsReportViewModel . GetTaintsGroupViewModels ( ) . Returns ( [ taintGroupViewModel ] ) ;
106
141
107
142
testSubject = CreateTestSubject ( ) ;
108
143
109
- testSubject . GroupViewModels . Should ( ) . HaveCount ( 2 ) ;
144
+ testSubject . GroupViewModels . Should ( ) . HaveCount ( 3 ) ;
110
145
VerifyExpectedDependencyRiskGroupViewModel ( testSubject . GroupViewModels [ 0 ] as GroupDependencyRiskViewModel , dependencyRisk ) ;
111
- testSubject . GroupViewModels [ 1 ] . Should ( ) . Be ( hotspotGroupViewModel ) ;
146
+ testSubject . GroupViewModels . Should ( ) . Contain ( hotspotGroupViewModel ) ;
147
+ testSubject . GroupViewModels . Should ( ) . Contain ( taintGroupViewModel ) ;
112
148
}
113
149
114
150
[ TestMethod ]
@@ -130,6 +166,8 @@ public void Dispose_UnsubscribesFromEvents()
130
166
dependencyRisksStore . Received ( 1 ) . DependencyRisksChanged -= Arg . Any < EventHandler > ( ) ;
131
167
hotspotsReportViewModel . Received ( 1 ) . HotspotsChanged -= Arg . Any < EventHandler > ( ) ;
132
168
hotspotsReportViewModel . Received ( 1 ) . Dispose ( ) ;
169
+ taintsReportViewModel . Received ( 1 ) . TaintsChanged -= Arg . Any < EventHandler > ( ) ;
170
+ taintsReportViewModel . Received ( 1 ) . Dispose ( ) ;
133
171
}
134
172
135
173
[ TestMethod ]
@@ -203,7 +241,7 @@ public void HotspotsChanged_TwoGroups_UpdatesOnlyHotspotGroupViewModels()
203
241
var group1 = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
204
242
var group2 = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
205
243
hotspotsReportViewModel . GetHotspotsGroupViewModels ( ) . Returns ( [ group1 , group2 ] ) ;
206
- dependencyRisksStore . ClearReceivedCalls ( ) ;
244
+ ClearCallsForReportsViewModels ( ) ;
207
245
208
246
hotspotsReportViewModel . HotspotsChanged += Raise . EventWith ( testSubject , EventArgs . Empty ) ;
209
247
@@ -212,19 +250,53 @@ public void HotspotsChanged_TwoGroups_UpdatesOnlyHotspotGroupViewModels()
212
250
testSubject . GroupViewModels . Should ( ) . Contain ( group2 ) ;
213
251
VerifyHasGroupsUpdated ( ) ;
214
252
dependencyRisksStore . DidNotReceive ( ) . GetAll ( ) ;
253
+ taintsReportViewModel . DidNotReceive ( ) . GetTaintsGroupViewModels ( ) ;
215
254
}
216
255
217
256
[ TestMethod ]
218
257
public void HotspotsChanged_NoGroups_RaisesProperty ( )
219
258
{
220
259
hotspotsReportViewModel . GetHotspotsGroupViewModels ( ) . Returns ( [ ] ) ;
221
- dependencyRisksStore . ClearReceivedCalls ( ) ;
260
+ ClearCallsForReportsViewModels ( ) ;
222
261
223
262
hotspotsReportViewModel . HotspotsChanged += Raise . EventWith ( testSubject , EventArgs . Empty ) ;
224
263
225
264
testSubject . GroupViewModels . Should ( ) . BeEmpty ( ) ;
226
265
VerifyHasGroupsUpdated ( ) ;
227
266
dependencyRisksStore . DidNotReceive ( ) . GetAll ( ) ;
267
+ taintsReportViewModel . DidNotReceive ( ) . GetTaintsGroupViewModels ( ) ;
268
+ }
269
+
270
+ [ TestMethod ]
271
+ public void TaintsChanged_TwoGroups_UpdatesOnlyTaintsGroupViewModels ( )
272
+ {
273
+ var group1 = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
274
+ var group2 = CreateMockedGroupViewModel ( filePath : "myFile.cs" ) ;
275
+ taintsReportViewModel . GetTaintsGroupViewModels ( ) . Returns ( [ group1 , group2 ] ) ;
276
+ ClearCallsForReportsViewModels ( ) ;
277
+
278
+ taintsReportViewModel . TaintsChanged += Raise . EventWith ( testSubject , EventArgs . Empty ) ;
279
+
280
+ testSubject . GroupViewModels . Should ( ) . HaveCount ( 2 ) ;
281
+ testSubject . GroupViewModels . Should ( ) . Contain ( group1 ) ;
282
+ testSubject . GroupViewModels . Should ( ) . Contain ( group2 ) ;
283
+ VerifyHasGroupsUpdated ( ) ;
284
+ dependencyRisksStore . DidNotReceive ( ) . GetAll ( ) ;
285
+ hotspotsReportViewModel . DidNotReceive ( ) . GetHotspotsGroupViewModels ( ) ;
286
+ }
287
+
288
+ [ TestMethod ]
289
+ public void TaintsChanged_NoGroups_RaisesProperty ( )
290
+ {
291
+ taintsReportViewModel . GetTaintsGroupViewModels ( ) . Returns ( [ ] ) ;
292
+ ClearCallsForReportsViewModels ( ) ;
293
+
294
+ taintsReportViewModel . TaintsChanged += Raise . EventWith ( testSubject , EventArgs . Empty ) ;
295
+
296
+ testSubject . GroupViewModels . Should ( ) . BeEmpty ( ) ;
297
+ VerifyHasGroupsUpdated ( ) ;
298
+ dependencyRisksStore . DidNotReceive ( ) . GetAll ( ) ;
299
+ hotspotsReportViewModel . DidNotReceive ( ) . GetHotspotsGroupViewModels ( ) ;
228
300
}
229
301
230
302
[ TestMethod ]
@@ -260,11 +332,12 @@ public void DependencyRisksAddedInStore_DoesNotUpdateHotspots()
260
332
var addedRisk = CreateDependencyRisk ( ) ;
261
333
dependencyRisksStore . GetAll ( ) . Returns ( [ ] , [ addedRisk ] ) ;
262
334
testSubject = CreateTestSubject ( ) ;
263
- hotspotsReportViewModel . ClearReceivedCalls ( ) ;
335
+ ClearCallsForReportsViewModels ( ) ;
264
336
265
337
dependencyRisksStore . DependencyRisksChanged += Raise . Event < EventHandler > ( ) ;
266
338
267
339
hotspotsReportViewModel . DidNotReceive ( ) . GetHotspotsGroupViewModels ( ) ;
340
+ taintsReportViewModel . DidNotReceive ( ) . GetTaintsGroupViewModels ( ) ;
268
341
VerifyHasGroupsUpdated ( ) ;
269
342
}
270
343
@@ -300,16 +373,17 @@ public void DependencyRisksRemovedFromStore_DoesNotUpdateHotspots()
300
373
var initialRisk = CreateDependencyRisk ( ) ;
301
374
dependencyRisksStore . GetAll ( ) . Returns ( [ initialRisk ] , new IDependencyRisk [ ] { } ) ;
302
375
testSubject = CreateTestSubject ( ) ;
303
- hotspotsReportViewModel . ClearReceivedCalls ( ) ;
376
+ ClearCallsForReportsViewModels ( ) ;
304
377
305
378
dependencyRisksStore . DependencyRisksChanged += Raise . Event < EventHandler > ( ) ;
306
379
307
380
hotspotsReportViewModel . DidNotReceive ( ) . GetHotspotsGroupViewModels ( ) ;
381
+ taintsReportViewModel . DidNotReceive ( ) . GetTaintsGroupViewModels ( ) ;
308
382
VerifyHasGroupsUpdated ( ) ;
309
383
}
310
384
311
385
[ TestMethod ]
312
- public void HasRisks_ReturnsTrue_WhenThereAreRisks ( )
386
+ public void HasGroups_ReturnsTrue_WhenThereAreRisks ( )
313
387
{
314
388
MockRisksInStore ( CreateDependencyRisk ( ) ) ;
315
389
testSubject = CreateTestSubject ( ) ;
@@ -318,7 +392,7 @@ public void HasRisks_ReturnsTrue_WhenThereAreRisks()
318
392
}
319
393
320
394
[ TestMethod ]
321
- public void HasRisks_ReturnsFalse_WhenThereAreNoRisks ( ) => testSubject . HasGroups . Should ( ) . BeFalse ( ) ;
395
+ public void HasGroups_ReturnsFalse_WhenThereAreNoRisks ( ) => testSubject . HasGroups . Should ( ) . BeFalse ( ) ;
322
396
323
397
[ TestMethod ]
324
398
public void NavigateToLocationCommand_NullParameter_CanExecuteReturnsFalse ( ) => testSubject . NavigateToLocationCommand . CanExecute ( null ) . Should ( ) . BeFalse ( ) ;
@@ -356,6 +430,7 @@ private ReportViewModel CreateTestSubject()
356
430
locationNavigator ,
357
431
hotspotsReportViewModel ,
358
432
new DependencyRisksReportViewModel ( dependencyRisksStore , showDependencyRiskInBrowserHandler , changeDependencyRiskStatusHandler , messageBox ) ,
433
+ taintsReportViewModel ,
359
434
telemetryManager ,
360
435
threadHandling ) ;
361
436
reportViewModel . PropertyChanged += eventHandler ;
@@ -391,4 +466,11 @@ private static void VerifyExpectedDependencyRiskGroupViewModel(GroupDependencyRi
391
466
}
392
467
393
468
private void VerifyHasGroupsUpdated ( ) => eventHandler . Received ( ) . Invoke ( Arg . Any < object > ( ) , Arg . Is < PropertyChangedEventArgs > ( p => p . PropertyName == nameof ( testSubject . HasGroups ) ) ) ;
469
+
470
+ private void ClearCallsForReportsViewModels ( )
471
+ {
472
+ dependencyRisksStore . ClearReceivedCalls ( ) ;
473
+ taintsReportViewModel . ClearReceivedCalls ( ) ;
474
+ hotspotsReportViewModel . ClearReceivedCalls ( ) ;
475
+ }
394
476
}
0 commit comments