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

samsmithnz / RepoGovernance / 16726832225

04 Aug 2025 03:04PM UTC coverage: 71.373% (-1.4%) from 72.727%
16726832225

push

github

web-flow
Updated to handle new items easier. (#981)

* Updated to handle new items easier.

* FIx to update test

* Update src/RepoGovernance.Core/TableStorage/AzureTableStorageDA.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

352 of 530 branches covered (66.42%)

Branch coverage included in aggregate %.

4 of 37 new or added lines in 3 files covered. (10.81%)

3 existing lines in 1 file now uncovered.

937 of 1276 relevant lines covered (73.43%)

40.59 hits per line

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

29.53
/src/RepoGovernance.Service/Controllers/SummaryItemsController.cs
1
using Microsoft.AspNetCore.Mvc;
2
using RepoGovernance.Core;
3
using RepoGovernance.Core.Models;
4
using RepoGovernance.Service.Models;
5

6
namespace RepoGovernance.Service.Controllers
7
{
8
    [Route("api/[controller]")]
9
    [ApiController]
10
    public class SummaryItemsController : ControllerBase
11
    {
12
        private readonly IConfiguration Configuration;
13

14
        public SummaryItemsController(IConfiguration configuration)
5✔
15
        {
5✔
16
            Configuration = configuration;
5✔
17
        }
5✔
18

19
        [HttpGet("GetRepos")]
20
        public async Task<ActionResult<List<UserOwnerRepo>>> GetRepos(string owner)
21
        {
×
22
            if (!ModelState.IsValid)
×
23
            {
×
24
                return BadRequest(ModelState);
×
25
            }
26

27
            return await SummaryItemsDA.GetRepos(Configuration["AppSettings:CosmosDBConnectionString"], owner);
×
28
        }
×
29

30
        /// <summary>
31
        /// Update a target of summary item
32
        /// </summary>
33
        /// <param name="user">The user - often is also the owner, that has access to organizations</param>
34
        /// <param name="owner">The owner or organization</param>
35
        /// <param name="repo">the repository being updated</param>
36
        /// <returns></returns>
37
        [HttpGet("UpdateSummaryItem")]
38
        public async Task<ActionResult<int>> UpdateSummaryItem(string user, string owner, string repo)
39
        {
×
40
            if (!ModelState.IsValid)
×
41
            {
×
42
                return BadRequest(ModelState);
×
43
            }
44

45
            return await SummaryItemsDA.UpdateSummaryItem(
×
46
                Configuration["AppSettings:GitHubClientId"],
×
47
                Configuration["AppSettings:GitHubClientSecret"],
×
48
                Configuration["AppSettings:CosmosDBConnectionString"],//Configuration["AppSettings:StorageConnectionString"],
×
49
                Configuration["AppSettings:DevOpsServiceURL"],
×
50
                user, owner, repo,
×
NEW
51
                Configuration["AppSettings:GitHubId"],
×
NEW
52
                Configuration["AppSettings:GitHubSecret"],
×
53
                Configuration["AppSettings:AzureTenantId"],
×
54
                Configuration["AppSettings:AzureClientId"],
×
55
                Configuration["AppSettings:AzureClientSecret"]);
×
56
        }
×
57

58
        /// <summary>
59
        /// Update a target of summary item with optional NuGet package data
60
        /// </summary>
61
        /// <param name="request">The update request containing user, owner, repo, and optional NuGet payloads</param>
62
        /// <returns></returns>
63
        [HttpPost("UpdateSummaryItem")]
64
        public async Task<ActionResult<int>> UpdateSummaryItemWithNuGet(UpdateSummaryItemRequest request)
65
        {
2✔
66
            if (!ModelState.IsValid)
2!
67
            {
×
68
                return BadRequest(ModelState);
×
69
            }
70

71
            if (request?.User == null || request?.Owner == null || request?.Repo == null)
2!
72
            {
2✔
73
                return BadRequest("User, Owner, and Repo are required");
2✔
74
            }
75

76
            return await SummaryItemsDA.UpdateSummaryItem(
×
77
                Configuration["AppSettings:GitHubClientId"],
×
78
                Configuration["AppSettings:GitHubClientSecret"],
×
79
                Configuration["AppSettings:CosmosDBConnectionString"],
×
80
                Configuration["AppSettings:DevOpsServiceURL"],
×
81
                request.User, request.Owner, request.Repo,
×
NEW
82
                Configuration["AppSettings:GitHubId"],
×
NEW
83
                Configuration["AppSettings:GitHubSecret"],
×
84
                Configuration["AppSettings:AzureTenantId"],
×
85
                Configuration["AppSettings:AzureClientId"],
×
86
                Configuration["AppSettings:AzureClientSecret"],
×
87
                null, // azureDeployment
×
88
                request.NugetDeprecatedPayload,
×
89
                request.NugetOutdatedPayload,
×
90
                request.NugetVulnerablePayload);
×
91
        }
2✔
92

93
        [HttpPost("UpdateSummaryItemNuGetPackageStats")]
94
        public async Task<ActionResult<int>> UpdateSummaryItemNuGetPackageStats(NuGetPayload nugetPayload)
95
        {
2✔
96
            if (!ModelState.IsValid)
2!
97
            {
×
98
                return BadRequest(ModelState);
×
99
            }
100

101
            if (nugetPayload != null)
2✔
102
            {
1✔
103
                string? repo = nugetPayload?.Repo;
1!
104
                string? owner = nugetPayload?.Owner;
1!
105
                string? user = nugetPayload?.User;
1!
106
                //There is some weirdness when the json is embedded in this object and then the object is serialized a second time - it returns an array of strings.
107
                string? jsonPayload = nugetPayload?.JsonPayloadString;
1!
108
                string? payloadType = nugetPayload?.PayloadType;
1!
109

110
                if (repo == null || owner == null || user == null || jsonPayload == null || payloadType == null)
1!
111
                {
1✔
112
                    return BadRequest("Repo, Owner, User, JsonPayloadString, and PayloadType are required");
1✔
113
                }
114
                return await SummaryItemsDA.UpdateSummaryItemNuGetPackageStats(
×
115
                    Configuration["AppSettings:CosmosDBConnectionString"],
×
116
                    user, owner, repo,
×
NEW
117
                    Configuration["AppSettings:GitHubId"],
×
NEW
118
                    Configuration["AppSettings:GitHubSecret"],
×
UNCOV
119
                    jsonPayload, payloadType);
×
120
            }
121
            else
122
            {
1✔
123
                return BadRequest("NuGet payload is required");
1✔
124
            }
125
        }
2✔
126

127
        /// <summary>
128
        /// Get a list of summary item
129
        /// </summary>
130
        /// <param name="user">The user - often is also the owner, that has access to organizations</param>
131
        /// <returns></returns>
132
        [HttpGet("GetSummaryItems")]
133
        public async Task<ActionResult<List<SummaryItem>>> GetSummaryItems(string user)
134
        {
×
135
            if (!ModelState.IsValid)
×
136
            {
×
137
                return BadRequest(ModelState);
×
138
            }
139

140
            return await SummaryItemsDA.GetSummaryItems(
×
141
                Configuration["AppSettings:CosmosDBConnectionString"], //Configuration["AppSettings:StorageConnectionString"],
×
NEW
142
                user,
×
NEW
143
                Configuration["AppSettings:GitHubId"],
×
NEW
144
                Configuration["AppSettings:GitHubSecret"]);
×
UNCOV
145
        }
×
146

147
        /// <summary>
148
        /// Get a summary item
149
        /// </summary>
150
        /// <param name="owner">the owner or organization</param>
151
        /// <param name="repo">the repo</param>
152
        /// <returns></returns>
153
        [HttpGet("GetSummaryItem")]
154
        public async Task<ActionResult<SummaryItem?>> GetSummaryItem(string user, string owner, string repo)
155
        {
×
156
            if (!ModelState.IsValid)
×
157
            {
×
158
                return BadRequest(ModelState);
×
159
            }
160

161
            return await SummaryItemsDA.GetSummaryItem(
×
162
                Configuration["AppSettings:CosmosDBConnectionString"],
×
NEW
163
                user, owner, repo,
×
NEW
164
                Configuration["AppSettings:GitHubId"],
×
NEW
165
                Configuration["AppSettings:GitHubSecret"]);
×
UNCOV
166
        }
×
167

168

169
        [HttpGet("ApproveSummaryItemPRs")]
170
        public async Task<ActionResult<bool>> ApproveSummaryItemPRs(//string user, 
171
            string owner, string repo, string approver)
172
        {
×
173
            if (!ModelState.IsValid)
×
174
            {
×
175
                return BadRequest(ModelState);
×
176
            }
177

178
            return await SummaryItemsDA.ApproveSummaryItemPRs(
×
179
               Configuration["AppSettings:GitHubClientId"],
×
180
               Configuration["AppSettings:GitHubClientSecret"],
×
181
               owner, repo, approver);
×
182
        }
×
183
    }
184
}
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