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

MeindertN / RoboClerk / 19315366704

12 Nov 2025 05:53PM UTC coverage: 72.366% (-0.7%) from 73.034%
19315366704

push

github

MeindertN
WIP: Added support for listing template files for inclusion in other files, getting and changing the project configuration, refreshing the project (with or without tag calculations) and refreshing the project datasources. TODO: ensure the refresh works as expected in all plugins and add the ability to return the specifications and parameters for all content creators. For this, each individual content creator needs to be able to describe its own parameters.

1747 of 2521 branches covered (69.3%)

Branch coverage included in aggregate %.

61 of 71 new or added lines in 4 files covered. (85.92%)

239 existing lines in 13 files now uncovered.

5685 of 7749 relevant lines covered (73.36%)

54.75 hits per line

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

90.61
/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
        }
43✔
59

60
        public override void RefreshDataSources()
NEW
61
        {
×
NEW
62
            foreach (var plugin in plugins)
×
NEW
63
            {
×
NEW
64
                plugin.RefreshItems();
×
NEW
65
            }
×
NEW
66
        }
×
67

68
        public override List<SOUPItem> GetAllSOUP()
69
        {
11✔
70
            List<SOUPItem> list = new List<SOUPItem>();
11✔
71
            foreach (var plugin in plugins)
91✔
72
            {
29✔
73
                list.AddRange(plugin.GetSOUP());
29✔
74
            }
29✔
75
            return list;
11✔
76
        }
11✔
77

78
        public override List<EliminatedSOUPItem> GetAllEliminatedSOUP()
79
        {
3✔
80
            List<EliminatedSOUPItem> list = new List<EliminatedSOUPItem>();
3✔
81
            foreach (var plugin in plugins)
27✔
82
            {
9✔
83
                list.AddRange(plugin.GetEliminatedSOUP());
9✔
84
            }
9✔
85
            return list;
3✔
86
        }
3✔
87

88
        public override List<RiskItem> GetAllRisks()
89
        {
10✔
90
            List<RiskItem> list = new List<RiskItem>();
10✔
91
            foreach (var plugin in plugins)
82✔
92
            {
26✔
93
                list.AddRange(plugin.GetRisks());
26✔
94
            }
26✔
95
            return list;
10✔
96
        }
10✔
97

98
        public override List<EliminatedRiskItem> GetAllEliminatedRisks()
99
        {
4✔
100
            List<EliminatedRiskItem> list = new List<EliminatedRiskItem>();
4✔
101
            foreach (var plugin in plugins)
36✔
102
            {
12✔
103
                list.AddRange(plugin.GetEliminatedRisks());
12✔
104
            }
12✔
105
            return list;
4✔
106
        }
4✔
107

108
        public override List<ExternalDependency> GetAllExternalDependencies()
109
        {
2✔
110
            var dependencies = new List<ExternalDependency>();
2✔
111
            foreach (var plugin in plugins)
16✔
112
            {
5✔
113
                dependencies.AddRange(plugin.GetDependencies());
5✔
114
            }
5✔
115
            return dependencies;
2✔
116
        }
2✔
117

118
        public override List<TestResult> GetAllTestResults()
119
        {
×
120
            var results = new List<TestResult>();
×
121
            foreach (var plugin in plugins)
×
122
            {
×
123
                results.AddRange(plugin.GetTestResults());
×
124
            }
×
125
            return results;
×
126
        }
×
127

128
        public override List<UnitTestItem> GetAllUnitTests()
129
        {
13✔
130
            var unitTests = new List<UnitTestItem>();
13✔
131
            foreach (var plugin in plugins)
109✔
132
            {
35✔
133
                unitTests.AddRange(plugin.GetUnitTests());
35✔
134
            }
35✔
135
            return unitTests;
13✔
136
        }
13✔
137

138
        public override List<RequirementItem> GetAllSoftwareRequirements()
139
        {
33✔
140
            List<RequirementItem> items = new List<RequirementItem>();
33✔
141
            foreach (var plugin in plugins)
229✔
142
            {
65✔
143
                items.AddRange(plugin.GetSoftwareRequirements());
65✔
144
            }
65✔
145
            return items;
33✔
146
        }
33✔
147

148
        public override List<RequirementItem> GetAllSystemRequirements()
149
        {
33✔
150
            List<RequirementItem> items = new List<RequirementItem>();
33✔
151
            foreach (var plugin in plugins)
225✔
152
            {
63✔
153
                items.AddRange(plugin.GetSystemRequirements());
63✔
154
            }
63✔
155
            return items;
33✔
156
        }
33✔
157

158
        public override List<RequirementItem> GetAllDocumentationRequirements()
159
        {
17✔
160
            List<RequirementItem> items = new List<RequirementItem>();
17✔
161
            foreach (var plugin in plugins)
141✔
162
            {
45✔
163
                items.AddRange(plugin.GetDocumentationRequirements());
45✔
164
            }
45✔
165
            return items;
17✔
166
        }
17✔
167

168
        public override List<DocContentItem> GetAllDocContents()
169
        {
16✔
170
            List<DocContentItem> items = new List<DocContentItem>();
16✔
171
            foreach (var plugin in plugins)
132✔
172
            {
42✔
173
                items.AddRange(plugin.GetDocContents());
42✔
174
            }
42✔
175
            return items;
16✔
176
        }
16✔
177

178
        public override List<EliminatedDocContentItem> GetAllEliminatedDocContents()
179
        {
3✔
180
            List<EliminatedDocContentItem> items = new List<EliminatedDocContentItem>();
3✔
181
            foreach (var plugin in plugins)
27✔
182
            {
9✔
183
                items.AddRange(plugin.GetEliminatedDocContents());
9✔
184
            }
9✔
185
            return items;
3✔
186
        }
3✔
187

188
        public override List<SoftwareSystemTestItem> GetAllSoftwareSystemTests()
189
        {
14✔
190
            List<SoftwareSystemTestItem> items = new List<SoftwareSystemTestItem>();
14✔
191
            foreach (var plugin in plugins)
118✔
192
            {
38✔
193
                items.AddRange(plugin.GetSoftwareSystemTests());
38✔
194
            }
38✔
195
            return items;
14✔
196
        }
14✔
197

198
        public override List<AnomalyItem> GetAllAnomalies()
199
        {
12✔
200
            List<AnomalyItem> items = new List<AnomalyItem>();
12✔
201
            foreach (var plugin in plugins)
100✔
202
            {
32✔
203
                items.AddRange(plugin.GetAnomalies());
32✔
204
            }
32✔
205
            return items;
12✔
206
        }
12✔
207

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

218
        public override List<EliminatedRequirementItem> GetAllEliminatedSystemRequirements()
219
        {
4✔
220
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
221
            foreach (var plugin in plugins)
36✔
222
            {
12✔
223
                items.AddRange(plugin.GetEliminatedSystemRequirements());
12✔
224
            }
12✔
225
            return items;
4✔
226
        }
4✔
227

228
        public override List<EliminatedRequirementItem> GetAllEliminatedSoftwareRequirements()
229
        {
4✔
230
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
231
            foreach (var plugin in plugins)
36✔
232
            {
12✔
233
                items.AddRange(plugin.GetEliminatedSoftwareRequirements());
12✔
234
            }
12✔
235
            return items;
4✔
236
        }
4✔
237

238
        public override List<EliminatedRequirementItem> GetAllEliminatedDocumentationRequirements()
239
        {
4✔
240
            List<EliminatedRequirementItem> items = new List<EliminatedRequirementItem>();
4✔
241
            foreach (var plugin in plugins)
36✔
242
            {
12✔
243
                items.AddRange(plugin.GetEliminatedDocumentationRequirements());
12✔
244
            }
12✔
245
            return items;
4✔
246
        }
4✔
247

248
        public override List<EliminatedSoftwareSystemTestItem> GetAllEliminatedSoftwareSystemTests()
249
        {
4✔
250
            List<EliminatedSoftwareSystemTestItem> items = new List<EliminatedSoftwareSystemTestItem>();
4✔
251
            foreach (var plugin in plugins)
36✔
252
            {
12✔
253
                items.AddRange(plugin.GetEliminatedSoftwareSystemTests());
12✔
254
            }
12✔
255
            return items;
4✔
256
        }
4✔
257
    }
258
}
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