From 79b66cb8b4f9a88cfe5d88d9031d6e848f390ee0 Mon Sep 17 00:00:00 2001 From: csimonapastore Date: Sat, 4 May 2024 18:47:58 +0200 Subject: [PATCH] Fixing SonarCloud integration + fixing CodeSmells --- .github/workflows/build.yml | 3 +- .gitignore | 3 +- MainProject.Tests/Program_Tests.cs | 19 +++-- MainProject/Controllers/BaseController.cs | 82 ++++++++++---------- MainProject/Controllers/RootController.cs | 4 +- MainProject/Controllers/VersionController.cs | 4 +- MainProject/Program.cs | 16 +--- 7 files changed, 68 insertions(+), 63 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 347f3ca..e876868 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,5 +44,6 @@ jobs: shell: powershell run: | .\.sonar\scanner\dotnet-sonarscanner begin /k:"csimonapastore_BasicDotnetTemplate" /o:"csimonapastore-github" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" - dotnet build + dotnet build --no-incremental + dotnet test --collect "Code Coverage" .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" diff --git a/.gitignore b/.gitignore index 92076e1..27f0df6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ **/obj **/bin -**/appsettings.*.json \ No newline at end of file +**/appsettings.*.json +**/TestResults \ No newline at end of file diff --git a/MainProject.Tests/Program_Tests.cs b/MainProject.Tests/Program_Tests.cs index dcbab1d..e2eb38f 100644 --- a/MainProject.Tests/Program_Tests.cs +++ b/MainProject.Tests/Program_Tests.cs @@ -12,7 +12,7 @@ namespace BasicDotnetTemplate.MainProject.Tests; public class Program_Tests { [TestMethod] - public async Task Program_Configuration_IsValid() + public void Program_Configuration_IsValid() { Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development"); @@ -36,12 +36,21 @@ public class Program_Tests if (execute != null) { - object initializeObj = execute.Invoke(null, new object[] { }); - MethodInfo initialize = (MethodInfo)initializeObj; + object? initializeObj = execute != null ? execute.Invoke(null, Array.Empty()) : throw new ArgumentNullException("LaunchConfiguration not found"); + MethodInfo? initialize = initializeObj != null ? (MethodInfo)initializeObj : throw new ArgumentNullException("Unable to convert object because execute.Invoke is null"); if (initialize != null) { - initialize.Invoke(null, new object[] { new string[] { } }); - Assert.IsTrue(true); + var success = false; + try + { + initialize.Invoke(null, new object[] { Array.Empty() }); + success = true; + } + catch (Exception innerException) + { + Assert.Fail($"An exception was thrown during initialize.Invoke: {innerException.Message}"); + } + Assert.IsTrue(success); } else { diff --git a/MainProject/Controllers/BaseController.cs b/MainProject/Controllers/BaseController.cs index 09e4ce3..e95890b 100644 --- a/MainProject/Controllers/BaseController.cs +++ b/MainProject/Controllers/BaseController.cs @@ -3,56 +3,58 @@ using Microsoft.AspNetCore.Mvc; using BasicDotnetTemplate.MainProject.Models.Api.Response; using BasicDotnetTemplate.MainProject.Models.Settings; -[Controller] -public abstract class BaseController : ControllerBase +namespace BasicDotnetTemplate.MainProject.Controllers { - protected readonly IConfiguration _configuration; - protected readonly AppSettings _appSettings; - - public BaseController( - IConfiguration configuration - ) + public abstract class BaseController : ControllerBase { - _configuration = configuration; - _appSettings = new AppSettings(); - _configuration.GetSection("AppSettings").Bind(_appSettings); - } + protected readonly IConfiguration _configuration; + protected readonly AppSettings _appSettings; + + public BaseController( + IConfiguration configuration + ) + { + _configuration = configuration; + _appSettings = new AppSettings(); + _configuration.GetSection("AppSettings").Bind(_appSettings); + } #nullable enable - private BaseResponse CreateResponse(HttpStatusCode status, string message, object? data = null) - { - return new BaseResponse() + private BaseResponse CreateResponse(HttpStatusCode status, string message, object? data = null) { - Status = (int)status, - Message = message, - Data = data - }; - } + return new BaseResponse() + { + Status = (int)status, + Message = message, + Data = data + }; + } - protected new IActionResult Created(string message, object? data = null) - { - return StatusCode((int)HttpStatusCode.Created, CreateResponse(HttpStatusCode.Created, message, data)); - } + protected new IActionResult Created(string message, object? data = null) + { + return StatusCode((int)HttpStatusCode.Created, CreateResponse(HttpStatusCode.Created, message, data)); + } - protected IActionResult Success(string message, object? data = null) - { - return StatusCode((int)HttpStatusCode.OK, CreateResponse(HttpStatusCode.OK, message, data)); - } + protected IActionResult Success(string message, object? data = null) + { + return StatusCode((int)HttpStatusCode.OK, CreateResponse(HttpStatusCode.OK, message, data)); + } - protected IActionResult NotFound(string message, object? data = null) - { - return StatusCode((int)HttpStatusCode.NotFound, CreateResponse(HttpStatusCode.NotFound, message, data)); - } + protected IActionResult NotFound(string message, object? data = null) + { + return StatusCode((int)HttpStatusCode.NotFound, CreateResponse(HttpStatusCode.NotFound, message, data)); + } - protected IActionResult BadRequest(string message, object? data = null) - { - return StatusCode((int)HttpStatusCode.BadRequest, CreateResponse(HttpStatusCode.BadRequest, message, data)); - } + protected IActionResult BadRequest(string message, object? data = null) + { + return StatusCode((int)HttpStatusCode.BadRequest, CreateResponse(HttpStatusCode.BadRequest, message, data)); + } - protected IActionResult InternalServerError(string message) - { - return StatusCode((int)HttpStatusCode.InternalServerError, CreateResponse(HttpStatusCode.InternalServerError, message)); - } + protected IActionResult InternalServerError(string message) + { + return StatusCode((int)HttpStatusCode.InternalServerError, CreateResponse(HttpStatusCode.InternalServerError, message)); + } #nullable disable + } } \ No newline at end of file diff --git a/MainProject/Controllers/RootController.cs b/MainProject/Controllers/RootController.cs index ca2bb3e..81f8a09 100644 --- a/MainProject/Controllers/RootController.cs +++ b/MainProject/Controllers/RootController.cs @@ -3,6 +3,7 @@ using BasicDotnetTemplate.MainProject.Models.Settings; namespace BasicDotnetTemplate.MainProject.Controllers { + [Route("")] public class RootController : BaseController { public RootController( @@ -12,8 +13,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers } - [HttpGet] - [Route("")] + [HttpGet("")] public IActionResult GetVersion() { return Success(String.Empty, "Success"); diff --git a/MainProject/Controllers/VersionController.cs b/MainProject/Controllers/VersionController.cs index 88b527b..6e24509 100644 --- a/MainProject/Controllers/VersionController.cs +++ b/MainProject/Controllers/VersionController.cs @@ -3,6 +3,7 @@ using BasicDotnetTemplate.MainProject.Models.Settings; namespace BasicDotnetTemplate.MainProject.Controllers { + [Route("[controller]")] public class VersionController : BaseController { public VersionController( @@ -12,8 +13,7 @@ namespace BasicDotnetTemplate.MainProject.Controllers } - [HttpGet] - [Route("version")] + [HttpGet("get")] public IActionResult GetVersion() { return Success(String.Empty, _appSettings?.Settings?.Version); diff --git a/MainProject/Program.cs b/MainProject/Program.cs index 1ed6985..07224d2 100644 --- a/MainProject/Program.cs +++ b/MainProject/Program.cs @@ -35,15 +35,11 @@ internal static class Program { private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); - internal static WebApplication app; - - public static void Initialize(string[] args) + public static WebApplication Initialize(string[] args) { Logger.Info("[Program][Main] Start building"); var builder = WebApplication.CreateBuilder(args); - Logger.Info("[Program][Main] Creating configuration"); - var _configuration = new ConfigurationBuilder() .SetBasePath(System.AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) @@ -113,7 +109,7 @@ internal static class Program options.SwaggerDoc("v1", openApiInfo); }); - app = builder.Build(); + WebApplication app = builder.Build(); // REGISTER MIDDLEWARE HERE app.UseRouting(); @@ -136,19 +132,15 @@ internal static class Program }); } - Logger.Info("[Program][Main] Launching app"); + return app; } public static void Main(string[] args) { ReflectionProgram.LaunchConfiguration(); - Initialize(args); - + WebApplication app = Initialize(args); app.Run(); - - Logger.Info("[Program][Main] Shutting down logger"); - NLog.LogManager.Shutdown(); // Flush and close down internal threads and timers }