plugins test fix

This commit is contained in:
Michał Zieliński
2025-06-08 15:04:41 +02:00
parent 27a56dc78f
commit 222b2155fd
2 changed files with 69 additions and 11 deletions

View File

@@ -61,15 +61,25 @@ jobs:
mkdir -p ../../build/webapi/Plugins mkdir -p ../../build/webapi/Plugins
cp DiunaBI.Plugins.Morska/bin/Release/net8.0/DiunaBI.Plugins.Morska.dll ../../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 - name: Run Tests
working-directory: src/Backend working-directory: src/Backend
run: | run: |
dotnet add DiunaBI.Tests/DiunaBI.Tests.csproj package coverlet.collector
dotnet test DiunaBI.Tests/DiunaBI.Tests.csproj \ dotnet test DiunaBI.Tests/DiunaBI.Tests.csproj \
--configuration Release \ --configuration Release \
--no-restore \ --no-restore \
--logger "trx;LogFileName=test-results.trx" \ --logger "trx;LogFileName=test-results.trx" \
--collect:"XPlat Code Coverage" \ --collect:"XPlat Code Coverage"
--filter "Category!=LocalOnly"
- name: Publish Test Results - name: Publish Test Results
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4

View File

@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.AspNetCore.Mvc.Testing;
using Xunit; using Xunit;
using Xunit.Abstractions;
using System.Text.Json; using System.Text.Json;
namespace DiunaBI.Tests; namespace DiunaBI.Tests;
@@ -7,21 +8,32 @@ namespace DiunaBI.Tests;
public class ApiConnectionTests : IClassFixture<WebApplicationFactory<Program>> public class ApiConnectionTests : IClassFixture<WebApplicationFactory<Program>>
{ {
private readonly WebApplicationFactory<Program> _factory; private readonly WebApplicationFactory<Program> _factory;
private readonly ITestOutputHelper _output;
public ApiConnectionTests(WebApplicationFactory<Program> factory) public ApiConnectionTests(WebApplicationFactory<Program> factory, ITestOutputHelper output)
{ {
_factory = factory; _factory = factory;
_output = output;
} }
[Fact] [Fact]
public async Task PingToApi() public async Task PingToApi()
{ {
// Arrange
var client = _factory.CreateClient(); var client = _factory.CreateClient();
_output.WriteLine($"Test started: {nameof(PingToApi)}");
// Act
var response = await client.GetAsync("/api/Tests/Ping"); var response = await client.GetAsync("/api/Tests/Ping");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
var statusCode = (int)response.StatusCode; 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(200, statusCode);
Assert.Equal("Pong", content); Assert.Equal("Pong", content);
} }
@@ -30,27 +42,63 @@ public class ApiConnectionTests : IClassFixture<WebApplicationFactory<Program>>
[Trait("Category", "LocalOnly")] [Trait("Category", "LocalOnly")]
public async Task DatabaseConnectionTest() public async Task DatabaseConnectionTest()
{ {
// Arrange
var client = _factory.CreateClient(); var client = _factory.CreateClient();
_output.WriteLine($"Test started: {nameof(DatabaseConnectionTest)}");
// Act
var response = await client.GetAsync("/api/Layers?start=0&limit=1"); var response = await client.GetAsync("/api/Layers?start=0&limit=1");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
var statusCode = (int)response.StatusCode; 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); Assert.Equal(200, statusCode);
var layers = JsonSerializer.Deserialize<dynamic>(content); var layers = JsonSerializer.Deserialize<dynamic>(content);
Assert.NotNull(layers); 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 response = await client.GetAsync("/api/Tests/Plugins");
var content = await response.Content.ReadAsStringAsync(); var content = await response.Content.ReadAsStringAsync();
var statusCode = (int)response.StatusCode; _output.WriteLine($"API Response: {content}");
Assert.Equal(200, statusCode); if (!int.TryParse(content, out var pluginsCount))
var pluginsCount = JsonSerializer.Deserialize<int>(content); {
Assert.True(pluginsCount > 0, "Expected plugins count to be greater than 0"); _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}");
} }
} }