From 079585066642738045244e4e98e15b0114a4256e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 14:21:45 +0200 Subject: [PATCH 1/8] BaseTestd --- src/Backend/DiunaBI.Tests/BaseTests.cs | 42 +++++++++++++++++++ .../DiunaBI.Tests/DiunaBI.Tests.csproj | 24 +++++++++++ .../Controllers/PingController.cs | 2 +- src/Backend/DiunaBI.WebAPI/Program.cs | 4 +- src/Backend/DiunaBI.sln | 8 +++- 5 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 src/Backend/DiunaBI.Tests/BaseTests.cs create mode 100644 src/Backend/DiunaBI.Tests/DiunaBI.Tests.csproj diff --git a/src/Backend/DiunaBI.Tests/BaseTests.cs b/src/Backend/DiunaBI.Tests/BaseTests.cs new file mode 100644 index 0000000..42e80eb --- /dev/null +++ b/src/Backend/DiunaBI.Tests/BaseTests.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Mvc.Testing; +using Xunit; +using System.Text.Json; + +namespace DiunaBI.Tests; + +public class ApiConnectionTests : IClassFixture> +{ + private readonly WebApplicationFactory _factory; + + public ApiConnectionTests(WebApplicationFactory factory) + { + _factory = factory; + } + + [Fact] + public async Task PingToApi() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/api/Ping/Ping"); + var content = await response.Content.ReadAsStringAsync(); + var statusCode = (int)response.StatusCode; + + Assert.Equal(200, statusCode); + Assert.Equal("Pong", content); + } + + [Fact] + public async Task DatabaseConnectionTest() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/api/Layers?start=0&limit=1"); + var content = await response.Content.ReadAsStringAsync(); + var statusCode = (int)response.StatusCode; + + Assert.Equal(200, statusCode); + var layers = JsonSerializer.Deserialize(content); + Assert.NotNull(layers); + } +} \ No newline at end of file diff --git a/src/Backend/DiunaBI.Tests/DiunaBI.Tests.csproj b/src/Backend/DiunaBI.Tests/DiunaBI.Tests.csproj new file mode 100644 index 0000000..8c99a7d --- /dev/null +++ b/src/Backend/DiunaBI.Tests/DiunaBI.Tests.csproj @@ -0,0 +1,24 @@ + + + + net8.0 + enable + enable + false + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + \ No newline at end of file diff --git a/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs b/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs index 04193e3..19304c7 100644 --- a/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs +++ b/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs @@ -20,6 +20,6 @@ public class PingController : Controller [AllowAnonymous] public IActionResult Ping() { - return Ok(_configuration["PONG"]); + return Ok("Pong"); } } \ No newline at end of file diff --git a/src/Backend/DiunaBI.WebAPI/Program.cs b/src/Backend/DiunaBI.WebAPI/Program.cs index 440e6c5..2df0db6 100644 --- a/src/Backend/DiunaBI.WebAPI/Program.cs +++ b/src/Backend/DiunaBI.WebAPI/Program.cs @@ -159,4 +159,6 @@ app.Run(); if (app.Environment.IsProduction()) { Log.CloseAndFlush(); -} \ No newline at end of file +} +// for testing purposes +public partial class Program { } \ No newline at end of file diff --git a/src/Backend/DiunaBI.sln b/src/Backend/DiunaBI.sln index 7756af7..f97b921 100644 --- a/src/Backend/DiunaBI.sln +++ b/src/Backend/DiunaBI.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiunaBI.Core", "DiunaBI.Cor EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiunaBI.Plugins.Morska", "DiunaBI.Plugins.Morska\DiunaBI.Plugins.Morska.csproj", "{B5416A3F-550A-468D-852F-20B24243FD68}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DiunaBI.Tests", "DiunaBI.Tests\DiunaBI.Tests.csproj", "{7D99AF7E-1FC7-4EC0-A320-F1A81D396F93}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -34,5 +36,9 @@ Global {8C346BEA-A209-4E8F-A6BF-70B42D9106C8}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C346BEA-A209-4E8F-A6BF-70B42D9106C8}.Release|Any CPU.ActiveCfg = Release|Any CPU {8C346BEA-A209-4E8F-A6BF-70B42D9106C8}.Release|Any CPU.Build.0 = Release|Any CPU + {7D99AF7E-1FC7-4EC0-A320-F1A81D396F93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D99AF7E-1FC7-4EC0-A320-F1A81D396F93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D99AF7E-1FC7-4EC0-A320-F1A81D396F93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D99AF7E-1FC7-4EC0-A320-F1A81D396F93}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal From 36994bd1876c65cf7688a7eb867909c722362e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 14:23:37 +0200 Subject: [PATCH 2/8] run test in github actions --- .github/workflows/build.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 059641a..1ca41fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,7 +53,26 @@ jobs: working-directory: src/Backend run: dotnet restore DiunaBI.sln + - name: Run Tests + working-directory: src/Backend + run: | + dotnet test DiunaBI.Tests/DiunaBI.Tests.csproj \ + --configuration Release \ + --no-restore \ + --logger "trx;LogFileName=test-results.trx" \ + --collect:"XPlat Code Coverage" + + - name: Publish Test Results + uses: actions/upload-artifact@v4 + if: success() || failure() + with: + name: test-results + path: | + src/Backend/DiunaBI.Tests/TestResults/*.trx + src/Backend/DiunaBI.Tests/TestResults/**/coverage.cobertura.xml + - name: Build solution + if: success() working-directory: src/Backend run: dotnet build DiunaBI.sln --configuration Release --no-restore From 201aec78e3756b4317a40e9f70d4084101522fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 14:48:33 +0200 Subject: [PATCH 3/8] LoadPLugins tests --- .github/workflows/build.yml | 3 +- .../DiunaBI.Core/Services/PluginManager.cs | 20 +++++------ src/Backend/DiunaBI.Tests/BaseTests.cs | 18 ++++++++-- .../Controllers/AdminController.cs | 28 --------------- .../Controllers/PingController.cs | 25 -------------- .../Controllers/TestsController.cs | 34 +++++++++++++++++++ tools/http-tests/AutoImport.http | 2 +- 7 files changed, 62 insertions(+), 68 deletions(-) delete mode 100644 src/Backend/DiunaBI.WebAPI/Controllers/AdminController.cs delete mode 100644 src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs create mode 100644 src/Backend/DiunaBI.WebAPI/Controllers/TestsController.cs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1ca41fe..798598f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,8 @@ jobs: --configuration Release \ --no-restore \ --logger "trx;LogFileName=test-results.trx" \ - --collect:"XPlat Code Coverage" + --collect:"XPlat Code Coverage" \ + --filter "Category!=LocalOnly" - name: Publish Test Results uses: actions/upload-artifact@v4 diff --git a/src/Backend/DiunaBI.Core/Services/PluginManager.cs b/src/Backend/DiunaBI.Core/Services/PluginManager.cs index 0a0d8b4..8934dc3 100644 --- a/src/Backend/DiunaBI.Core/Services/PluginManager.cs +++ b/src/Backend/DiunaBI.Core/Services/PluginManager.cs @@ -46,21 +46,21 @@ public class PluginManager } } - _logger.LogInformation("Loaded {ProcessorCount} processors and {ImporterCount} importers from {AssemblyCount} assemblies", - _processorTypes.Count, - _importerTypes.Count, + _logger.LogInformation("Loaded {ProcessorCount} processors and {ImporterCount} importers from {AssemblyCount} assemblies", + _processorTypes.Count, + _importerTypes.Count, dllFiles.Length); // Zmień z _plugins.Count na assemblyFiles.Length } private void LoadPluginFromAssembly(string assemblyPath) { _logger.LogDebug("Loading assembly from: {Path}", assemblyPath); // Information -> Debug - + try { var assembly = Assembly.LoadFrom(assemblyPath); _logger.LogDebug("Assembly loaded successfully: {Name}", assembly.FullName); // Information -> Debug - + foreach (var type in assembly.GetTypes()) { if (typeof(IDataProcessor).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract) @@ -68,7 +68,7 @@ public class PluginManager _processorTypes.Add(type); _logger.LogDebug("Registered processor: {Type}", type.Name); // Information -> Debug } - + if (typeof(IDataImporter).IsAssignableFrom(type) && !type.IsInterface && !type.IsAbstract) { _importerTypes.Add(type); @@ -90,7 +90,7 @@ public class PluginManager { using var scope = _serviceProvider.CreateScope(); var instance = (IDataProcessor)ActivatorUtilities.CreateInstance(scope.ServiceProvider, type); - + if (instance.CanProcess(processorType)) { var scopedProvider = _serviceProvider.CreateScope().ServiceProvider; @@ -113,7 +113,7 @@ public class PluginManager { using var scope = _serviceProvider.CreateScope(); var instance = (IDataImporter)ActivatorUtilities.CreateInstance(scope.ServiceProvider, type); - + if (instance.CanImport(importerType)) { var scopedProvider = _serviceProvider.CreateScope().ServiceProvider; @@ -132,7 +132,5 @@ public class PluginManager { return _exporters.FirstOrDefault(e => e.CanExport(exporterType)); } - - public IEnumerable GetAllExporters() => _exporters.AsReadOnly(); - public IEnumerable GetAllPlugins() => _plugins.AsReadOnly(); + public int GetPluginsCount() => _processorTypes.Count + _importerTypes.Count + _exporters.Count; } \ No newline at end of file diff --git a/src/Backend/DiunaBI.Tests/BaseTests.cs b/src/Backend/DiunaBI.Tests/BaseTests.cs index 42e80eb..ca366c5 100644 --- a/src/Backend/DiunaBI.Tests/BaseTests.cs +++ b/src/Backend/DiunaBI.Tests/BaseTests.cs @@ -18,15 +18,16 @@ public class ApiConnectionTests : IClassFixture> { var client = _factory.CreateClient(); - var response = await client.GetAsync("/api/Ping/Ping"); + var response = await client.GetAsync("/api/Tests/Ping"); var content = await response.Content.ReadAsStringAsync(); var statusCode = (int)response.StatusCode; - Assert.Equal(200, statusCode); + Assert.Equal(200, statusCode); Assert.Equal("Pong", content); } [Fact] + [Trait("Category", "LocalOnly")] public async Task DatabaseConnectionTest() { var client = _factory.CreateClient(); @@ -39,4 +40,17 @@ public class ApiConnectionTests : IClassFixture> var layers = JsonSerializer.Deserialize(content); Assert.NotNull(layers); } + [Fact] + public async Task LoadPLuginsTest() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/api/Tests/Plugins"); + var content = await response.Content.ReadAsStringAsync(); + var statusCode = (int)response.StatusCode; + + Assert.Equal(200, statusCode); + var pluginsCount = JsonSerializer.Deserialize(content); + Assert.True(pluginsCount > 0, "Expected plugins count to be greater than 0"); + } } \ No newline at end of file diff --git a/src/Backend/DiunaBI.WebAPI/Controllers/AdminController.cs b/src/Backend/DiunaBI.WebAPI/Controllers/AdminController.cs deleted file mode 100644 index ad4b843..0000000 --- a/src/Backend/DiunaBI.WebAPI/Controllers/AdminController.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Data; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Data.SqlClient; -using DiunaBI.Core.Models; - -namespace DiunaBI.Core.Controllers; - -[ApiController] -[Route("api/[controller]")] -public class AdminController : Controller -{ - - private readonly IConfiguration _configuration; - - public AdminController( - IConfiguration configuration) - { - _configuration = configuration; - } - - [HttpGet] - [Route("Version")] - public IActionResult GetVersion() - { - return Ok(new { version = _configuration["app-version"] }); - } -} \ No newline at end of file diff --git a/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs b/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs deleted file mode 100644 index 19304c7..0000000 --- a/src/Backend/DiunaBI.WebAPI/Controllers/PingController.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; - -namespace DiunaBI.WebAPI.Controllers; - -[ApiController] -[Route("api/[controller]")] -[Authorize] -public class PingController : Controller -{ - private readonly IConfiguration _configuration; - public PingController( - IConfiguration configuration) - { - _configuration = configuration; - } - - [HttpGet] - [Route("Ping")] - [AllowAnonymous] - public IActionResult Ping() - { - return Ok("Pong"); - } -} \ No newline at end of file diff --git a/src/Backend/DiunaBI.WebAPI/Controllers/TestsController.cs b/src/Backend/DiunaBI.WebAPI/Controllers/TestsController.cs new file mode 100644 index 0000000..908c944 --- /dev/null +++ b/src/Backend/DiunaBI.WebAPI/Controllers/TestsController.cs @@ -0,0 +1,34 @@ +using DiunaBI.Core.Services; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace DiunaBI.WebAPI.Controllers; + +[ApiController] +[Route("api/[controller]")] +[Authorize] +public class TestsController : Controller +{ + private readonly PluginManager _pluginManager; + public TestsController( + PluginManager pluginManager) + { + _pluginManager = pluginManager; + } + + [HttpGet] + [Route("Ping")] + [AllowAnonymous] + public IActionResult Ping() + { + return Ok("Pong"); + } + [HttpGet] + [Route("Plugins")] + [AllowAnonymous] + public IActionResult GetPlugins() + { + var plugins = _pluginManager.GetPluginsCount(); + return Ok(plugins); + } +} \ No newline at end of file diff --git a/tools/http-tests/AutoImport.http b/tools/http-tests/AutoImport.http index 6b35da4..8fb5368 100644 --- a/tools/http-tests/AutoImport.http +++ b/tools/http-tests/AutoImport.http @@ -1,3 +1,3 @@ ### -GET http://localhost:5400/api/Layers/RunQueueJobs/10763478CB738D4ecb2h76g803478CB738D4e +GET http://localhost:5400/api/Tests/Plugins From 27a56dc78fc94e3e42845fec77e944865f9f5d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 14:51:13 +0200 Subject: [PATCH 4/8] hithub actions tests fix --- .github/workflows/build.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 798598f..88e6909 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,6 +53,14 @@ jobs: working-directory: src/Backend run: dotnet restore DiunaBI.sln + - name: Build solution and plugins + working-directory: src/Backend + run: | + dotnet build DiunaBI.sln --configuration Release + dotnet build DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj --configuration Release + mkdir -p ../../build/webapi/Plugins + cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll ../../build/webapi/Plugins/ + - name: Run Tests working-directory: src/Backend run: | From 222b2155fd6b8230e29f9daf36356150090e3ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 15:04:41 +0200 Subject: [PATCH 5/8] plugins test fix --- .github/workflows/build.yml | 14 +++++- src/Backend/DiunaBI.Tests/BaseTests.cs | 66 ++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 88e6909..e619de3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,15 +61,25 @@ jobs: mkdir -p ../../build/webapi/Plugins cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll ../../build/webapi/Plugins/ + - name: Build and prepare plugins + working-directory: src/Backend + run: | + dotnet build DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj --configuration Release + mkdir -p DiunaBI.Tests/bin/Release/net8.0/Plugins + cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll DiunaBI.Tests/bin/Release/net8.0/Plugins/ + cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Core.dll DiunaBI.Tests/bin/Release/net8.0/Plugins/ + echo "✅ Plugins copied to test directory:" + ls -la DiunaBI.Tests/bin/Release/net8.0/Plugins/ + - name: Run Tests working-directory: src/Backend run: | + dotnet add DiunaBI.Tests/DiunaBI.Tests.csproj package coverlet.collector dotnet test DiunaBI.Tests/DiunaBI.Tests.csproj \ --configuration Release \ --no-restore \ --logger "trx;LogFileName=test-results.trx" \ - --collect:"XPlat Code Coverage" \ - --filter "Category!=LocalOnly" + --collect:"XPlat Code Coverage" - name: Publish Test Results uses: actions/upload-artifact@v4 diff --git a/src/Backend/DiunaBI.Tests/BaseTests.cs b/src/Backend/DiunaBI.Tests/BaseTests.cs index ca366c5..6cdf5f3 100644 --- a/src/Backend/DiunaBI.Tests/BaseTests.cs +++ b/src/Backend/DiunaBI.Tests/BaseTests.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Mvc.Testing; using Xunit; +using Xunit.Abstractions; using System.Text.Json; namespace DiunaBI.Tests; @@ -7,21 +8,32 @@ namespace DiunaBI.Tests; public class ApiConnectionTests : IClassFixture> { private readonly WebApplicationFactory _factory; + private readonly ITestOutputHelper _output; - public ApiConnectionTests(WebApplicationFactory factory) + public ApiConnectionTests(WebApplicationFactory factory, ITestOutputHelper output) { _factory = factory; + _output = output; } [Fact] public async Task PingToApi() { + // Arrange var client = _factory.CreateClient(); + _output.WriteLine($"Test started: {nameof(PingToApi)}"); + // Act var response = await client.GetAsync("/api/Tests/Ping"); var content = await response.Content.ReadAsStringAsync(); var statusCode = (int)response.StatusCode; + // Debug info + _output.WriteLine($"Status Code: {statusCode}"); + _output.WriteLine($"Response Content: {content}"); + _output.WriteLine($"Headers: {string.Join(", ", response.Headers)}"); + + // Assert Assert.Equal(200, statusCode); Assert.Equal("Pong", content); } @@ -30,27 +42,63 @@ public class ApiConnectionTests : IClassFixture> [Trait("Category", "LocalOnly")] public async Task DatabaseConnectionTest() { + // Arrange var client = _factory.CreateClient(); + _output.WriteLine($"Test started: {nameof(DatabaseConnectionTest)}"); + // Act var response = await client.GetAsync("/api/Layers?start=0&limit=1"); var content = await response.Content.ReadAsStringAsync(); var statusCode = (int)response.StatusCode; + // Debug info + _output.WriteLine($"Status Code: {statusCode}"); + _output.WriteLine($"Response Content: {content}"); + _output.WriteLine($"Content Type: {response.Content.Headers.ContentType}"); + + // Assert Assert.Equal(200, statusCode); var layers = JsonSerializer.Deserialize(content); Assert.NotNull(layers); } - [Fact] - public async Task LoadPLuginsTest() - { - var client = _factory.CreateClient(); + [Fact] + public async Task LoadPluginsTest() + { + // Arrange + var client = _factory.CreateClient(); + _output.WriteLine($"Test started: {nameof(LoadPluginsTest)}"); + + // Debug info + var pluginsPath = Path.Combine(AppContext.BaseDirectory, "Plugins"); + _output.WriteLine($"Looking for plugins in: {pluginsPath}"); + if (Directory.Exists(pluginsPath)) + { + _output.WriteLine("Files in plugins directory:"); + foreach (var file in Directory.GetFiles(pluginsPath)) + { + _output.WriteLine($"- {Path.GetFileName(file)}"); + } + } + else + { + _output.WriteLine("❌ Plugins directory not found!"); + } + + // Act var response = await client.GetAsync("/api/Tests/Plugins"); var content = await response.Content.ReadAsStringAsync(); - var statusCode = (int)response.StatusCode; + _output.WriteLine($"API Response: {content}"); - Assert.Equal(200, statusCode); - var pluginsCount = JsonSerializer.Deserialize(content); - Assert.True(pluginsCount > 0, "Expected plugins count to be greater than 0"); + if (!int.TryParse(content, out var pluginsCount)) + { + _output.WriteLine($"❌ Failed to parse plugins count from response: {content}"); + Assert.Fail($"Expected numeric response but got: {content}"); + } + + // Assert + Assert.Equal(200, (int)response.StatusCode); + Assert.True(pluginsCount > 0, + $"Expected plugins count to be greater than 0. Got: {pluginsCount}"); } } \ No newline at end of file From 80dc3e3eec645b1d6f80bcd9bf1ddece9865ed60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 15:08:15 +0200 Subject: [PATCH 6/8] tests fix --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e619de3..b0d55af 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,7 +79,8 @@ jobs: --configuration Release \ --no-restore \ --logger "trx;LogFileName=test-results.trx" \ - --collect:"XPlat Code Coverage" + --collect:"XPlat Code Coverage" \ + --filter "Category!=LocalOnly" - name: Publish Test Results uses: actions/upload-artifact@v4 From 6a0f3709f0e45cc3e51a70761cd6ca50b8cbb221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 15:09:50 +0200 Subject: [PATCH 7/8] another build fix --- .github/workflows/build.yml | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b0d55af..5f7ca42 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,18 +53,12 @@ jobs: working-directory: src/Backend run: dotnet restore DiunaBI.sln - - name: Build solution and plugins + - name: Build solution and prepare plugins working-directory: src/Backend run: | dotnet build DiunaBI.sln --configuration Release dotnet build DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj --configuration Release - mkdir -p ../../build/webapi/Plugins - cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll ../../build/webapi/Plugins/ - - - name: Build and prepare plugins - working-directory: src/Backend - run: | - dotnet build DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj --configuration Release + # Przygotuj katalog dla testów mkdir -p DiunaBI.Tests/bin/Release/net8.0/Plugins cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll DiunaBI.Tests/bin/Release/net8.0/Plugins/ cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Core.dll DiunaBI.Tests/bin/Release/net8.0/Plugins/ @@ -91,12 +85,8 @@ jobs: src/Backend/DiunaBI.Tests/TestResults/*.trx src/Backend/DiunaBI.Tests/TestResults/**/coverage.cobertura.xml - - name: Build solution - if: success() - working-directory: src/Backend - run: dotnet build DiunaBI.sln --configuration Release --no-restore - - name: Publish WebAPI + if: success() working-directory: src/Backend run: | dotnet publish DiunaBI.WebAPI/DiunaBI.WebAPI.csproj \ @@ -104,14 +94,10 @@ jobs: --framework net8.0 \ --self-contained false \ --output ../../build/webapi - - - name: Build and copy plugins - working-directory: src/Backend - run: | - dotnet build DiunaBI.Plugins.Morska/DiunaBI.Plugins.Morska.csproj --configuration Release + # Kopiuj pluginy do katalogu webapi mkdir -p ../../build/webapi/Plugins cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll ../../build/webapi/Plugins/ - echo "✅ Plugins copied:" + echo "✅ Plugins copied to webapi:" ls -la ../../build/webapi/Plugins/ - name: Clean up sensitive files From 56226a8e94fa19cc2fd8525dad6449a8552ac8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Sun, 8 Jun 2025 15:12:42 +0200 Subject: [PATCH 8/8] cleanup --- src/Backend/DiunaBI.Tests/BaseTests.cs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/Backend/DiunaBI.Tests/BaseTests.cs b/src/Backend/DiunaBI.Tests/BaseTests.cs index 6cdf5f3..4def53a 100644 --- a/src/Backend/DiunaBI.Tests/BaseTests.cs +++ b/src/Backend/DiunaBI.Tests/BaseTests.cs @@ -19,21 +19,17 @@ public class ApiConnectionTests : IClassFixture> [Fact] public async Task PingToApi() { - // Arrange var client = _factory.CreateClient(); _output.WriteLine($"Test started: {nameof(PingToApi)}"); - // Act var response = await client.GetAsync("/api/Tests/Ping"); var content = await response.Content.ReadAsStringAsync(); var statusCode = (int)response.StatusCode; - // Debug info _output.WriteLine($"Status Code: {statusCode}"); _output.WriteLine($"Response Content: {content}"); _output.WriteLine($"Headers: {string.Join(", ", response.Headers)}"); - // Assert Assert.Equal(200, statusCode); Assert.Equal("Pong", content); } @@ -42,21 +38,17 @@ public class ApiConnectionTests : IClassFixture> [Trait("Category", "LocalOnly")] public async Task DatabaseConnectionTest() { - // Arrange var client = _factory.CreateClient(); _output.WriteLine($"Test started: {nameof(DatabaseConnectionTest)}"); - // Act var response = await client.GetAsync("/api/Layers?start=0&limit=1"); var content = await response.Content.ReadAsStringAsync(); var statusCode = (int)response.StatusCode; - // Debug info _output.WriteLine($"Status Code: {statusCode}"); _output.WriteLine($"Response Content: {content}"); _output.WriteLine($"Content Type: {response.Content.Headers.ContentType}"); - // Assert Assert.Equal(200, statusCode); var layers = JsonSerializer.Deserialize(content); Assert.NotNull(layers); @@ -65,11 +57,9 @@ public class ApiConnectionTests : IClassFixture> [Fact] public async Task LoadPluginsTest() { - // Arrange var client = _factory.CreateClient(); _output.WriteLine($"Test started: {nameof(LoadPluginsTest)}"); - // Debug info var pluginsPath = Path.Combine(AppContext.BaseDirectory, "Plugins"); _output.WriteLine($"Looking for plugins in: {pluginsPath}"); if (Directory.Exists(pluginsPath)) @@ -85,7 +75,6 @@ public class ApiConnectionTests : IClassFixture> _output.WriteLine("❌ Plugins directory not found!"); } - // Act var response = await client.GetAsync("/api/Tests/Plugins"); var content = await response.Content.ReadAsStringAsync(); _output.WriteLine($"API Response: {content}"); @@ -96,7 +85,6 @@ public class ApiConnectionTests : IClassFixture> Assert.Fail($"Expected numeric response but got: {content}"); } - // Assert Assert.Equal(200, (int)response.StatusCode); Assert.True(pluginsCount > 0, $"Expected plugins count to be greater than 0. Got: {pluginsCount}");