From 1dcae75dee1d295a250c3b3a6b4995a906abafe0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:54:34 +0000 Subject: [PATCH 1/3] Initial plan From 3790ee7a7a9d8f6e703d3de09f0074f89931558d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 18:58:20 +0000 Subject: [PATCH 2/3] Fix Sonar code smell issues Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .../GitHubRepoConnectorTests.cs | 22 +++++++++---------- .../MockRepoConnectorTests.cs | 2 +- .../MockGitHubGraphQLHttpMessageHandler.cs | 6 ++--- .../GitHub/MockableGitHubRepoConnector.cs | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs b/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs index 0bfcab9..9e3d7f9 100644 --- a/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs +++ b/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs @@ -136,7 +136,7 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithMultipleVersi // Should have changelog link Assert.IsNotNull(buildInfo.CompleteChangelogLink); - Assert.IsTrue(buildInfo.CompleteChangelogLink.TargetUrl.Contains("v1.1.0...v2.0.0")); + Assert.Contains("v1.1.0...v2.0.0", buildInfo.CompleteChangelogLink.TargetUrl); } /// @@ -160,7 +160,7 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithPullRequests_ Merged: true, MergeCommitSha: "commit3", HeadRefOid: "feature-branch", - Labels: new List { "feature", "enhancement" }), + Labels: ["feature", "enhancement"]), new MockPullRequest( Number: 100, Title: "Fix critical bug", @@ -168,7 +168,7 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithPullRequests_ Merged: true, MergeCommitSha: "commit2", HeadRefOid: "bugfix-branch", - Labels: new List { "bug" })) + Labels: ["bug"])) .AddIssuesResponse() .AddTagsResponse( new MockTag("v1.1.0", "commit3"), @@ -195,14 +195,14 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithPullRequests_ // PRs without linked issues are treated based on their labels // PR 100 with "bug" label should be in bugs Assert.IsNotNull(buildInfo.Bugs); - Assert.IsTrue(buildInfo.Bugs.Count >= 1, $"Expected at least 1 bug, got {buildInfo.Bugs.Count}"); + Assert.IsGreaterThanOrEqualTo(buildInfo.Bugs.Count, 1, $"Expected at least 1 bug, got {buildInfo.Bugs.Count}"); var bugPR = buildInfo.Bugs.FirstOrDefault(b => b.Index == 100); Assert.IsNotNull(bugPR, "PR 100 should be categorized as a bug"); Assert.AreEqual("Fix critical bug", bugPR.Title); // PR 101 with "feature" label should be in changes Assert.IsNotNull(buildInfo.Changes); - Assert.IsTrue(buildInfo.Changes.Count >= 1, $"Expected at least 1 change, got {buildInfo.Changes.Count}"); + Assert.IsGreaterThanOrEqualTo(buildInfo.Changes.Count, 1, $"Expected at least 1 change, got {buildInfo.Changes.Count}"); var featurePR = buildInfo.Changes.FirstOrDefault(c => c.Index == 101); Assert.IsNotNull(featurePR, "PR 101 should be categorized as a change"); Assert.AreEqual("Add new feature", featurePR.Title); @@ -225,19 +225,19 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithOpenIssues_Id Title: "Known bug in feature X", Url: "https://github.com/test/repo/issues/201", State: "OPEN", - Labels: new List { "bug" }), + Labels: ["bug"]), new MockIssue( Number: 202, Title: "Feature request for Y", Url: "https://github.com/test/repo/issues/202", State: "OPEN", - Labels: new List { "feature" }), + Labels: ["feature"]), new MockIssue( Number: 203, Title: "Fixed bug", Url: "https://github.com/test/repo/issues/203", State: "CLOSED", - Labels: new List { "bug" })) + Labels: ["bug"])) .AddTagsResponse(new MockTag("v1.0.0", "commit1")); using var mockHttpClient = new HttpClient(mockHandler); @@ -258,11 +258,11 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithOpenIssues_Id // Known issues are open issues that aren't linked to any changes in this release Assert.IsNotNull(buildInfo.KnownIssues); // Since we have no PRs, all open issues should be known issues - Assert.IsTrue(buildInfo.KnownIssues.Count >= 1, $"Expected at least 1 known issue, got {buildInfo.KnownIssues.Count}"); + Assert.IsGreaterThanOrEqualTo(buildInfo.KnownIssues.Count, 1, $"Expected at least 1 known issue, got {buildInfo.KnownIssues.Count}"); // Verify at least one known issue is present var knownIssueTitles = buildInfo.KnownIssues.Select(i => i.Title).ToList(); - Assert.IsTrue(knownIssueTitles.Any(t => t.Contains("Known bug") || t.Contains("Feature request")), - "Should have at least one of the open issues as a known issue"); + var hasExpectedIssue = knownIssueTitles.Exists(t => t.Contains("Known bug") || t.Contains("Feature request")); + Assert.IsTrue(hasExpectedIssue, "Should have at least one of the open issues as a known issue"); } } diff --git a/test/DemaConsulting.BuildMark.Tests/MockRepoConnectorTests.cs b/test/DemaConsulting.BuildMark.Tests/MockRepoConnectorTests.cs index 141b158..2d335ee 100644 --- a/test/DemaConsulting.BuildMark.Tests/MockRepoConnectorTests.cs +++ b/test/DemaConsulting.BuildMark.Tests/MockRepoConnectorTests.cs @@ -147,7 +147,7 @@ public async Task MockRepoConnector_GetBuildInformationAsync_CategorizesChangesC // - Issue #2 is a bug (type "bug") // - Issue #3 is documentation (type "documentation") var allItems = buildInfo.Changes.Concat(buildInfo.Bugs).ToList(); - Assert.IsTrue(allItems.Any(), "Should have at least one change"); + Assert.IsGreaterThan(0, allItems.Count, "Should have at least one change"); // Verify bugs only contain items with type "bug" foreach (var bug in buildInfo.Bugs) diff --git a/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockGitHubGraphQLHttpMessageHandler.cs b/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockGitHubGraphQLHttpMessageHandler.cs index 8ee8167..6d44c16 100644 --- a/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockGitHubGraphQLHttpMessageHandler.cs +++ b/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockGitHubGraphQLHttpMessageHandler.cs @@ -95,7 +95,7 @@ public sealed class MockGitHubGraphQLHttpMessageHandler : HttpMessageHandler /// /// Dictionary mapping request patterns to response content. /// - private readonly Dictionary _responses = new(); + private readonly Dictionary _responses = []; /// /// Default response content to return when no pattern matches. @@ -304,7 +304,7 @@ public MockGitHubGraphQLHttpMessageHandler AddPullRequestsResponse( var prNodes = string.Join(",\n ", pullRequests.Select(pr => { - var labelsJson = pr.Labels.Any() + var labelsJson = pr.Labels.Count > 0 ? string.Join(",\n ", pr.Labels.Select(l => $@"{{ ""name"": ""{l}"" }}")) : string.Empty; @@ -364,7 +364,7 @@ public MockGitHubGraphQLHttpMessageHandler AddIssuesResponse( var issueNodes = string.Join(",\n ", issues.Select(issue => { - var labelsJson = issue.Labels.Any() + var labelsJson = issue.Labels.Count > 0 ? string.Join(",\n ", issue.Labels.Select(l => $@"{{ ""name"": ""{l}"" }}")) : string.Empty; diff --git a/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockableGitHubRepoConnector.cs b/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockableGitHubRepoConnector.cs index f3809cb..2f7e81f 100644 --- a/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockableGitHubRepoConnector.cs +++ b/test/DemaConsulting.BuildMark.Tests/RepoConnectors/GitHub/MockableGitHubRepoConnector.cs @@ -35,7 +35,7 @@ internal sealed class MockableGitHubRepoConnector : GitHubRepoConnector /// /// Mock responses for RunCommandAsync. /// - private readonly Dictionary _commandResponses = new(); + private readonly Dictionary _commandResponses = []; /// /// Mock HttpClient for GraphQL requests. From add021b34466f9431f5190beb271e53c7cbbae52 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 19:21:38 +0000 Subject: [PATCH 3/3] Fix parameter order for Assert.IsGreaterThanOrEqualTo Co-authored-by: Malcolmnixon <1863707+Malcolmnixon@users.noreply.github.com> --- .../GitHubRepoConnectorTests.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs b/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs index 9e3d7f9..dfa3a36 100644 --- a/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs +++ b/test/DemaConsulting.BuildMark.Tests/GitHubRepoConnectorTests.cs @@ -195,14 +195,14 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithPullRequests_ // PRs without linked issues are treated based on their labels // PR 100 with "bug" label should be in bugs Assert.IsNotNull(buildInfo.Bugs); - Assert.IsGreaterThanOrEqualTo(buildInfo.Bugs.Count, 1, $"Expected at least 1 bug, got {buildInfo.Bugs.Count}"); + Assert.IsGreaterThanOrEqualTo(1, buildInfo.Bugs.Count, $"Expected at least 1 bug, got {buildInfo.Bugs.Count}"); var bugPR = buildInfo.Bugs.FirstOrDefault(b => b.Index == 100); Assert.IsNotNull(bugPR, "PR 100 should be categorized as a bug"); Assert.AreEqual("Fix critical bug", bugPR.Title); // PR 101 with "feature" label should be in changes Assert.IsNotNull(buildInfo.Changes); - Assert.IsGreaterThanOrEqualTo(buildInfo.Changes.Count, 1, $"Expected at least 1 change, got {buildInfo.Changes.Count}"); + Assert.IsGreaterThanOrEqualTo(1, buildInfo.Changes.Count, $"Expected at least 1 change, got {buildInfo.Changes.Count}"); var featurePR = buildInfo.Changes.FirstOrDefault(c => c.Index == 101); Assert.IsNotNull(featurePR, "PR 101 should be categorized as a change"); Assert.AreEqual("Add new feature", featurePR.Title); @@ -258,7 +258,7 @@ public async Task GitHubRepoConnector_GetBuildInformationAsync_WithOpenIssues_Id // Known issues are open issues that aren't linked to any changes in this release Assert.IsNotNull(buildInfo.KnownIssues); // Since we have no PRs, all open issues should be known issues - Assert.IsGreaterThanOrEqualTo(buildInfo.KnownIssues.Count, 1, $"Expected at least 1 known issue, got {buildInfo.KnownIssues.Count}"); + Assert.IsGreaterThanOrEqualTo(1, buildInfo.KnownIssues.Count, $"Expected at least 1 known issue, got {buildInfo.KnownIssues.Count}"); // Verify at least one known issue is present var knownIssueTitles = buildInfo.KnownIssues.Select(i => i.Title).ToList();