From eea03985a3ae0eff79a6a235351e6e227841f7d8 Mon Sep 17 00:00:00 2001 From: napoly Date: Fri, 6 Jun 2025 09:12:20 +0200 Subject: [PATCH] E2e/unit runtime dotCover code coverage --- .github/workflows/dotnet.yml | 18 +++++------- .gitignore | 1 + ...CPayServer.Plugins.IntegrationTests.csproj | 2 +- .../Dockerfile | 1 + .../MoneroIntegrationTestBase.cs | 3 +- .../MoneroPluginUITest.cs | 2 +- .../docker-entrypoint.sh | 29 +++++++++++++++---- .../BTCPayServer.Plugins.UnitTests.csproj | 2 +- .../MoneroLikeConfigurationTests.cs | 2 +- .../Payments/MoneroLikePaymentDataTests.cs | 2 +- .../RPC/Models/ParseStringConverterTest.cs | 7 ++--- .../Monero}/RPC/MoneroEventTests.cs | 2 +- .../Monero}/Utils/MoneroMoneyTests.cs | 2 +- .../ViewModels/MoneroPaymentViewModelTests.cs | 7 ++--- .../Monero/MoneroLikeSpecificBtcPayNetwork.cs | 3 +- .../Monero/RPC/Models/ParseStringConverter.cs | 2 +- README.md | 9 ++++-- btcpay-monero-plugin.sln | 2 +- 18 files changed, 57 insertions(+), 39 deletions(-) rename BTCPayServer.Plugins.IntegrationTests/{MoneroPluginTests => Monero}/MoneroIntegrationTestBase.cs (89%) rename BTCPayServer.Plugins.IntegrationTests/{MoneroPluginTests => Monero}/MoneroPluginUITest.cs (92%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests}/BTCPayServer.Plugins.UnitTests.csproj (96%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests/Monero}/Configuration/MoneroLikeConfigurationTests.cs (98%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests/Monero}/Payments/MoneroLikePaymentDataTests.cs (96%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests/Monero}/RPC/Models/ParseStringConverterTest.cs (95%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests/Monero}/RPC/MoneroEventTests.cs (96%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests/Monero}/Utils/MoneroMoneyTests.cs (96%) rename {BTCPayServer.Plugins.Monero.UnitTests => BTCPayServer.Plugins.UnitTests/Monero}/ViewModels/MoneroPaymentViewModelTests.cs (95%) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index dfb4e0e..f2635c0 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -11,21 +11,14 @@ on: jobs: build: - runs-on: ubuntu-latest - - env: - CI: true - steps: - - uses: actions/checkout@v4 + - name: Initialize and update submodules + uses: actions/checkout@v4 with: submodules: recursive - - name: Initialize and update submodules - run: git submodule update --init --recursive - - name: Setup .NET uses: actions/setup-dotnet@v4 with: @@ -39,9 +32,12 @@ jobs: - name: Build projects run: dotnet build --no-restore + + - name: Install JetBrains dotCover CLI + run: dotnet tool install --global JetBrains.dotCover.CommandLineTools - name: Run unit tests - run: dotnet test BTCPayServer.Plugins.Monero.UnitTests/BTCPayServer.Plugins.UnitTests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=json /p:CoverletOutput=../coverage/coverage.json + run: dotCover cover-dotnet --TargetArguments="test BTCPayServer.Plugins.UnitTests --no-build" --output=coverage/dotCover.UnitTests.output.dcvr --filters="-:Assembly=BTCPayServer.Plugins.UnitTests;-:Assembly=testhost;-:Assembly=BTCPayServer;-:Class=AspNetCoreGeneratedDocument.*" - name: Run integration tests run: docker compose -f BTCPayServer.Plugins.IntegrationTests/docker-compose.yml run tests @@ -54,4 +50,4 @@ jobs: uses: actions/upload-artifact@v4.6.2 with: name: coverage-report - path: coverage/coverage.cobertura.xml \ No newline at end of file + path: coverage/dotcover.xml \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2e6b938..5b5ab00 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ .idea Plugins/packed .vs/ +coverage diff --git a/BTCPayServer.Plugins.IntegrationTests/BTCPayServer.Plugins.IntegrationTests.csproj b/BTCPayServer.Plugins.IntegrationTests/BTCPayServer.Plugins.IntegrationTests.csproj index ccb4ba0..561c6d8 100644 --- a/BTCPayServer.Plugins.IntegrationTests/BTCPayServer.Plugins.IntegrationTests.csproj +++ b/BTCPayServer.Plugins.IntegrationTests/BTCPayServer.Plugins.IntegrationTests.csproj @@ -4,7 +4,6 @@ net8.0 enable enable - false @@ -29,6 +28,7 @@ + diff --git a/BTCPayServer.Plugins.IntegrationTests/Dockerfile b/BTCPayServer.Plugins.IntegrationTests/Dockerfile index ccc945d..b607dc0 100644 --- a/BTCPayServer.Plugins.IntegrationTests/Dockerfile +++ b/BTCPayServer.Plugins.IntegrationTests/Dockerfile @@ -32,6 +32,7 @@ RUN mkdir -p ${MONERO_PLUGIN_FOLDER} RUN cd Plugins/Monero && dotnet build BTCPayServer.Plugins.Monero.sln --configuration ${CONFIGURATION_NAME} /p:RazorCompileOnBuild=true --output ${MONERO_PLUGIN_FOLDER} RUN cd BTCPayServer.Plugins.IntegrationTests && dotnet build --configuration ${CONFIGURATION_NAME} /p:CI_TESTS=true /p:RazorCompileOnBuild=true RUN dotnet tool install --global Microsoft.Playwright.CLI +RUN dotnet tool install --global JetBrains.DotCover.CommandLineTools ENV PATH="$PATH:/root/.dotnet/tools" RUN playwright install chromium --with-deps WORKDIR /source/BTCPayServer.Plugins.IntegrationTests diff --git a/BTCPayServer.Plugins.IntegrationTests/MoneroPluginTests/MoneroIntegrationTestBase.cs b/BTCPayServer.Plugins.IntegrationTests/Monero/MoneroIntegrationTestBase.cs similarity index 89% rename from BTCPayServer.Plugins.IntegrationTests/MoneroPluginTests/MoneroIntegrationTestBase.cs rename to BTCPayServer.Plugins.IntegrationTests/Monero/MoneroIntegrationTestBase.cs index 5b06f38..ccfb678 100644 --- a/BTCPayServer.Plugins.IntegrationTests/MoneroPluginTests/MoneroIntegrationTestBase.cs +++ b/BTCPayServer.Plugins.IntegrationTests/Monero/MoneroIntegrationTestBase.cs @@ -1,6 +1,7 @@ using Xunit.Abstractions; +using BTCPayServer.Tests; -namespace BTCPayServer.Tests +namespace BTCPayServer.Plugins.IntegrationTests.Monero { public class MoneroAndBitcoinIntegrationTestBase : UnitTestBase { diff --git a/BTCPayServer.Plugins.IntegrationTests/MoneroPluginTests/MoneroPluginUITest.cs b/BTCPayServer.Plugins.IntegrationTests/Monero/MoneroPluginUITest.cs similarity index 92% rename from BTCPayServer.Plugins.IntegrationTests/MoneroPluginTests/MoneroPluginUITest.cs rename to BTCPayServer.Plugins.IntegrationTests/Monero/MoneroPluginUITest.cs index f873a37..7728371 100644 --- a/BTCPayServer.Plugins.IntegrationTests/MoneroPluginTests/MoneroPluginUITest.cs +++ b/BTCPayServer.Plugins.IntegrationTests/Monero/MoneroPluginUITest.cs @@ -2,7 +2,7 @@ using BTCPayServer.Tests; using Xunit; using Xunit.Abstractions; -namespace BTCPayServer.Plugins.IntegrationTests.MoneroPluginTests; +namespace BTCPayServer.Plugins.IntegrationTests.Monero; public class MoneroPluginIntegrationTest(ITestOutputHelper helper) : MoneroAndBitcoinIntegrationTestBase(helper) { diff --git a/BTCPayServer.Plugins.IntegrationTests/docker-entrypoint.sh b/BTCPayServer.Plugins.IntegrationTests/docker-entrypoint.sh index 72b3db1..66ff6f4 100755 --- a/BTCPayServer.Plugins.IntegrationTests/docker-entrypoint.sh +++ b/BTCPayServer.Plugins.IntegrationTests/docker-entrypoint.sh @@ -1,9 +1,28 @@ #!/bin/sh set -e -FILTERS=" " -if [ ! -z "$TEST_FILTERS" ]; then -FILTERS="--filter $TEST_FILTERS" -fi +dotCover cover-dotnet \ + --TargetArguments="test -c ${CONFIGURATION_NAME} $FILTERS . --no-build" \ + --Output=/coverage/dotCover.IntegrationTests.output.dcvr \ + --filters="-:Assembly=BTCPayServer.Plugins.IntegrationTests;-:Assembly=testhost;-:Assembly=BTCPayServer;-:Assembly=ExchangeSharp;-:Assembly=BTCPayServer.Tests;-:Assembly=BTCPayServer.Client;-:Assembly=BTCPayServer.Abstractions;-:Assembly=BTCPayServer.Data;-:Assembly=BTCPayServer.Common;-:Assembly=BTCPayServer.Logging;-:Assembly=BTCPayServer.Rating;-:Assembly=Dapper;-:Assembly=Serilog.Extensions.Logging;-:Class=AspNetCoreGeneratedDocument.*" -dotnet test -c ${CONFIGURATION_NAME} $FILTERS --no-build -v n --logger "console;verbosity=normal" /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=/coverage/coverage.cobertura.xml /p:MergeWith=/coverage/coverage.json< /dev/null \ No newline at end of file +dotCover merge \ + --Source=/coverage/dotCover.IntegrationTests.output.dcvr,/coverage/dotCover.UnitTests.output.dcvr \ + --Output=/coverage/mergedCoverage.dcvr + +dotCover report \ + --Source=/coverage/mergedCoverage.dcvr \ + --ReportType=HTML \ + --Output=/coverage/mergedCoverage.html \ + --ReportType=DetailedXML \ + --Output=/coverage/dotcover.xml + +dotCover report \ + --Source=/coverage/dotCover.UnitTests.output.dcvr \ + --ReportType=HTML \ + --Output=/coverage/unitCoverage.html + +dotCover report \ + --Source=/coverage/dotCover.IntegrationTests.output.dcvr \ + --ReportType=HTML \ + --Output=/coverage/integrationCoverage.html \ No newline at end of file diff --git a/BTCPayServer.Plugins.Monero.UnitTests/BTCPayServer.Plugins.UnitTests.csproj b/BTCPayServer.Plugins.UnitTests/BTCPayServer.Plugins.UnitTests.csproj similarity index 96% rename from BTCPayServer.Plugins.Monero.UnitTests/BTCPayServer.Plugins.UnitTests.csproj rename to BTCPayServer.Plugins.UnitTests/BTCPayServer.Plugins.UnitTests.csproj index 75efe8d..719d431 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/BTCPayServer.Plugins.UnitTests.csproj +++ b/BTCPayServer.Plugins.UnitTests/BTCPayServer.Plugins.UnitTests.csproj @@ -5,7 +5,7 @@ enable enable false - BTCPayServer.Plugins.Monero.UnitTests + BTCPayServer.Plugins.UnitTests $(MSBuildProjectDirectory)/coverage/ true diff --git a/BTCPayServer.Plugins.Monero.UnitTests/Configuration/MoneroLikeConfigurationTests.cs b/BTCPayServer.Plugins.UnitTests/Monero/Configuration/MoneroLikeConfigurationTests.cs similarity index 98% rename from BTCPayServer.Plugins.Monero.UnitTests/Configuration/MoneroLikeConfigurationTests.cs rename to BTCPayServer.Plugins.UnitTests/Monero/Configuration/MoneroLikeConfigurationTests.cs index 13ea3fa..6b67793 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/Configuration/MoneroLikeConfigurationTests.cs +++ b/BTCPayServer.Plugins.UnitTests/Monero/Configuration/MoneroLikeConfigurationTests.cs @@ -1,7 +1,7 @@ using BTCPayServer.Plugins.Monero.Configuration; using Xunit; -namespace BTCPayServer.Plugins.Monero.UnitTests.Configuration +namespace BTCPayServer.Plugins.UnitTests.Monero.Configuration { public class MoneroLikeConfigurationTests { diff --git a/BTCPayServer.Plugins.Monero.UnitTests/Payments/MoneroLikePaymentDataTests.cs b/BTCPayServer.Plugins.UnitTests/Monero/Payments/MoneroLikePaymentDataTests.cs similarity index 96% rename from BTCPayServer.Plugins.Monero.UnitTests/Payments/MoneroLikePaymentDataTests.cs rename to BTCPayServer.Plugins.UnitTests/Monero/Payments/MoneroLikePaymentDataTests.cs index 7d3f5c9..62102e3 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/Payments/MoneroLikePaymentDataTests.cs +++ b/BTCPayServer.Plugins.UnitTests/Monero/Payments/MoneroLikePaymentDataTests.cs @@ -1,7 +1,7 @@ using BTCPayServer.Plugins.Monero.Payments; using Xunit; -namespace BTCPayServer.Plugins.Monero.UnitTests.Payments +namespace BTCPayServer.Plugins.UnitTests.Monero.Payments { public class MoneroLikePaymentDataTests { diff --git a/BTCPayServer.Plugins.Monero.UnitTests/RPC/Models/ParseStringConverterTest.cs b/BTCPayServer.Plugins.UnitTests/Monero/RPC/Models/ParseStringConverterTest.cs similarity index 95% rename from BTCPayServer.Plugins.Monero.UnitTests/RPC/Models/ParseStringConverterTest.cs rename to BTCPayServer.Plugins.UnitTests/Monero/RPC/Models/ParseStringConverterTest.cs index a49ebaf..15b79ab 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/RPC/Models/ParseStringConverterTest.cs +++ b/BTCPayServer.Plugins.UnitTests/Monero/RPC/Models/ParseStringConverterTest.cs @@ -1,11 +1,8 @@ -using System; -using System.IO; -using System.Globalization; +using BTCPayServer.Plugins.Monero.RPC.Models; using Newtonsoft.Json; using Xunit; -using BTCPayServer.Plugins.Monero.RPC.Models; -namespace BTCPayServer.Plugins.Monero.UnitTests.RPC.Models +namespace BTCPayServer.Plugins.UnitTests.Monero.RPC.Models { public class ParseStringConverterTests { diff --git a/BTCPayServer.Plugins.Monero.UnitTests/RPC/MoneroEventTests.cs b/BTCPayServer.Plugins.UnitTests/Monero/RPC/MoneroEventTests.cs similarity index 96% rename from BTCPayServer.Plugins.Monero.UnitTests/RPC/MoneroEventTests.cs rename to BTCPayServer.Plugins.UnitTests/Monero/RPC/MoneroEventTests.cs index 83a5515..49e37d1 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/RPC/MoneroEventTests.cs +++ b/BTCPayServer.Plugins.UnitTests/Monero/RPC/MoneroEventTests.cs @@ -1,7 +1,7 @@ using BTCPayServer.Plugins.Monero.RPC; using Xunit; -namespace BTCPayServer.Plugins.Monero.Tests.RPC +namespace BTCPayServer.Plugins.UnitTests.Monero.RPC { public class MoneroEventTest { diff --git a/BTCPayServer.Plugins.Monero.UnitTests/Utils/MoneroMoneyTests.cs b/BTCPayServer.Plugins.UnitTests/Monero/Utils/MoneroMoneyTests.cs similarity index 96% rename from BTCPayServer.Plugins.Monero.UnitTests/Utils/MoneroMoneyTests.cs rename to BTCPayServer.Plugins.UnitTests/Monero/Utils/MoneroMoneyTests.cs index 22d8c71..f606c83 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/Utils/MoneroMoneyTests.cs +++ b/BTCPayServer.Plugins.UnitTests/Monero/Utils/MoneroMoneyTests.cs @@ -2,7 +2,7 @@ using System.Globalization; using Xunit; using BTCPayServer.Plugins.Monero.Utils; -namespace BTCPayServer.Plugins.Monero.UnitTests.Utils +namespace BTCPayServer.Plugins.UnitTests.Monero.Utils { public class MoneroMoneyTests { diff --git a/BTCPayServer.Plugins.Monero.UnitTests/ViewModels/MoneroPaymentViewModelTests.cs b/BTCPayServer.Plugins.UnitTests/Monero/ViewModels/MoneroPaymentViewModelTests.cs similarity index 95% rename from BTCPayServer.Plugins.Monero.UnitTests/ViewModels/MoneroPaymentViewModelTests.cs rename to BTCPayServer.Plugins.UnitTests/Monero/ViewModels/MoneroPaymentViewModelTests.cs index 042a317..fe1e476 100644 --- a/BTCPayServer.Plugins.Monero.UnitTests/ViewModels/MoneroPaymentViewModelTests.cs +++ b/BTCPayServer.Plugins.UnitTests/Monero/ViewModels/MoneroPaymentViewModelTests.cs @@ -1,9 +1,8 @@ -using System; -using Xunit; -using BTCPayServer.Plugins.Monero.ViewModels; using BTCPayServer.Payments; +using BTCPayServer.Plugins.Monero.ViewModels; +using Xunit; -namespace BTCPayServer.Plugins.Monero.UnitTests.ViewModels +namespace BTCPayServer.Plugins.UnitTests.Monero.ViewModels { public class MoneroPaymentViewModelTests { diff --git a/Plugins/Monero/MoneroLikeSpecificBtcPayNetwork.cs b/Plugins/Monero/MoneroLikeSpecificBtcPayNetwork.cs index 9f4fd45..aa4968d 100644 --- a/Plugins/Monero/MoneroLikeSpecificBtcPayNetwork.cs +++ b/Plugins/Monero/MoneroLikeSpecificBtcPayNetwork.cs @@ -1,8 +1,7 @@ -namespace BTCPayServer.Plugins.Altcoins; +namespace BTCPayServer.Plugins.Monero; public class MoneroLikeSpecificBtcPayNetwork : BTCPayNetworkBase { public int MaxTrackedConfirmation = 10; public string UriScheme { get; set; } } - diff --git a/Plugins/Monero/RPC/Models/ParseStringConverter.cs b/Plugins/Monero/RPC/Models/ParseStringConverter.cs index 6c67c04..18b0984 100644 --- a/Plugins/Monero/RPC/Models/ParseStringConverter.cs +++ b/Plugins/Monero/RPC/Models/ParseStringConverter.cs @@ -4,7 +4,7 @@ using Newtonsoft.Json; namespace BTCPayServer.Plugins.Monero.RPC.Models { - internal class ParseStringConverter : JsonConverter + public class ParseStringConverter : JsonConverter { public override bool CanConvert(Type t) => t == typeof(long) || t == typeof(long?); diff --git a/README.md b/README.md index 25cf3ad..3dbc5c4 100644 --- a/README.md +++ b/README.md @@ -65,10 +65,15 @@ To build and run unit tests, run the following commands: dotnet build btcpay-monero-plugin.sln dotnet test BTCPayServer.Plugins.Monero.UnitTests --verbosity normal ``` -To run unit tests with coverage, run the following command: +To run unit tests with coverage, install JetBrains dotCover CLI: ```bash -dotnet test BTCPayServer.Plugins.Monero.UnitTests/BTCPayServer.Plugins.UnitTests.csproj /p:CollectCoverage=true /p:CoverletOutputFormat=json /p:CoverletOutput=../coverage/coverage.json +dotnet tool install --global JetBrains.dotCover.CommandLineTools +``` +Then run the following command: + +```bash +dotCover cover-dotnet --TargetArguments="test BTCPayServer.Plugins.UnitTests --no-build" --ReportType=HTML --Output=coverage/dotCover.UnitTests.output.html --ReportType=detailedXML --Output=coverage/dotCover.UnitTests.output.xml --filters="-:Assembly=BTCPayServer.Plugins.UnitTests;-:Assembly=testhost;-:Assembly=BTCPayServer;-:Class=AspNetCoreGeneratedDocument.*" ``` To build and run integration tests, run the following commands: diff --git a/btcpay-monero-plugin.sln b/btcpay-monero-plugin.sln index dc22e9c..423d70e 100644 --- a/btcpay-monero-plugin.sln +++ b/btcpay-monero-plugin.sln @@ -36,7 +36,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{BDB6EEEA-4 README.md = README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BTCPayServer.Plugins.Monero.UnitTests", "BTCPayServer.Plugins.Monero.UnitTests\BTCPayServer.Plugins.UnitTests.csproj", "{BC95362E-D430-4CB4-B888-EE1C054C1E7A}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BTCPayServer.Plugins.UnitTests", "BTCPayServer.Plugins.UnitTests\BTCPayServer.Plugins.UnitTests.csproj", "{BC95362E-D430-4CB4-B888-EE1C054C1E7A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution