• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

MeindertN / RoboClerk / 19481929392

18 Nov 2025 10:05PM UTC coverage: 72.65% (+0.3%) from 72.366%
19481929392

push

github

MeindertN
Fixed failing test

2217 of 3233 branches covered (68.57%)

Branch coverage included in aggregate %.

4 of 4 new or added lines in 1 file covered. (100.0%)

526 existing lines in 15 files now uncovered.

6894 of 9308 relevant lines covered (74.07%)

96.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

87.78
/RoboClerk.Core/DataSources/PluginDataSources.cs
1
using Microsoft.Extensions.DependencyInjection;
2
using RoboClerk.Core.Configuration;
3
using System;
4
using System.Collections.Generic;
5
using System.IO.Abstractions;
6
using System.Security.Cryptography;
7

8
namespace RoboClerk
9
{
10
    public class PluginDataSources : DataSourcesBase, IDataSources
11
    {
12
        private List<IDataSourcePlugin> plugins = new List<IDataSourcePlugin>();
46✔
13

14
        private readonly IPluginLoader pluginLoader;
15

16
        public PluginDataSources(IConfiguration configuration, IPluginLoader pluginLoader, IFileProviderPlugin fileSystem)
17
            : base(configuration, fileSystem)
46✔
18
        {
46✔
19
            this.pluginLoader = pluginLoader;
46✔
20
            LoadPlugins();
46✔
21
        }
43✔
22

23
        private void LoadPlugins()
24
        {
46✔
25
            foreach (var val in configuration.DataSourcePlugins)
351✔
26
            {
108✔
27
                bool found = false;
108✔
28
                foreach (var dir in configuration.PluginDirs)
603✔
29
                {
192✔
30
                    var plugin = pluginLoader.LoadByName<IDataSourcePlugin>(
192✔
31
                        pluginDir: dir,
192✔
32
                        typeName: val,
192✔
33
                        configureGlobals: sc =>
192✔
34
                        {
×
35
                            sc.AddSingleton(fileSystem);
×
36
                            sc.AddSingleton(configuration);
×
37
                        });
192✔
38
                    if (plugin != null)
192✔
39
                    {
105✔
40
                        plugin.InitializePlugin(configuration);
105✔
41
                        if (plugin as IDataSourcePlugin != null)
105!
42
                        {
105✔
43
                            found = true;
105✔
44
                            var temp = plugin as IDataSourcePlugin;
105✔
45
                            temp.RefreshItems();
105✔
46
                            plugins.Add(temp);
105✔
47
                            break;
105✔
48
                        }
49
                    }
×
50
                }
87✔
51
                if(!found)
108✔
52
                {
3✔
53
                    //if we don't find a specified datasource plugin, that is reason to quit.
54
                    //otherwise data could be missing from the project and the user would not know.
55
                    throw new Exception($"Unable to find plugin {val}, please ensure the name of the plugin and plugin directories in the RoboClerk config file are correct.");
3✔
56
                }
57
            }
105✔
58
            //Since items from multiple plugins may reference each other, we need to update all links now.
59
            UpdateAllItemLinks();
43✔
60
        }
43✔
61

62
        private void UpdateAllItemLinks()
63
        {
43✔
64
            var itemLinkUpdater = new ItemLinkUpdater(this);
43✔
65
            itemLinkUpdater.UpdateAllItemLinks(plugins);
43✔
66

67
        }
43✔
68

69
        public override void RefreshDataSources()
UNCOV
70
        {
×
UNCOV
71
            foreach (var plugin in plugins)
×
UNCOV
72
            {
×
UNCOV
73
                plugin.RefreshItems();
×
UNCOV
74
            }
×
UNCOV
75
        }
×
76

77
        public override List<SOUPItem> GetAllSOUP()
78
        {
11✔
79
            List<SOUPItem> list = new List<SOUPItem>();
11✔
80
            foreach (var plugin in plugins)
91✔
81
            {
29✔
82
                list.AddRange(plugin.GetSOUP());
29✔
83
            }
29✔
84
            return list;
11✔
85
        }
11✔
86

87
        public override List<EliminatedSOUPItem> GetAllEliminatedSOUP()
88
        {
3✔
89
            List<EliminatedSOUPItem> list = new List<EliminatedSOUPItem>();
3✔
90
            foreach (var plugin in plugins)
27✔
91
            {
9✔
92
                list.AddRange(plugin.GetEliminatedSOUP());
9✔
93
            }
9✔
94
            return list;
3✔
95
        }
3✔
96

97
        public override List<RiskItem> GetAllRisks()
98
        {
10✔
99
            List<RiskItem> list = new List<RiskItem>();
10✔
100
            foreach (var plugin in plugins)
82✔
101
            {
26✔
102
                list.AddRange(plugin.GetRisks());
26✔
103
            }
26✔
104
            return list;
10✔
105
        }
10✔
106

107
        public override List<EliminatedRiskItem> GetAllEliminatedRisks()
108
        {
4✔
109
            List<EliminatedRiskItem> list = new List<EliminatedRiskItem>();
4✔
110
            foreach (var plugin in plugins)
36✔
111
            {
12✔
112
                list.AddRange(plugin.GetEliminatedRisks());
12✔
113
            }
12✔
114
            return list;
4✔
115
        }
4✔
116

117
        public override List<ExternalDependency> GetAllExternalDependencies()
118
        {
2✔
119
            var dependencies = new List<ExternalDependency>();
2✔
120
            foreach (var plugin in plugins)
16✔
121
            {
5✔
122
                dependencies.AddRange(plugin.GetDependencies());
5✔
123
            }
5✔
124
            return dependencies;
2✔
125
        }
2✔
126

127
        public override List<TestResult> GetAllTestResults()
128
        {
5✔
129
            var results = new List<TestResult>();
5✔
130
            foreach (var plugin in plugins)
41✔
131
            {
13✔
132
                results.AddRange(plugin.GetTestResults());
13✔
133
            }
13✔
134
            return results;
5✔
135
        }
5✔
136

137
        public override List<EliminatedTestResult> GetAllEliminatedTestResults()
UNCOV
138
        {
×
UNCOV
139
            var results = new List<EliminatedTestResult>();
×
UNCOV
140
            foreach (var plugin in plugins)
×
UNCOV
141
            {
×
UNCOV
142
                results.AddRange(plugin.GetEliminatedTestResults());
×
UNCOV
143
            }
×
UNCOV
144
            return results;
×
UNCOV
145
        }
×
146

147
        public override List<UnitTestItem> GetAllUnitTests()
148
        {
13✔
149
            var unitTests = new List<UnitTestItem>();
13✔
150
            foreach (var plugin in plugins)
109✔
151
            {
35✔
152
                unitTests.AddRange(plugin.GetUnitTests());
35✔
153
            }
35✔
154
            return unitTests;
13✔
155
        }
13✔
156

157
        public override List<EliminatedUnitTestItem> GetAllEliminatedUnitTests()
UNCOV
158
        {
×
UNCOV
159
            var unitTests = new List<EliminatedUnitTestItem>();
×
UNCOV
160
            foreach (var plugin in plugins)
×
UNCOV
161
            {
×
UNCOV
162
                unitTests.AddRange(plugin.GetEliminatedUnitTests());
×
UNCOV
163
            }
×
UNCOV
164
            return unitTests;
×
UNCOV
165
        }
×
166

167
        public override List<RequirementItem> GetAllSoftwareRequirements()
168
        {
33✔
169
            List<RequirementItem> items = new List<RequirementItem>();
33✔
170
            foreach (var plugin in plugins)
229✔
171
            {
65✔
172
                items.AddRange(plugin.GetSoftwareRequirements());
65✔
173
            }
65✔
174
            return items;
33✔
175
        }
33✔
176

177
        public override List<RequirementItem> GetAllSystemRequirements()
178
        {
33✔
179
            List<RequirementItem> items = new List<RequirementItem>();
33✔
180
            foreach (var plugin in plugins)
225✔
181
            {
63✔
182
                items.AddRange(plugin.GetSystemRequirements());
63✔
183
            }
63✔
184
            return items;
33✔
185
        }
33✔
186

187
        public override List<RequirementItem> GetAllDocumentationRequirements()
188
        {
17✔
189
            List<RequirementItem> items = new List<RequirementItem>();
17✔
190
            foreach (var plugin in plugins)
141✔
191
            {
45✔
192
                items.AddRange(plugin.GetDocumentationRequirements());
45✔
193
            }
45✔
194
            return items;
17✔
195
        }
17✔
196

197
        public override List<DocContentItem> GetAllDocContents()
198
        {
16✔
199
            List<DocContentItem> items = new List<DocContentItem>();
16✔
200
            foreach (var plugin in plugins)
132✔
201
            {
42✔
202
                items.AddRange(plugin.GetDocContents());
42✔
203
            }
42✔
204
            return items;
16✔
205
        }
16✔
206

207
        public override List<EliminatedDocContentItem> GetAllEliminatedDocContents()
208
        {
3✔
209
            List<EliminatedDocContentItem> items = new List<EliminatedDocContentItem>();
3✔
210
            foreach (var plugin in plugins)
27✔
211
            {
9✔
212
                items.AddRange(plugin.GetEliminatedDocContents());
9✔
213
            }
9✔
214
            return items;
3✔
215
        }
3✔
216

217
        public override List<SoftwareSystemTestItem> GetAllSoftwareSystemTests()
218
        {
14✔
219
            List<SoftwareSystemTestItem> items = new List<SoftwareSystemTestItem>();
14✔
220
            foreach (var plugin in plugins)
118✔
221
            {
38✔
222
                items.AddRange(plugin.GetSoftwareSystemTests());
38✔
223
            }
38✔
224
            return items;
14✔
225
        }
14✔
226

227
        public override List<AnomalyItem> GetAllAnomalies()
228
        {
12✔
229
            List<AnomalyItem> items = new List<AnomalyItem>();
12✔
230
            foreach (var plugin in plugins)
100✔
231
            {
32✔
232
                items.AddRange(plugin.GetAnomalies());
32✔
233
            }
32✔
234
            return items;
12✔
235
        }
12✔
236

237
        public override List<EliminatedAnomalyItem> GetAllEliminatedAnomalies()
238
        {
3✔
239
            List<EliminatedAnomalyItem> items = new List<EliminatedAnomalyItem>();
3✔
240
            foreach (var plugin in plugins)
27✔
241
            {
9✔
242
                items.AddRange(plugin.GetEliminatedAnomalies());
9✔
243
            }
9✔
244
            return items;
3✔
245
        }
3✔
246

247
        public override List<EliminatedRequirementItem> GetAllEliminatedSystemRequirements()
248
        {
4✔
249
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
250
            foreach (var plugin in plugins)
36✔
251
            {
12✔
252
                items.AddRange(plugin.GetEliminatedSystemRequirements());
12✔
253
            }
12✔
254
            return items;
4✔
255
        }
4✔
256

257
        public override List<EliminatedRequirementItem> GetAllEliminatedSoftwareRequirements()
258
        {
4✔
259
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
260
            foreach (var plugin in plugins)
36✔
261
            {
12✔
262
                items.AddRange(plugin.GetEliminatedSoftwareRequirements());
12✔
263
            }
12✔
264
            return items;
4✔
265
        }
4✔
266

267
        public override List<EliminatedRequirementItem> GetAllEliminatedDocumentationRequirements()
268
        {
4✔
269
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
270
            foreach (var plugin in plugins)
36✔
271
            {
12✔
272
                items.AddRange(plugin.GetEliminatedDocumentationRequirements());
12✔
273
            }
12✔
274
            return items;
4✔
275
        }
4✔
276

277
        public override List<EliminatedSoftwareSystemTestItem> GetAllEliminatedSoftwareSystemTests()
278
        {
4✔
279
            List<EliminatedSoftwareSystemTestItem> items = new List<EliminatedSoftwareSystemTestItem>();
4✔
280
            foreach (var plugin in plugins)
36✔
281
            {
12✔
282
                items.AddRange(plugin.GetEliminatedSoftwareSystemTests());
12✔
283
            }
12✔
284
            return items;
4✔
285
        }
4✔
286
    }
287
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc