From fcc2f6b99a401a89b2a9d067465f5ba7c5ad9b56 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:34:21 +0200 Subject: [PATCH 01/68] chore: publish code coverage --- build/templates/unit-tests.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index c2bec201..4454665f 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -16,8 +16,23 @@ jobs: packageType: 'sdk' version: '$(DotNet.Sdk.VersionBC)' - - template: test/run-unit-tests.yml@templates - parameters: - dotnetSdkVersion: '$(DotNet.Sdk.Version)' - projectName: '$(Project).Tests.Unit' - includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) \ No newline at end of file + - task: UseDotNet@2 + displayName: 'Import .NET Core SDK ($(DotNet.Sdk.Version))' + inputs: + packageType: 'sdk' + version: '$(DotNet.Sdk.Version)' + includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) + + - task: DotNetCoreCLI@2 + displayName: 'Run unit tests' + inputs: + command: test + projects: 'src/**/$(Project).Tests.Unit.csproj' + arguments: '--configuration $(Build.Configuration) -p:coverletOutput=TestResults/ -p:CollectCoverage=true -p:CoverletOutputFormat=\"lcov\" -p:ExcludeByAttribute=\"Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute\" -p:Exclude=\"[Arcus.Testing.Tests.*]*\"' + nobuild: true + publishTestResults: true + + - task: PublishCodeCoverageResults@2 + inputs: + codeCoverageTool: 'Cobertura' + summaryFileLocation: src/**/$(Project).Tests.Unit/TestResults/coverage.info \ No newline at end of file From 3f8dc62c6dd888af6d2126f2490bd22ce29907bd Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:35:17 +0200 Subject: [PATCH 02/68] pr-fix: ci trigger --- build/ci-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/ci-build.yml b/build/ci-build.yml index 4b2b2b67..2894bfef 100644 --- a/build/ci-build.yml +++ b/build/ci-build.yml @@ -12,7 +12,7 @@ pr: paths: include: - src/* - - build/ci-build.yml + - build/* parameters: - name: 'Package.Version.ManualTrigger' From d90213cf6414e147be8118eb5484adcb86c39e54 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:40:35 +0200 Subject: [PATCH 03/68] pr-fix: collect code coverage --- build/templates/unit-tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 4454665f..d50833a4 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -28,9 +28,10 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) -p:coverletOutput=TestResults/ -p:CollectCoverage=true -p:CoverletOutputFormat=\"lcov\" -p:ExcludeByAttribute=\"Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute\" -p:Exclude=\"[Arcus.Testing.Tests.*]*\"' + arguments: '--configuration $(Build.Configuration) --collect "Code coverage"' nobuild: true publishTestResults: true + mergeTestResults: true - task: PublishCodeCoverageResults@2 inputs: From dd7cb656899d05b0c510647635d9f5309bfbbbe2 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:43:13 +0200 Subject: [PATCH 04/68] pr-fix: coverlage update --- build/templates/unit-tests.yml | 8 +++++--- src/Arcus.Testing.Tests.Unit/coverlet.runsettings | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 src/Arcus.Testing.Tests.Unit/coverlet.runsettings diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index d50833a4..ff90dadd 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -28,12 +28,14 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect "Code coverage"' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$($Project).Tests.Unit\coverlet.runsettings' nobuild: true publishTestResults: true mergeTestResults: true - - task: PublishCodeCoverageResults@2 + - task: PublishCodeCoverageResults@1 + displayName: 'Publish code coverage report' inputs: codeCoverageTool: 'Cobertura' - summaryFileLocation: src/**/$(Project).Tests.Unit/TestResults/coverage.info \ No newline at end of file + summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + failIfCoverageEmpty: true \ No newline at end of file diff --git a/src/Arcus.Testing.Tests.Unit/coverlet.runsettings b/src/Arcus.Testing.Tests.Unit/coverlet.runsettings new file mode 100644 index 00000000..ef5f74da --- /dev/null +++ b/src/Arcus.Testing.Tests.Unit/coverlet.runsettings @@ -0,0 +1,14 @@ + + + + + + + cobertura + [Arcus.Testing.Tests]* + Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute + + + + + \ No newline at end of file From 1c72ec59bb7bb7d38da1e63e6b1953debc7fe9ec Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:47:29 +0200 Subject: [PATCH 05/68] pr-fix: project var name --- build/templates/unit-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index ff90dadd..3af69651 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -28,7 +28,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$($Project).Tests.Unit\coverlet.runsettings' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Unit\coverlet.runsettings' nobuild: true publishTestResults: true mergeTestResults: true From 0493cb9c7fea1a7c785b460c4c87d269f3b3c288 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 08:58:36 +0200 Subject: [PATCH 06/68] pr-fix: add coverage to integration test project --- build/templates/integration-tests.yml | 39 ++++++++++++++++--- .../Arcus.Testing.Tests.Integration.csproj | 10 ++++- .../coverlet.runsettings | 14 +++++++ .../Core/PollTests.cs | 3 +- 4 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 src/Arcus.Testing.Tests.Integration/coverlet.runsettings diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index da04915f..efba058e 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -37,8 +37,37 @@ jobs: Set-AzDevOpsVariable -Name 'Arcus.Testing.ServicePrincipal.ClientId' -Value $env:servicePrincipalId Set-AzDevOpsVariable -Name 'Arcus.Testing.ServicePrincipal.ClientSecret' -Value $env:servicePrincipalKey - - template: test/run-integration-tests.yml@templates - parameters: - dotnetSdkVersion: '$(DotNet.Sdk.Version)' - projectName: '$(Project).Tests.Integration' - includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) \ No newline at end of file + - task: UseDotNet@2 + displayName: 'Import .NET Core SDK ($(DotNet.Sdk.Version))' + inputs: + packageType: 'sdk' + version: '$(DotNet.Sdk.Version)' + includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) + + - task: qetza.replacetokens.replacetokens-task.replacetokens@6 + displayName: 'Replace integration test tokens' + inputs: + root: 'src/$(Project).Tests.Integration/' + sources: 'appsettings.json' + missingVarLog: 'error' + logLevel: 'debug' + addBOM: true + tokenPrefix: '#{' + tokenSuffix: '}#' + + - task: DotNetCoreCLI@2 + displayName: 'Run integration tests' + inputs: + command: test + projects: 'src/**/$(Project).Tests.Integration.csproj' + arguments: '--configuration $(Build.Configuration)' + nobuild: true + publishTestResults: true + mergeTestResults: true + + - task: PublishCodeCoverageResults@1 + displayName: 'Publish code coverage report' + inputs: + codeCoverageTool: 'Cobertura' + summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + failIfCoverageEmpty: true \ No newline at end of file diff --git a/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj b/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj index c3fab9c6..f9c60df9 100644 --- a/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj +++ b/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -7,6 +7,14 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/Arcus.Testing.Tests.Integration/coverlet.runsettings b/src/Arcus.Testing.Tests.Integration/coverlet.runsettings new file mode 100644 index 00000000..ef5f74da --- /dev/null +++ b/src/Arcus.Testing.Tests.Integration/coverlet.runsettings @@ -0,0 +1,14 @@ + + + + + + + cobertura + [Arcus.Testing.Tests]* + Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute + + + + + \ No newline at end of file diff --git a/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs b/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs index f8758a22..ffe034cb 100644 --- a/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs @@ -100,7 +100,8 @@ await Poll.Target(AlwaysSucceedsResult) .Timeout(timeout)); // Assert - Assert.True(stopwatch.Elapsed >= timeout, "stopwatch should at least run until two intervals"); + stopwatch.Stop(); + Assert.True(stopwatch.Elapsed >= interval + interval, $"stopwatch should at least run until two intervals: {stopwatch.Elapsed} >= {timeout}"); } [Fact] From c11dbdf0420c7b55ee243ad1016b2432e53544ec Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:02:52 +0200 Subject: [PATCH 07/68] pr-fix: use az devops code coverge --- .github/workflows/code-coverage.yml | 37 ----------------------------- README.md | 2 +- 2 files changed, 1 insertion(+), 38 deletions(-) delete mode 100644 .github/workflows/code-coverage.yml diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml deleted file mode 100644 index f9aaed70..00000000 --- a/.github/workflows/code-coverage.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: "Code Coverage" - -on: - push: - branches: [ main ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ main ] - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - - strategy: - fail-fast: false - matrix: - language: [ 'csharp' ] - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '8.0.x' - dotnet-quality: 'preview' - - - name: Coverlet coverage unit test - run: dotnet test --framework net8.0 -p:coverletOutput=coverage.json -p:CollectCoverage=true -p:CoverletOutputFormat=\"opencover,json\" -p:ExcludeByAttribute=\"Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute\" -p:Exclude=\"[Arcus.Testing.Tests.*]*\" src/Arcus.Testing.Tests.Unit/Arcus.Testing.Tests.Unit.csproj - - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v4 - with: - token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index 40d73867..230c7dee 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Arcus - Testing [![Build Status](https://dev.azure.com/codit/Arcus/_apis/build/status/Commit%20builds/CI%20-%20Arcus.Testing?branchName=main)](https://dev.azure.com/codit/Arcus/_build/latest?definitionId=804&branchName=main) [![NuGet Badge](https://buildstats.info/nuget/Arcus.Testing.Logging?includePreReleases=true)](https://www.nuget.org/packages/Arcus.Testing.Logging/) -[![codecov](https://codecov.io/gh/arcus-azure/arcus.testing/graph/badge.svg?token=GIXXJO815Q)](https://codecov.io/gh/arcus-azure/arcus.testing) +![Azure DevOps coverage](https://img.shields.io/azure-devops/coverage/codit/Arcus/804) Reusable testing components for Arcus repo's. From dae0549b2636970c4c0c6645bbc14364ffd21f55 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:03:45 +0200 Subject: [PATCH 08/68] pr-fix: add coverage settings to integration test project --- build/templates/integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index efba058e..0188144e 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -60,7 +60,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Integration.csproj' - arguments: '--configuration $(Build.Configuration)' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Integration\coverlet.runsettings' nobuild: true publishTestResults: true mergeTestResults: true From 487a5c9641b09a32f3ac1737976e5d7a5c7280fd Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:10:19 +0200 Subject: [PATCH 09/68] pr-fix: check integrtion test coverage --- build/templates/integration-tests.yml | 2 +- build/templates/unit-tests.yml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 0188144e..5689cedd 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -65,7 +65,7 @@ jobs: publishTestResults: true mergeTestResults: true - - task: PublishCodeCoverageResults@1 + - task: PublishCodeCoverageResults@2 displayName: 'Publish code coverage report' inputs: codeCoverageTool: 'Cobertura' diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 3af69651..78f3215c 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -33,9 +33,9 @@ jobs: publishTestResults: true mergeTestResults: true - - task: PublishCodeCoverageResults@1 - displayName: 'Publish code coverage report' - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' - failIfCoverageEmpty: true \ No newline at end of file + # - task: PublishCodeCoverageResults@2 + # displayName: 'Publish code coverage report' + # inputs: + # codeCoverageTool: 'Cobertura' + # summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + # failIfCoverageEmpty: true \ No newline at end of file From b1b699f24149cba13f81d67b26f5ef9b146d85de Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:22:50 +0200 Subject: [PATCH 10/68] pr-fix: single publish coverage result --- build/ci-build.yml | 11 +++-------- build/templates/integration-tests.yml | 9 +-------- build/templates/publish-coverage.yml | 16 ++++++++++++++++ build/templates/unit-tests.yml | 9 +-------- 4 files changed, 21 insertions(+), 24 deletions(-) create mode 100644 build/templates/publish-coverage.yml diff --git a/build/ci-build.yml b/build/ci-build.yml index 2894bfef..360824db 100644 --- a/build/ci-build.yml +++ b/build/ci-build.yml @@ -66,21 +66,16 @@ stages: targetPath: '$(Pipeline.Workspace)/build' artifactName: Build - - stage: UnitTests - displayName: Unit Tests + - stage: Tests + displayName: 'Run tests' dependsOn: Build condition: succeeded() jobs: - template: templates/unit-tests.yml - - - stage: IntegrationTests - displayName: Integration Tests - dependsOn: Build - condition: succeeded() - jobs: - template: templates/integration-tests.yml parameters: azureServiceConnection: '${{ parameters.azureServiceConnection }}' + - template: templates/publish-coverage.yml - stage: ReleaseToMyget displayName: 'Release to MyGet' diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 5689cedd..1b43e4e0 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -63,11 +63,4 @@ jobs: arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Integration\coverlet.runsettings' nobuild: true publishTestResults: true - mergeTestResults: true - - - task: PublishCodeCoverageResults@2 - displayName: 'Publish code coverage report' - inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' - failIfCoverageEmpty: true \ No newline at end of file + mergeTestResults: true \ No newline at end of file diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml new file mode 100644 index 00000000..6e84fbfd --- /dev/null +++ b/build/templates/publish-coverage.yml @@ -0,0 +1,16 @@ +jobs: + - job: PublishCoverage + displayName: 'Publish code coverage' + pool: + vmImage: '$(Vm.Image)' + steps: + - task: DownloadPipelineArtifact@2 + displayName: 'Download build artifacts' + inputs: + artifact: 'Build' + - task: PublishCodeCoverageResults@2 + displayName: 'Publish code coverage report' + inputs: + codeCoverageTool: 'Cobertura' + summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + failIfCoverageEmpty: true \ No newline at end of file diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 78f3215c..2390fa17 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -31,11 +31,4 @@ jobs: arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Unit\coverlet.runsettings' nobuild: true publishTestResults: true - mergeTestResults: true - - # - task: PublishCodeCoverageResults@2 - # displayName: 'Publish code coverage report' - # inputs: - # codeCoverageTool: 'Cobertura' - # summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' - # failIfCoverageEmpty: true \ No newline at end of file + mergeTestResults: true \ No newline at end of file From 99763f581fa3c9c3e5b08d7d6345ac6d90ed561e Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:23:41 +0200 Subject: [PATCH 11/68] pr-fix: use single test stage --- build/ci-build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build/ci-build.yml b/build/ci-build.yml index 360824db..27f98d55 100644 --- a/build/ci-build.yml +++ b/build/ci-build.yml @@ -79,9 +79,7 @@ stages: - stage: ReleaseToMyget displayName: 'Release to MyGet' - dependsOn: - - UnitTests - - IntegrationTests + dependsOn: Tests condition: succeeded() jobs: - job: PushToMyGet From c7834682809e525950d738f689d3e5f3753764c5 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:27:12 +0200 Subject: [PATCH 12/68] pr-fix: adds depends on --- build/templates/publish-coverage.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 6e84fbfd..98ac25c6 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -3,6 +3,9 @@ jobs: displayName: 'Publish code coverage' pool: vmImage: '$(Vm.Image)' + dependsOn: + - UnitTests + - IntegrationTests steps: - task: DownloadPipelineArtifact@2 displayName: 'Download build artifacts' From 2b38b41796c9ffa7b0d2368712f65e1b4ea1fb86 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:37:06 +0200 Subject: [PATCH 13/68] pr-fix: publish artifacts directly --- build/templates/integration-tests.yml | 8 +++++++- build/templates/publish-coverage.yml | 10 +++++++--- build/templates/unit-tests.yml | 8 +++++++- .../EventHubs/TestEventHubsMessagePumpTests.cs | 2 +- .../ServiceBus/TestServiceBusMessagePumpTests.cs | 2 +- 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 1b43e4e0..4e680ae0 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -63,4 +63,10 @@ jobs: arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Integration\coverlet.runsettings' nobuild: true publishTestResults: true - mergeTestResults: true \ No newline at end of file + mergeTestResults: true + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: Coverage-Integration' + inputs: + ArtifactName: 'Coverage-Integration' + PathtoPublish: '$(Build.SourcesDirectory)/src/**/coverage.cobertura.xml' \ No newline at end of file diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 98ac25c6..839b6cdf 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -8,12 +8,16 @@ jobs: - IntegrationTests steps: - task: DownloadPipelineArtifact@2 - displayName: 'Download build artifacts' + displayName: 'Download unit tests artifacts' inputs: - artifact: 'Build' + artifact: 'Coverage-Unit' + - task: DownloadPipelineArtifact@2 + displayName: 'Download integration artifacts' + inputs: + artifact: 'Coverage-Integration' - task: PublishCodeCoverageResults@2 displayName: 'Publish code coverage report' inputs: codeCoverageTool: 'Cobertura' - summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + summaryFileLocation: 'src/**/coverage.cobertura.xml' failIfCoverageEmpty: true \ No newline at end of file diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 2390fa17..52536420 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -31,4 +31,10 @@ jobs: arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Unit\coverlet.runsettings' nobuild: true publishTestResults: true - mergeTestResults: true \ No newline at end of file + mergeTestResults: + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: Coverage-Unit' + inputs: + ArtifactName: 'Coverage-Unit' + PathtoPublish: '$(Build.SourcesDirectory)/src/**/coverage.cobertura.xml' \ No newline at end of file diff --git a/src/Arcus.Testing.Tests.Unit/Messaging/EventHubs/TestEventHubsMessagePumpTests.cs b/src/Arcus.Testing.Tests.Unit/Messaging/EventHubs/TestEventHubsMessagePumpTests.cs index 13bb0ed2..b6a99a10 100644 --- a/src/Arcus.Testing.Tests.Unit/Messaging/EventHubs/TestEventHubsMessagePumpTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Messaging/EventHubs/TestEventHubsMessagePumpTests.cs @@ -162,7 +162,7 @@ private async Task StartNewHostAsync( { IHostBuilder builder = Host.CreateDefaultBuilder() - .ConfigureLogging(logging => logging.AddXunitTestLogging(_outputWriter)) + .ConfigureLogging(logging => logging.ClearProviders().AddXunitTestLogging(_outputWriter)) .ConfigureServices(configureServices); using (IHost host = builder.Build()) diff --git a/src/Arcus.Testing.Tests.Unit/Messaging/ServiceBus/TestServiceBusMessagePumpTests.cs b/src/Arcus.Testing.Tests.Unit/Messaging/ServiceBus/TestServiceBusMessagePumpTests.cs index 7abf9834..edd71ca2 100644 --- a/src/Arcus.Testing.Tests.Unit/Messaging/ServiceBus/TestServiceBusMessagePumpTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Messaging/ServiceBus/TestServiceBusMessagePumpTests.cs @@ -174,7 +174,7 @@ private async Task StartNewHostAsync( { IHostBuilder builder = Host.CreateDefaultBuilder() - .ConfigureLogging(logging => logging.AddXunitTestLogging(_outputWriter)) + .ConfigureLogging(logging => logging.ClearProviders().AddXunitTestLogging(_outputWriter)) .ConfigureServices(configureServices); using (IHost host = builder.Build()) From 586fe7b44b8095f0db65462cb7d8111af8bc8ef0 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:09:25 +0200 Subject: [PATCH 14/68] pr-fix: publish artifacts directly --- build/templates/integration-tests.yml | 2 +- build/templates/unit-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 4e680ae0..fe79dbd9 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -69,4 +69,4 @@ jobs: displayName: 'Publish Artifact: Coverage-Integration' inputs: ArtifactName: 'Coverage-Integration' - PathtoPublish: '$(Build.SourcesDirectory)/src/**/coverage.cobertura.xml' \ No newline at end of file + PathtoPublish: '$(Build.ArtifactStagingDirectory)' \ No newline at end of file diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 52536420..0085a5b2 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -37,4 +37,4 @@ jobs: displayName: 'Publish Artifact: Coverage-Unit' inputs: ArtifactName: 'Coverage-Unit' - PathtoPublish: '$(Build.SourcesDirectory)/src/**/coverage.cobertura.xml' \ No newline at end of file + PathtoPublish: '$(Build.ArtifactStagingDirectory)' \ No newline at end of file From aa45a088ff42de036b52b9a763f0cd6ea0ee9a10 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:20:34 +0200 Subject: [PATCH 15/68] pr-fix: publish artifacts directly --- build/templates/integration-tests.yml | 15 ++++++++++----- build/templates/publish-coverage.yml | 8 ++++++-- build/templates/unit-tests.yml | 14 ++++++++++---- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index fe79dbd9..f62299e9 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -64,9 +64,14 @@ jobs: nobuild: true publishTestResults: true mergeTestResults: true - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: Coverage-Integration' + + - task: CopyFiles@2 + displayName: 'Copy build artifacts' + inputs: + contents: 'src/**/coverage.cobertura.xml' + targetFolder: '$(Pipeline.Workspace)/coverage-integration' + - task: PublishPipelineArtifact@0 + displayName: 'Publish build artifacts' inputs: - ArtifactName: 'Coverage-Integration' - PathtoPublish: '$(Build.ArtifactStagingDirectory)' \ No newline at end of file + targetPath: '$(Pipeline.Workspace)/coverage-integration' + artifactName: Coverage-Integration \ No newline at end of file diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 839b6cdf..948ff642 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -8,13 +8,17 @@ jobs: - IntegrationTests steps: - task: DownloadPipelineArtifact@2 - displayName: 'Download unit tests artifacts' + displayName: 'Download coverage unit artifacts' inputs: artifact: 'Coverage-Unit' + path: '$(Build.SourcesDirectory)/coverage-unit' + - task: DownloadPipelineArtifact@2 - displayName: 'Download integration artifacts' + displayName: 'Download coverage integration artifacts' inputs: artifact: 'Coverage-Integration' + path: '$(Build.SourcesDirectory)/coverage-integration' + - task: PublishCodeCoverageResults@2 displayName: 'Publish code coverage report' inputs: diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 0085a5b2..5c63641e 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -33,8 +33,14 @@ jobs: publishTestResults: true mergeTestResults: - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: Coverage-Unit' + - task: CopyFiles@2 + displayName: 'Copy build artifacts' inputs: - ArtifactName: 'Coverage-Unit' - PathtoPublish: '$(Build.ArtifactStagingDirectory)' \ No newline at end of file + contents: 'src/**/coverage.cobertura.xml' + targetFolder: '$(Pipeline.Workspace)/coverage-unit' + + - task: PublishPipelineArtifact@0 + displayName: 'Publish build artifacts' + inputs: + targetPath: '$(Pipeline.Workspace)/coverage-unit' + artifactName: Coverage-Unit \ No newline at end of file From 04130fb42595ff0c33556ae2357aaec2103c00eb Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:30:55 +0200 Subject: [PATCH 16/68] pr-fix: publish artifacts directly --- build/templates/integration-tests.yml | 2 +- build/templates/unit-tests.yml | 2 +- src/Arcus.Testing.Tests.Integration/coverlet.runsettings | 3 +++ src/Arcus.Testing.Tests.Unit/coverlet.runsettings | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index f62299e9..143bf5e5 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -68,7 +68,7 @@ jobs: - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: - contents: 'src/**/coverage.cobertura.xml' + contents: 'src/**/TestResults/*' targetFolder: '$(Pipeline.Workspace)/coverage-integration' - task: PublishPipelineArtifact@0 displayName: 'Publish build artifacts' diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 5c63641e..7db13225 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -36,7 +36,7 @@ jobs: - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: - contents: 'src/**/coverage.cobertura.xml' + contents: 'src/**/TestResults/*' targetFolder: '$(Pipeline.Workspace)/coverage-unit' - task: PublishPipelineArtifact@0 diff --git a/src/Arcus.Testing.Tests.Integration/coverlet.runsettings b/src/Arcus.Testing.Tests.Integration/coverlet.runsettings index ef5f74da..d067066c 100644 --- a/src/Arcus.Testing.Tests.Integration/coverlet.runsettings +++ b/src/Arcus.Testing.Tests.Integration/coverlet.runsettings @@ -1,5 +1,8 @@  + + .\TestResults + diff --git a/src/Arcus.Testing.Tests.Unit/coverlet.runsettings b/src/Arcus.Testing.Tests.Unit/coverlet.runsettings index ef5f74da..d067066c 100644 --- a/src/Arcus.Testing.Tests.Unit/coverlet.runsettings +++ b/src/Arcus.Testing.Tests.Unit/coverlet.runsettings @@ -1,5 +1,8 @@  + + .\TestResults + From 0e93f4a41ace6ec016173665ddc99434e593bf88 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:36:15 +0200 Subject: [PATCH 17/68] pr-fix: publish artifacts directly --- build/templates/integration-tests.yml | 3 ++- build/templates/unit-tests.yml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 143bf5e5..cd5ea035 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -68,8 +68,9 @@ jobs: - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: - contents: 'src/**/TestResults/*' + contents: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetFolder: '$(Pipeline.Workspace)/coverage-integration' + - task: PublishPipelineArtifact@0 displayName: 'Publish build artifacts' inputs: diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 7db13225..5313434b 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -36,7 +36,7 @@ jobs: - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: - contents: 'src/**/TestResults/*' + contents: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetFolder: '$(Pipeline.Workspace)/coverage-unit' - task: PublishPipelineArtifact@0 From f286876de686ab0965b6633c4632812983813d3f Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:20:57 +0200 Subject: [PATCH 18/68] pr-fix: single test job --- build/ci-build.yml | 5 ++-- build/templates/integration-tests.yml | 27 +++++++++++-------- .../coverlet.runsettings | 17 ------------ .../coverlet.runsettings | 17 ------------ 4 files changed, 18 insertions(+), 48 deletions(-) delete mode 100644 src/Arcus.Testing.Tests.Integration/coverlet.runsettings delete mode 100644 src/Arcus.Testing.Tests.Unit/coverlet.runsettings diff --git a/build/ci-build.yml b/build/ci-build.yml index 27f98d55..fd16d0f4 100644 --- a/build/ci-build.yml +++ b/build/ci-build.yml @@ -67,15 +67,14 @@ stages: artifactName: Build - stage: Tests - displayName: 'Run tests' dependsOn: Build condition: succeeded() jobs: - - template: templates/unit-tests.yml + # - template: templates/unit-tests.yml - template: templates/integration-tests.yml parameters: azureServiceConnection: '${{ parameters.azureServiceConnection }}' - - template: templates/publish-coverage.yml + # - template: templates/publish-coverage.yml - stage: ReleaseToMyget displayName: 'Release to MyGet' diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index cd5ea035..8a89ec32 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -44,6 +44,16 @@ jobs: version: '$(DotNet.Sdk.Version)' includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) + - task: DotNetCoreCLI@2 + displayName: 'Run unit tests' + inputs: + command: test + projects: 'src/**/$(Project).Tests.Unit.csproj' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' + nobuild: true + publishTestResults: true + mergeTestResults: true + - task: qetza.replacetokens.replacetokens-task.replacetokens@6 displayName: 'Replace integration test tokens' inputs: @@ -60,19 +70,14 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Integration.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Integration\coverlet.runsettings' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' nobuild: true publishTestResults: true mergeTestResults: true - - task: CopyFiles@2 - displayName: 'Copy build artifacts' - inputs: - contents: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' - targetFolder: '$(Pipeline.Workspace)/coverage-integration' - - - task: PublishPipelineArtifact@0 - displayName: 'Publish build artifacts' + - task: reportgenerator@5 + displayName: ReportGenerator inputs: - targetPath: '$(Pipeline.Workspace)/coverage-integration' - artifactName: Coverage-Integration \ No newline at end of file + reports: )/**/coverage.cobertura.xml' + targetdir: coveragereport + reporttypes: Html;HtmlInline_AzurePipelines_Dark \ No newline at end of file diff --git a/src/Arcus.Testing.Tests.Integration/coverlet.runsettings b/src/Arcus.Testing.Tests.Integration/coverlet.runsettings deleted file mode 100644 index d067066c..00000000 --- a/src/Arcus.Testing.Tests.Integration/coverlet.runsettings +++ /dev/null @@ -1,17 +0,0 @@ - - - - .\TestResults - - - - - - cobertura - [Arcus.Testing.Tests]* - Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute - - - - - \ No newline at end of file diff --git a/src/Arcus.Testing.Tests.Unit/coverlet.runsettings b/src/Arcus.Testing.Tests.Unit/coverlet.runsettings deleted file mode 100644 index d067066c..00000000 --- a/src/Arcus.Testing.Tests.Unit/coverlet.runsettings +++ /dev/null @@ -1,17 +0,0 @@ - - - - .\TestResults - - - - - - cobertura - [Arcus.Testing.Tests]* - Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute - - - - - \ No newline at end of file From b0eee3ef70dc2d356fc50398f7b2acd6ad5da139 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:21:21 +0200 Subject: [PATCH 19/68] pr-fix: single test job --- build/templates/integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 8a89ec32..805efeff 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -78,6 +78,6 @@ jobs: - task: reportgenerator@5 displayName: ReportGenerator inputs: - reports: )/**/coverage.cobertura.xml' + reports: /**/coverage.cobertura.xml' targetdir: coveragereport reporttypes: Html;HtmlInline_AzurePipelines_Dark \ No newline at end of file From fe7fbda1bf00bc35d87a9dde3bae67633e724b44 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:28:45 +0200 Subject: [PATCH 20/68] pr-fix: remove msbuild from csproj --- .../Arcus.Testing.Tests.Integration.csproj | 4 ---- src/Arcus.Testing.Tests.Unit/Arcus.Testing.Tests.Unit.csproj | 4 ---- 2 files changed, 8 deletions(-) diff --git a/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj b/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj index f9c60df9..73d2cbf2 100644 --- a/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj +++ b/src/Arcus.Testing.Tests.Integration/Arcus.Testing.Tests.Integration.csproj @@ -11,10 +11,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/Arcus.Testing.Tests.Unit/Arcus.Testing.Tests.Unit.csproj b/src/Arcus.Testing.Tests.Unit/Arcus.Testing.Tests.Unit.csproj index 0bbbf51e..7d82de78 100644 --- a/src/Arcus.Testing.Tests.Unit/Arcus.Testing.Tests.Unit.csproj +++ b/src/Arcus.Testing.Tests.Unit/Arcus.Testing.Tests.Unit.csproj @@ -11,10 +11,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - From 38aef37708cc6f076dc75842eede50d966aec8eb Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:35:43 +0200 Subject: [PATCH 21/68] pr-fix: force result directory --- build/templates/integration-tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 805efeff..14be049f 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -49,7 +49,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --results-directory $(Agent.TempDirectory)' nobuild: true publishTestResults: true mergeTestResults: true @@ -70,7 +70,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Integration.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --results-directory $(Agent.TempDirectory)' nobuild: true publishTestResults: true mergeTestResults: true @@ -78,6 +78,6 @@ jobs: - task: reportgenerator@5 displayName: ReportGenerator inputs: - reports: /**/coverage.cobertura.xml' + reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport reporttypes: Html;HtmlInline_AzurePipelines_Dark \ No newline at end of file From b3010d1bd6ce92d25b50fe986c3ee2b4d36c1419 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:40:13 +0200 Subject: [PATCH 22/68] pr-fix: force result directory --- build/templates/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 14be049f..1e56aa04 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -49,7 +49,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --results-directory $(Agent.TempDirectory)' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' nobuild: true publishTestResults: true mergeTestResults: true @@ -70,7 +70,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Integration.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --results-directory $(Agent.TempDirectory)' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' nobuild: true publishTestResults: true mergeTestResults: true From 0aa25d6c23c4601b502bbf5112fbb0121eb4ac63 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:47:01 +0200 Subject: [PATCH 23/68] pr-fix: explicitly publish results --- build/templates/integration-tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 1e56aa04..f2e9c32e 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -80,4 +80,5 @@ jobs: inputs: reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark \ No newline at end of file + reporttypes: Html;HtmlInline_AzurePipelines_Dark + publishCodeCoverageResults: true \ No newline at end of file From ff0cbcf6cbe1023633f2cb52f04de5c99c77411f Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:53:43 +0200 Subject: [PATCH 24/68] pr-fix: Cobertura type --- build/templates/integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index f2e9c32e..e1720b2c 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -80,5 +80,5 @@ jobs: inputs: reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark + reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura publishCodeCoverageResults: true \ No newline at end of file From 7ec78514c5d63b3b01a112cb67ee821b0c9f165d Mon Sep 17 00:00:00 2001 From: Stijn Moreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 05:49:58 +0200 Subject: [PATCH 25/68] Update publish-coverage.yml --- build/templates/publish-coverage.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 948ff642..578c640a 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -24,4 +24,11 @@ jobs: inputs: codeCoverageTool: 'Cobertura' summaryFileLocation: 'src/**/coverage.cobertura.xml' - failIfCoverageEmpty: true \ No newline at end of file + failIfCoverageEmpty: true + + - task: BuildQualityChecks@8 + displayName: 'Check code quality' + inputs: + checkCoverage: true + coverageFailOption: fixed + coverageThreshold: 70 From 6c88c97d8a505a1b84e88af4d33ac438c89655c6 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:25:18 +0200 Subject: [PATCH 26/68] pr-fix: add gh comment --- build/templates/publish-coverage.yml | 27 ++++++++++++++------------- build/templates/unit-tests.yml | 2 +- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 578c640a..620b5699 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -11,24 +11,25 @@ jobs: displayName: 'Download coverage unit artifacts' inputs: artifact: 'Coverage-Unit' - path: '$(Build.SourcesDirectory)/coverage-unit' + path: '$(Build.SourcesDirectory)/TestResults' - task: DownloadPipelineArtifact@2 displayName: 'Download coverage integration artifacts' inputs: artifact: 'Coverage-Integration' - path: '$(Build.SourcesDirectory)/coverage-integration' + path: '$(Build.SourcesDirectory)/TestResults' - - task: PublishCodeCoverageResults@2 - displayName: 'Publish code coverage report' + - task: reportgenerator@5 + displayName: ReportGenerator inputs: - codeCoverageTool: 'Cobertura' - summaryFileLocation: 'src/**/coverage.cobertura.xml' - failIfCoverageEmpty: true + reports: '$(Build.SourcesDirectory)/TestResults/**/coverage.cobertura.xml' + targetdir: coveragereport + reporttypes: Html;HtmlInline_AzurePipelines_Dark + publishCodeCoverageResults: true - - task: BuildQualityChecks@8 - displayName: 'Check code quality' - inputs: - checkCoverage: true - coverageFailOption: fixed - coverageThreshold: 70 + - task: BuildQualityChecks@8 + displayName: 'Check code quality' + inputs: + checkCoverage: true + coverageFailOption: fixed + coverageThreshold: 70 diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 5313434b..4ec62dde 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -28,7 +28,7 @@ jobs: inputs: command: test projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --settings .\src\$(Project).Tests.Unit\coverlet.runsettings' + arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' nobuild: true publishTestResults: true mergeTestResults: From d01b73c6f771e529fae3175565c4cc2229b1197d Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:29:11 +0200 Subject: [PATCH 27/68] pr-fix: add summary report --- build/templates/integration-tests.yml | 41 +++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index e1720b2c..ecb97336 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -80,5 +80,42 @@ jobs: inputs: reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura - publishCodeCoverageResults: true \ No newline at end of file + reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary + publishCodeCoverageResults: true + + - task: BuildQualityChecks@8 + displayName: 'Check code quality' + inputs: + checkCoverage: true + coverageFailOption: fixed + coverageThreshold: 80 + + - powershell: | + # Check if GitHub CLI is installed + if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { + # Download and install GitHub CLI + Invoke-WebRequest -Uri "https://github.com/cli/cli/releases/latest/download/gh_2.0.0_windows_amd64.msi" -OutFile "$env:TEMP\gh.msi" + Start-Process msiexec.exe -ArgumentList "/i $env:TEMP\gh.msi /quiet /norestart" -Wait + } + + # Authenticate with GitHub CLI + $env:GITHUB_TOKEN = "${{ secrets.GITHUB_TOKEN }}" + echo $env:GITHUB_TOKEN | gh auth login --with-token + + # Check for existing code coverage comment + $prNumber = ${{ github.event.pull_request.number }} + $existingComment = gh pr view $prNumber --json comments --jq '.comments[].body' | Select-String -Pattern 'Delta Summary' + + $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/Summary.md" -Raw + + # Post or update the comment with the code coverage report + if (-not $existingComment) { + gh pr comment $prNumber --body $coverage_report + } else { + $commentId = gh pr view $prNumber --json comments --jq '.comments[] | select(.body | contains("Delta Summary")) | .id' + gh pr comment update $commentId --body $coverage_report + } + displayName: 'Post Code Coverage Report on PR' + env: + GITHUB_TOKEN: $(GITHUB_TOKEN) + \ No newline at end of file From 7a9c5c45770ad3c26a144e91364cfebbe9db42de Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:30:20 +0200 Subject: [PATCH 28/68] pr-fix: secrets --- build/templates/integration-tests.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index ecb97336..e51ef94b 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -99,7 +99,6 @@ jobs: } # Authenticate with GitHub CLI - $env:GITHUB_TOKEN = "${{ secrets.GITHUB_TOKEN }}" echo $env:GITHUB_TOKEN | gh auth login --with-token # Check for existing code coverage comment From 7564b53a4fc129d5be3ffc52b3136ec77d2cdc70 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:32:39 +0200 Subject: [PATCH 29/68] pr-fix: pr number --- build/templates/integration-tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index e51ef94b..18f37814 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -102,7 +102,7 @@ jobs: echo $env:GITHUB_TOKEN | gh auth login --with-token # Check for existing code coverage comment - $prNumber = ${{ github.event.pull_request.number }} + $prNumber = $env:System.PullRequest.PullRequestNumber $existingComment = gh pr view $prNumber --json comments --jq '.comments[].body' | Select-String -Pattern 'Delta Summary' $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/Summary.md" -Raw @@ -117,4 +117,5 @@ jobs: displayName: 'Post Code Coverage Report on PR' env: GITHUB_TOKEN: $(GITHUB_TOKEN) + System.PullRequest.PullRequestNumber: $(System.PullRequest.PullRequestNumber) \ No newline at end of file From 9e2476ff48322260cee624bc2789973f10600673 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:35:06 +0200 Subject: [PATCH 30/68] pr-fix: pr number --- build/templates/integration-tests.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 18f37814..be916cdc 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -83,12 +83,12 @@ jobs: reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary publishCodeCoverageResults: true - - task: BuildQualityChecks@8 - displayName: 'Check code quality' - inputs: - checkCoverage: true - coverageFailOption: fixed - coverageThreshold: 80 + # - task: BuildQualityChecks@8 + # displayName: 'Check code quality' + # inputs: + # checkCoverage: true + # coverageFailOption: fixed + # coverageThreshold: 80 - powershell: | # Check if GitHub CLI is installed From 2c9563cf49b2f0b5643f22d64cb1aee0c2c270e6 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:44:40 +0200 Subject: [PATCH 31/68] pr-fix: pr number --- build/templates/integration-tests.yml | 34 ++++++++++++++++++++------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index be916cdc..8a6bbada 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -80,15 +80,28 @@ jobs: inputs: reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary + reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary;MarkdownSummaryGithub publishCodeCoverageResults: true - # - task: BuildQualityChecks@8 - # displayName: 'Check code quality' - # inputs: - # checkCoverage: true - # coverageFailOption: fixed - # coverageThreshold: 80 + # - powershell: | + # # Parse the coverage results + # [xml]$coverageReport = Get-Content "$(System.DefaultWorkingDirectory)/**/coverage.cobertura.xml" + # $lineCoverage = [math]::Round(($coverageReport.coverage.packages.package.classes.class.lines.line | Where-Object { $_.hits -gt 0 }).Count / $coverageReport.coverage.packages.package.classes.class.lines.line.Count * 100, 2) + + # Write-Output "Line Coverage: $lineCoverage%" + + # # Define the coverage threshold + # $coverageThreshold = 80 + + # # Check if the coverage meets the threshold + # if ($lineCoverage -lt $coverageThreshold) { + # Write-Error "Code coverage ($lineCoverage%) is below the threshold ($coverageThreshold%). Failing the pipeline." + # exit 1 + # } else { + # Write-Output "Code coverage ($lineCoverage%) meets the threshold ($coverageThreshold%)." + # } + # displayName: 'Check code coverage threshold' + - powershell: | # Check if GitHub CLI is installed @@ -105,7 +118,12 @@ jobs: $prNumber = $env:System.PullRequest.PullRequestNumber $existingComment = gh pr view $prNumber --json comments --jq '.comments[].body' | Select-String -Pattern 'Delta Summary' - $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/Summary.md" -Raw + $coverage_report = "" + if (Test-Path "$(Build.SourcesDirectory)/coveragereport/DeltaSummary.md") { + $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/DeltaSummary.md" -Raw + } else { + $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/SummaryGitHub.md" -Raw + } # Post or update the comment with the code coverage report if (-not $existingComment) { From e97bb073354e9ec7774fd2f9d2df747c2034b943 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 10:40:25 +0200 Subject: [PATCH 32/68] pr-fix: publish code coverage in gh workflow --- .github/workflows/publish-coverage-pr.yml | 35 ++++++++++++++ build/templates/integration-tests.yml | 59 +++-------------------- 2 files changed, 41 insertions(+), 53 deletions(-) create mode 100644 .github/workflows/publish-coverage-pr.yml diff --git a/.github/workflows/publish-coverage-pr.yml b/.github/workflows/publish-coverage-pr.yml new file mode 100644 index 00000000..bd33904c --- /dev/null +++ b/.github/workflows/publish-coverage-pr.yml @@ -0,0 +1,35 @@ +name: Publish Azure DevOps code coverage on GitHub PR + +on: + pull_request: + branches: [ main ] + +jobs: + publish: + name: Publish Azure DevOps code coverage + runs-on: ubuntu-latest + + permissions: + actions: write + contents: read + pull-requests: write + + strategy: + fail-fast: true + matrix: + language: [ 'csharp' ] + + steps: + - name: Download AzureDevOps code coverage summary + uses: git-for-windows/get-azure-pipelines-artifact@v0 + with: + repository: 'codit/arcus' + definitionId: 804 + artifact: 'CodeCoverageSummaryGitHub' + + - name: Add coverage PR comment + uses: marocchina/sticky-pull-request-comment@v2 + if: github.event_name == 'pull_request' + with: + recreate: true + path: coveragereport/SummaryGitHub.md \ No newline at end of file diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 8a6bbada..c7b38ea2 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -83,57 +83,10 @@ jobs: reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary;MarkdownSummaryGithub publishCodeCoverageResults: true - # - powershell: | - # # Parse the coverage results - # [xml]$coverageReport = Get-Content "$(System.DefaultWorkingDirectory)/**/coverage.cobertura.xml" - # $lineCoverage = [math]::Round(($coverageReport.coverage.packages.package.classes.class.lines.line | Where-Object { $_.hits -gt 0 }).Count / $coverageReport.coverage.packages.package.classes.class.lines.line.Count * 100, 2) - - # Write-Output "Line Coverage: $lineCoverage%" - - # # Define the coverage threshold - # $coverageThreshold = 80 - - # # Check if the coverage meets the threshold - # if ($lineCoverage -lt $coverageThreshold) { - # Write-Error "Code coverage ($lineCoverage%) is below the threshold ($coverageThreshold%). Failing the pipeline." - # exit 1 - # } else { - # Write-Output "Code coverage ($lineCoverage%) meets the threshold ($coverageThreshold%)." - # } - # displayName: 'Check code coverage threshold' - - - - powershell: | - # Check if GitHub CLI is installed - if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { - # Download and install GitHub CLI - Invoke-WebRequest -Uri "https://github.com/cli/cli/releases/latest/download/gh_2.0.0_windows_amd64.msi" -OutFile "$env:TEMP\gh.msi" - Start-Process msiexec.exe -ArgumentList "/i $env:TEMP\gh.msi /quiet /norestart" -Wait - } - - # Authenticate with GitHub CLI - echo $env:GITHUB_TOKEN | gh auth login --with-token - - # Check for existing code coverage comment - $prNumber = $env:System.PullRequest.PullRequestNumber - $existingComment = gh pr view $prNumber --json comments --jq '.comments[].body' | Select-String -Pattern 'Delta Summary' - - $coverage_report = "" - if (Test-Path "$(Build.SourcesDirectory)/coveragereport/DeltaSummary.md") { - $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/DeltaSummary.md" -Raw - } else { - $coverage_report = Get-Content "$(Build.SourcesDirectory)/coveragereport/SummaryGitHub.md" -Raw - } - - # Post or update the comment with the code coverage report - if (-not $existingComment) { - gh pr comment $prNumber --body $coverage_report - } else { - $commentId = gh pr view $prNumber --json comments --jq '.comments[] | select(.body | contains("Delta Summary")) | .id' - gh pr comment update $commentId --body $coverage_report - } - displayName: 'Post Code Coverage Report on PR' - env: - GITHUB_TOKEN: $(GITHUB_TOKEN) - System.PullRequest.PullRequestNumber: $(System.PullRequest.PullRequestNumber) + - task: PublishBuildArtifacts@1 + displayName: 'Publish coverage report' + inputs: + pathtoPublish: 'coveragereport/SummaryGitHub.md' + artifactName: 'CodeCoverageSummaryGitHub' + publishLocation: 'Container' \ No newline at end of file From a25c156631e394154a22401025eea4d43e06d6f9 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 10:42:40 +0200 Subject: [PATCH 33/68] pr-fix: correct gh action --- .github/workflows/publish-coverage-pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-coverage-pr.yml b/.github/workflows/publish-coverage-pr.yml index bd33904c..e37cf551 100644 --- a/.github/workflows/publish-coverage-pr.yml +++ b/.github/workflows/publish-coverage-pr.yml @@ -28,7 +28,7 @@ jobs: artifact: 'CodeCoverageSummaryGitHub' - name: Add coverage PR comment - uses: marocchina/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@v2 if: github.event_name == 'pull_request' with: recreate: true From 089ce555f7c6ada8030cf6ffe2d0f6749140d574 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 10:50:09 +0200 Subject: [PATCH 34/68] pr-fix: publish on pr --- .github/workflows/publish-coverage-pr.yml | 35 ----------------------- build/templates/integration-tests.yml | 18 ++++++++---- 2 files changed, 12 insertions(+), 41 deletions(-) delete mode 100644 .github/workflows/publish-coverage-pr.yml diff --git a/.github/workflows/publish-coverage-pr.yml b/.github/workflows/publish-coverage-pr.yml deleted file mode 100644 index e37cf551..00000000 --- a/.github/workflows/publish-coverage-pr.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Publish Azure DevOps code coverage on GitHub PR - -on: - pull_request: - branches: [ main ] - -jobs: - publish: - name: Publish Azure DevOps code coverage - runs-on: ubuntu-latest - - permissions: - actions: write - contents: read - pull-requests: write - - strategy: - fail-fast: true - matrix: - language: [ 'csharp' ] - - steps: - - name: Download AzureDevOps code coverage summary - uses: git-for-windows/get-azure-pipelines-artifact@v0 - with: - repository: 'codit/arcus' - definitionId: 804 - artifact: 'CodeCoverageSummaryGitHub' - - - name: Add coverage PR comment - uses: marocchino/sticky-pull-request-comment@v2 - if: github.event_name == 'pull_request' - with: - recreate: true - path: coveragereport/SummaryGitHub.md \ No newline at end of file diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index c7b38ea2..0420232f 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -83,10 +83,16 @@ jobs: reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary;MarkdownSummaryGithub publishCodeCoverageResults: true - - task: PublishBuildArtifacts@1 - displayName: 'Publish coverage report' + - powershell: | + Install-Module -Name Arcus.Scripting.DevOps -AllowClobber + Import-Module -Name Arcus.Scripting.DevOps + $content = Get-Content -Path 'coveragereport/SummaryGitHub.md' -Raw + Set-AzDevOpsVariable -Name 'SummaryGitHub' -Value $content + + - task: GitHubComment@0 + displayName: 'Add code coverage comment to PR' inputs: - pathtoPublish: 'coveragereport/SummaryGitHub.md' - artifactName: 'CodeCoverageSummaryGitHub' - publishLocation: 'Container' - \ No newline at end of file + gitHubConnection: 'arcus-azure' + repository: '$(Build.Repository.Name)' + id: '$(System.PullRequest.PullRequestNumber)' + comment: '$(SummaryGitHub)' \ No newline at end of file From adc70d392b3e3bc28c9edf71f2e7934d8ec1d8f2 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:01:19 +0200 Subject: [PATCH 35/68] pr-fix: correct path --- build/templates/integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 0420232f..caa0a14a 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -86,7 +86,7 @@ jobs: - powershell: | Install-Module -Name Arcus.Scripting.DevOps -AllowClobber Import-Module -Name Arcus.Scripting.DevOps - $content = Get-Content -Path 'coveragereport/SummaryGitHub.md' -Raw + $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw Set-AzDevOpsVariable -Name 'SummaryGitHub' -Value $content - task: GitHubComment@0 From 445fa4708bbc22dc2c2d1e61b9cdd60ebc77e533 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 12:30:10 +0200 Subject: [PATCH 36/68] pr-fix: use gh cli --- build/ci-build.yml | 2 +- build/templates/integration-tests.yml | 25 +++++++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/build/ci-build.yml b/build/ci-build.yml index fd16d0f4..d3c7b1d3 100644 --- a/build/ci-build.yml +++ b/build/ci-build.yml @@ -31,7 +31,7 @@ resources: endpoint: arcus-azure variables: - - group: 'Arcus - GitHub Package Registry' + - group: 'GitHub Configuration' - group: 'Build Configuration' - template: ./variables/build.yml diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index caa0a14a..e378862d 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -86,13 +86,22 @@ jobs: - powershell: | Install-Module -Name Arcus.Scripting.DevOps -AllowClobber Import-Module -Name Arcus.Scripting.DevOps + $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - Set-AzDevOpsVariable -Name 'SummaryGitHub' -Value $content - - task: GitHubComment@0 - displayName: 'Add code coverage comment to PR' - inputs: - gitHubConnection: 'arcus-azure' - repository: '$(Build.Repository.Name)' - id: '$(System.PullRequest.PullRequestNumber)' - comment: '$(SummaryGitHub)' \ No newline at end of file + Invoke-WebRequest -Uri https://github.com/cli/cli/releases/download/v2.0.0/gh_2.0.0_windows_amd64.msi -OutFile gh-cli.msi + Start-Process msiexec.exe -ArgumentList '/i gh-cli.msi /quiet' -NoNewWindow -Wait + Remove-Item gh-cli.msi + + # Verify installation + if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { + Write-Error "GitHub CLI (gh) installation failed." + exit 1 + } + + gh auth login --with-token $env:GITHUB_TOKEN + gh repo view + gh pr comment $env:PR_NUMBER --body $content --edit-last + env: + GITHUB_TOKEN: $(GITHUB_TOKEN) + PR_NUMBER: $(System.PullRequest.PullRequestId) From 2ca6a9578d6e6dd9f02283a4c97922df3048f1df Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 12:37:40 +0200 Subject: [PATCH 37/68] pr-fix: install other way --- build/templates/integration-tests.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index e378862d..e00a47da 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -83,21 +83,18 @@ jobs: reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary;MarkdownSummaryGithub publishCodeCoverageResults: true + - script: sudo apt install gh - powershell: | Install-Module -Name Arcus.Scripting.DevOps -AllowClobber Import-Module -Name Arcus.Scripting.DevOps $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - - Invoke-WebRequest -Uri https://github.com/cli/cli/releases/download/v2.0.0/gh_2.0.0_windows_amd64.msi -OutFile gh-cli.msi - Start-Process msiexec.exe -ArgumentList '/i gh-cli.msi /quiet' -NoNewWindow -Wait - Remove-Item gh-cli.msi - - # Verify installation - if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { - Write-Error "GitHub CLI (gh) installation failed." - exit 1 - } + + # Verify installation + if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { + Write-Error "GitHub CLI (gh) installation failed." + exit 1 + } gh auth login --with-token $env:GITHUB_TOKEN gh repo view From 186517c25fa9f09b217c7f438fa1f71359f9e846 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 13:16:19 +0200 Subject: [PATCH 38/68] pr-fix: remove useless test --- .../DemoIntegrationTest.cs | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/Arcus.Testing.Tests.Integration/DemoIntegrationTest.cs diff --git a/src/Arcus.Testing.Tests.Integration/DemoIntegrationTest.cs b/src/Arcus.Testing.Tests.Integration/DemoIntegrationTest.cs deleted file mode 100644 index 76ef29a7..00000000 --- a/src/Arcus.Testing.Tests.Integration/DemoIntegrationTest.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Threading.Tasks; -using Xunit; -using Xunit.Abstractions; - -namespace Arcus.Template.Tests.Integration -{ - [Trait(name: "Category", value: "Integration")] - public class DemoIntegrationTest : IntegrationTest - { - // The same tests should be tested with different KeyVaultClientFactories - // What's the best approach for this ? - - public DemoIntegrationTest(ITestOutputHelper testOutput) : base(testOutput) - { - } - - [Fact] - public async Task ThisJustWorks() - { - // Arrange - - // Act - - // Assert - } - } -} From 27d34df56be512fc79142b05b12271c238567577 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 13:24:39 +0200 Subject: [PATCH 39/68] pr-fix: use pr number --- build/templates/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index e00a47da..d892dfbd 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -89,7 +89,7 @@ jobs: Import-Module -Name Arcus.Scripting.DevOps $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - + # Verify installation if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { Write-Error "GitHub CLI (gh) installation failed." @@ -101,4 +101,4 @@ jobs: gh pr comment $env:PR_NUMBER --body $content --edit-last env: GITHUB_TOKEN: $(GITHUB_TOKEN) - PR_NUMBER: $(System.PullRequest.PullRequestId) + PR_NUMBER: $(System.PullRequest.PullRequestNumber) From f2ca01686b6eeb26fb8e40c25da971e48d775377 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 13:42:46 +0200 Subject: [PATCH 40/68] pr-fix: upsert comment --- build/templates/integration-tests.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index d892dfbd..fb31af1f 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -90,15 +90,17 @@ jobs: $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - # Verify installation - if (-not (Get-Command gh -ErrorAction SilentlyContinue)) { - Write-Error "GitHub CLI (gh) installation failed." - exit 1 - } - gh auth login --with-token $env:GITHUB_TOKEN gh repo view - gh pr comment $env:PR_NUMBER --body $content --edit-last + + $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' + $commentExists = $comments | Where-Object { $_ -like "*Cobertura*" } + + if ($commentExists) { + gh pr comment $env:PR_NUMBER --body $content --edit-last + } else { + gh pr comment $env:PR_NUMBER --body $content + } env: GITHUB_TOKEN: $(GITHUB_TOKEN) PR_NUMBER: $(System.PullRequest.PullRequestNumber) From f64f7b724e46dfa4c0c8356e36200d31fd72e04a Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:04:35 +0200 Subject: [PATCH 41/68] pr-fix: change summary --- build/templates/integration-tests.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index fb31af1f..3dd84b98 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -80,22 +80,18 @@ jobs: inputs: reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownDeltaSummary;MarkdownSummaryGithub + reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownAssembliesSummary publishCodeCoverageResults: true - script: sudo apt install gh - powershell: | - Install-Module -Name Arcus.Scripting.DevOps -AllowClobber - Import-Module -Name Arcus.Scripting.DevOps - - $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - gh auth login --with-token $env:GITHUB_TOKEN gh repo view $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' $commentExists = $comments | Where-Object { $_ -like "*Cobertura*" } + $content = Get-Content -Path './coveragereport/Summary.md' -Raw if ($commentExists) { gh pr comment $env:PR_NUMBER --body $content --edit-last } else { From 9d229618638f2bf7b175293c7660c707899496e9 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Wed, 31 Jul 2024 18:48:39 +0200 Subject: [PATCH 42/68] pr-fix: use gh summary --- build/templates/integration-tests.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 3dd84b98..f6810bc8 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -80,7 +80,7 @@ jobs: inputs: reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownAssembliesSummary + reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownSummaryGithub publishCodeCoverageResults: true - script: sudo apt install gh @@ -89,9 +89,11 @@ jobs: gh repo view $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' - $commentExists = $comments | Where-Object { $_ -like "*Cobertura*" } + $commentExists = $comments | Where-Object { $_ -like "*Code coverage summary*" } + + $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw + $content = $content[0..($content.IndexOf('## Coverage'))] - $content = Get-Content -Path './coveragereport/Summary.md' -Raw if ($commentExists) { gh pr comment $env:PR_NUMBER --body $content --edit-last } else { From 6065c1d65404d427d95fc351f9f67136d9818911 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:12:33 +0200 Subject: [PATCH 43/68] pr-fix: separate jobs --- build/ci-build.yml | 4 ++-- build/templates/integration-tests.yml | 34 +++++++-------------------- build/templates/publish-coverage.yml | 11 ++------- build/templates/unit-tests.yml | 4 ++-- 4 files changed, 15 insertions(+), 38 deletions(-) diff --git a/build/ci-build.yml b/build/ci-build.yml index d3c7b1d3..f2feeb86 100644 --- a/build/ci-build.yml +++ b/build/ci-build.yml @@ -70,11 +70,11 @@ stages: dependsOn: Build condition: succeeded() jobs: - # - template: templates/unit-tests.yml + - template: templates/unit-tests.yml - template: templates/integration-tests.yml parameters: azureServiceConnection: '${{ parameters.azureServiceConnection }}' - # - template: templates/publish-coverage.yml + - template: templates/publish-coverage.yml - stage: ReleaseToMyget displayName: 'Release to MyGet' diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index f6810bc8..98eaefec 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -75,30 +75,14 @@ jobs: publishTestResults: true mergeTestResults: true - - task: reportgenerator@5 - displayName: ReportGenerator + - task: CopyFiles@2 + displayName: 'Copy build artifacts' inputs: - reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' - targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownSummaryGithub - publishCodeCoverageResults: true + contents: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + targetFolder: '$(Pipeline.Workspace)/coverage-integration' - - script: sudo apt install gh - - powershell: | - gh auth login --with-token $env:GITHUB_TOKEN - gh repo view - - $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' - $commentExists = $comments | Where-Object { $_ -like "*Code coverage summary*" } - - $content = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - $content = $content[0..($content.IndexOf('## Coverage'))] - - if ($commentExists) { - gh pr comment $env:PR_NUMBER --body $content --edit-last - } else { - gh pr comment $env:PR_NUMBER --body $content - } - env: - GITHUB_TOKEN: $(GITHUB_TOKEN) - PR_NUMBER: $(System.PullRequest.PullRequestNumber) + - task: PublishPipelineArtifact@0 + displayName: 'Publish build artifacts' + inputs: + targetPath: '$(Pipeline.Workspace)/coverage-integration' + artifactName: Coverage-Integration diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 620b5699..66accc57 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -22,14 +22,7 @@ jobs: - task: reportgenerator@5 displayName: ReportGenerator inputs: - reports: '$(Build.SourcesDirectory)/TestResults/**/coverage.cobertura.xml' + reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' targetdir: coveragereport - reporttypes: Html;HtmlInline_AzurePipelines_Dark + reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownSummaryGithub publishCodeCoverageResults: true - - - task: BuildQualityChecks@8 - displayName: 'Check code quality' - inputs: - checkCoverage: true - coverageFailOption: fixed - coverageThreshold: 70 diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 4ec62dde..b57cd4ef 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -31,8 +31,8 @@ jobs: arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' nobuild: true publishTestResults: true - mergeTestResults: - + mergeTestResults: true + - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: From 5e36e0cbced78f0a05e8387f9e9a0dcbeca51d92 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:19:54 +0200 Subject: [PATCH 44/68] pr-fix: use wildards --- build/templates/integration-tests.yml | 12 +----------- build/templates/unit-tests.yml | 2 +- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 98eaefec..b254b407 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -44,16 +44,6 @@ jobs: version: '$(DotNet.Sdk.Version)' includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) - - task: DotNetCoreCLI@2 - displayName: 'Run unit tests' - inputs: - command: test - projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' - nobuild: true - publishTestResults: true - mergeTestResults: true - - task: qetza.replacetokens.replacetokens-task.replacetokens@6 displayName: 'Replace integration test tokens' inputs: @@ -78,7 +68,7 @@ jobs: - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: - contents: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + contents: '$(Agent.TempDirectory)/**' targetFolder: '$(Pipeline.Workspace)/coverage-integration' - task: PublishPipelineArtifact@0 diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index b57cd4ef..4315f73f 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -36,7 +36,7 @@ jobs: - task: CopyFiles@2 displayName: 'Copy build artifacts' inputs: - contents: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + contents: '$(Agent.TempDirectory)/**' targetFolder: '$(Pipeline.Workspace)/coverage-unit' - task: PublishPipelineArtifact@0 From 03ebfd2f4603e01c10fdebfbbcd94e32680c0c55 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:30:20 +0200 Subject: [PATCH 45/68] pr-fix: use own test --- build/templates/unit-tests.yml | 35 ++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 4315f73f..9d780d9c 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -23,24 +23,31 @@ jobs: version: '$(DotNet.Sdk.Version)' includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) - - task: DotNetCoreCLI@2 - displayName: 'Run unit tests' - inputs: - command: test - projects: 'src/**/$(Project).Tests.Unit.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' - nobuild: true - publishTestResults: true - mergeTestResults: true + # - task: DotNetCoreCLI@2 + # displayName: 'Run unit tests' + # inputs: + # command: test + # projects: 'src/**/$(Project).Tests.Unit.csproj' + # arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' + # nobuild: true + # publishTestResults: true + # mergeTestResults: true + - script: | + dotnet test src/**/$(Project).Tests.Unit.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) - - task: CopyFiles@2 - displayName: 'Copy build artifacts' + - task: PublishTestResults@2 inputs: - contents: '$(Agent.TempDirectory)/**' - targetFolder: '$(Pipeline.Workspace)/coverage-unit' + testResultsFormat: 'XUnit' + testResultsFiles: '**/TEST-*.trx' + + # - task: CopyFiles@2 + # displayName: 'Copy build artifacts' + # inputs: + # contents: '$(Agent.TempDirectory)/**' + # targetFolder: '$(Pipeline.Workspace)/coverage-unit' - task: PublishPipelineArtifact@0 displayName: 'Publish build artifacts' inputs: - targetPath: '$(Pipeline.Workspace)/coverage-unit' + targetPath: '$(Pipeline.Workspace)' artifactName: Coverage-Unit \ No newline at end of file From 6e688889bad241adab694d55d034feff339fd8de Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:38:39 +0200 Subject: [PATCH 46/68] pr-fix: use correct artifacts --- build/templates/integration-tests.yml | 27 ++++++++++++++++++--------- build/templates/unit-tests.yml | 2 +- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index b254b407..6e767130 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -55,15 +55,18 @@ jobs: tokenPrefix: '#{' tokenSuffix: '}#' - - task: DotNetCoreCLI@2 - displayName: 'Run integration tests' - inputs: - command: test - projects: 'src/**/$(Project).Tests.Integration.csproj' - arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' - nobuild: true - publishTestResults: true - mergeTestResults: true + # - task: DotNetCoreCLI@2 + # displayName: 'Run integration tests' + # inputs: + # command: test + # projects: 'src/**/$(Project).Tests.Integration.csproj' + # arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' + # nobuild: true + # publishTestResults: true + # mergeTestResults: true + + - script: | + dotnet test src/**/$(Project).Tests.Integration.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) - task: CopyFiles@2 displayName: 'Copy build artifacts' @@ -71,6 +74,12 @@ jobs: contents: '$(Agent.TempDirectory)/**' targetFolder: '$(Pipeline.Workspace)/coverage-integration' + # - task: CopyFiles@2 + # displayName: 'Copy build artifacts' + # inputs: + # contents: '$(Agent.TempDirectory)/**' + # targetFolder: '$(Pipeline.Workspace)/coverage-integration' + - task: PublishPipelineArtifact@0 displayName: 'Publish build artifacts' inputs: diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 9d780d9c..eb3f3d9d 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -38,7 +38,7 @@ jobs: - task: PublishTestResults@2 inputs: testResultsFormat: 'XUnit' - testResultsFiles: '**/TEST-*.trx' + testResultsFiles: '$(Pipeline.Workspace)/*.trx' # - task: CopyFiles@2 # displayName: 'Copy build artifacts' From e0d1a3f4fa1942636d7d45f72fe76d2449c3d82d Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:45:34 +0200 Subject: [PATCH 47/68] pr-fix: use correct var name --- build/templates/integration-tests.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 6e767130..25a81e68 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -66,13 +66,16 @@ jobs: # mergeTestResults: true - script: | - dotnet test src/**/$(Project).Tests.Integration.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) + dotnet test src/**/$(Project).Tests.Integration.csproj \ + --no-build --configuration $(Build.Configuration) \ + --collect:"XPlat Code Coverage" \ + --logger trx --results-directory $(Pipeline.Workspace) + displayName: 'Run integration tests' - - task: CopyFiles@2 - displayName: 'Copy build artifacts' + - task: PublishTestResults@2 inputs: - contents: '$(Agent.TempDirectory)/**' - targetFolder: '$(Pipeline.Workspace)/coverage-integration' + testResultsFormat: 'XUnit' + testResultsFiles: '$(Pipeline.Workspace)/*.trx' # - task: CopyFiles@2 # displayName: 'Copy build artifacts' @@ -83,5 +86,5 @@ jobs: - task: PublishPipelineArtifact@0 displayName: 'Publish build artifacts' inputs: - targetPath: '$(Pipeline.Workspace)/coverage-integration' + targetPath: '$(Pipeline.Workspace)' artifactName: Coverage-Integration From a811ea0b117cbc6ecd0e5d3124af2a9626eb8743 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:51:38 +0200 Subject: [PATCH 48/68] pr-fix: correct multi-line --- build/templates/integration-tests.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 25a81e68..613d624f 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -69,7 +69,8 @@ jobs: dotnet test src/**/$(Project).Tests.Integration.csproj \ --no-build --configuration $(Build.Configuration) \ --collect:"XPlat Code Coverage" \ - --logger trx --results-directory $(Pipeline.Workspace) + --logger trx --results-directory $(Pipeline.Workspace) \ + / displayName: 'Run integration tests' - task: PublishTestResults@2 From 6f6fa61fa0b96a38fee71deaf33823fbb429f095 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 07:52:38 +0200 Subject: [PATCH 49/68] pr-fix: correct coverage path --- build/templates/publish-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 66accc57..4b8c63b2 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -22,7 +22,7 @@ jobs: - task: reportgenerator@5 displayName: ReportGenerator inputs: - reports: '$(Agent.TempDirectory)/**/coverage.cobertura.xml' + reports: '$(Build.SourcesDirectory)/TestResults/**/coverage.cobertura.xml' targetdir: coveragereport reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownSummaryGithub publishCodeCoverageResults: true From 3daad7d0b3a518cec48172999c3d2a193f65863b Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 08:06:49 +0200 Subject: [PATCH 50/68] pr-ifix: correct multi-line --- build/templates/integration-tests.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 613d624f..25a81e68 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -69,8 +69,7 @@ jobs: dotnet test src/**/$(Project).Tests.Integration.csproj \ --no-build --configuration $(Build.Configuration) \ --collect:"XPlat Code Coverage" \ - --logger trx --results-directory $(Pipeline.Workspace) \ - / + --logger trx --results-directory $(Pipeline.Workspace) displayName: 'Run integration tests' - task: PublishTestResults@2 From 6176860d81c4586cca639bbe0e81235cf256ae59 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 08:23:29 +0200 Subject: [PATCH 51/68] pr-fix: correct format --- build/templates/integration-tests.yml | 2 +- build/templates/unit-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 25a81e68..4c8b2c04 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -74,7 +74,7 @@ jobs: - task: PublishTestResults@2 inputs: - testResultsFormat: 'XUnit' + testResultsFormat: 'VSTest' testResultsFiles: '$(Pipeline.Workspace)/*.trx' # - task: CopyFiles@2 diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index eb3f3d9d..d8d0f7e1 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -37,7 +37,7 @@ jobs: - task: PublishTestResults@2 inputs: - testResultsFormat: 'XUnit' + testResultsFormat: 'VSTest' testResultsFiles: '$(Pipeline.Workspace)/*.trx' # - task: CopyFiles@2 From 7a3cce6184cf235cc948780eb2e52b2e701ce942 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 08:28:41 +0200 Subject: [PATCH 52/68] pr-fix: sinlge line --- build/templates/integration-tests.yml | 8 +++----- build/templates/unit-tests.yml | 3 ++- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 4c8b2c04..9532191d 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -66,13 +66,11 @@ jobs: # mergeTestResults: true - script: | - dotnet test src/**/$(Project).Tests.Integration.csproj \ - --no-build --configuration $(Build.Configuration) \ - --collect:"XPlat Code Coverage" \ - --logger trx --results-directory $(Pipeline.Workspace) + dotnet test src/**/$(Project).Tests.Integration.csproj --no-build --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) displayName: 'Run integration tests' - task: PublishTestResults@2 + displayName: 'Publish integration test results' inputs: testResultsFormat: 'VSTest' testResultsFiles: '$(Pipeline.Workspace)/*.trx' @@ -84,7 +82,7 @@ jobs: # targetFolder: '$(Pipeline.Workspace)/coverage-integration' - task: PublishPipelineArtifact@0 - displayName: 'Publish build artifacts' + displayName: 'Publish integration test coverage artifacts' inputs: targetPath: '$(Pipeline.Workspace)' artifactName: Coverage-Integration diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index d8d0f7e1..63c6c4b8 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -36,6 +36,7 @@ jobs: dotnet test src/**/$(Project).Tests.Unit.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) - task: PublishTestResults@2 + displayName: 'Publish unit test results' inputs: testResultsFormat: 'VSTest' testResultsFiles: '$(Pipeline.Workspace)/*.trx' @@ -47,7 +48,7 @@ jobs: # targetFolder: '$(Pipeline.Workspace)/coverage-unit' - task: PublishPipelineArtifact@0 - displayName: 'Publish build artifacts' + displayName: 'Publish integration test coverage artifacts' inputs: targetPath: '$(Pipeline.Workspace)' artifactName: Coverage-Unit \ No newline at end of file From c8cdcd9e6c5256df441a0587e97392d069c2774c Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 08:36:45 +0200 Subject: [PATCH 53/68] pr-fix: w/o no-build --- build/templates/integration-tests.yml | 4 ++-- build/templates/unit-tests.yml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index 9532191d..ff2ce154 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -66,7 +66,7 @@ jobs: # mergeTestResults: true - script: | - dotnet test src/**/$(Project).Tests.Integration.csproj --no-build --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) + dotnet test src/**/$(Project).Tests.Integration.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) displayName: 'Run integration tests' - task: PublishTestResults@2 @@ -82,7 +82,7 @@ jobs: # targetFolder: '$(Pipeline.Workspace)/coverage-integration' - task: PublishPipelineArtifact@0 - displayName: 'Publish integration test coverage artifacts' + displayName: 'Publish code coverage artifacts' inputs: targetPath: '$(Pipeline.Workspace)' artifactName: Coverage-Integration diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index 63c6c4b8..d1338502 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -34,6 +34,7 @@ jobs: # mergeTestResults: true - script: | dotnet test src/**/$(Project).Tests.Unit.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) + displayName: 'Run unit tests' - task: PublishTestResults@2 displayName: 'Publish unit test results' @@ -48,7 +49,7 @@ jobs: # targetFolder: '$(Pipeline.Workspace)/coverage-unit' - task: PublishPipelineArtifact@0 - displayName: 'Publish integration test coverage artifacts' + displayName: 'Publish code coverage artifacts' inputs: targetPath: '$(Pipeline.Workspace)' artifactName: Coverage-Unit \ No newline at end of file From 54cce008c45f2c70f8762e5d46cf4689f64d4c1b Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:03:23 +0200 Subject: [PATCH 54/68] pr-fix: publish to gh --- build/templates/integration-tests.yml | 16 ----------- build/templates/publish-coverage.yml | 40 +++++++++++++++++++++++++++ build/templates/unit-tests.yml | 15 ---------- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/build/templates/integration-tests.yml b/build/templates/integration-tests.yml index ff2ce154..8ab49f10 100644 --- a/build/templates/integration-tests.yml +++ b/build/templates/integration-tests.yml @@ -55,16 +55,6 @@ jobs: tokenPrefix: '#{' tokenSuffix: '}#' - # - task: DotNetCoreCLI@2 - # displayName: 'Run integration tests' - # inputs: - # command: test - # projects: 'src/**/$(Project).Tests.Integration.csproj' - # arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' - # nobuild: true - # publishTestResults: true - # mergeTestResults: true - - script: | dotnet test src/**/$(Project).Tests.Integration.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) displayName: 'Run integration tests' @@ -75,12 +65,6 @@ jobs: testResultsFormat: 'VSTest' testResultsFiles: '$(Pipeline.Workspace)/*.trx' - # - task: CopyFiles@2 - # displayName: 'Copy build artifacts' - # inputs: - # contents: '$(Agent.TempDirectory)/**' - # targetFolder: '$(Pipeline.Workspace)/coverage-integration' - - task: PublishPipelineArtifact@0 displayName: 'Publish code coverage artifacts' inputs: diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 4b8c63b2..b907f4d2 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -26,3 +26,43 @@ jobs: targetdir: coveragereport reporttypes: Html;HtmlInline_AzurePipelines_Dark;Cobertura;MarkdownSummaryGithub publishCodeCoverageResults: true + + - script: sudo apt install gh + displayName: 'Install GitHub CLI' + + - powershell: | + gh auth login --with-token $(GITHUB_TOKEN) + gh repo view + + $summary = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw + $lineCoveragePattern = "\*\*Line coverage:\*\*\s*\|\s*(\d+\.\d+%)" + $branchCoveragePattern = "\*\*Branch coverage:\*\*\s*\|\s*(\d+\.\d+%)" + + $lineCoverage = "N/A" + if ($summary -match $lineCoveragePattern) { + $lineCoverage = $matches[1] + Write-Host "Line coverage: $lineCoverage" + } else { + Write-Host "Line coverage not found" + } + + $branchCoverage = "N/A" + if ($summary -match $branchCoveragePattern) { + $branchCoverage = $matches[1] + Write-Host "Branch coverage: $branchCoverage" + } else { + Write-Host "Branch coverage not found" + } + + $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' + $commentExists = $comments | Where-Object { $_ -like "*Code coverage summary*" } + $content = "## 🧪 Code coverage summary\n\nLine coverage: $lineCoverage\nBranch coverage: $branchCoverage" + + if ($commentExists) { + gh pr comment $env:PR_NUMBER --body $content --edit-last + } else { + gh pr comment $env:PR_NUMBER --body $content + } + env: + GITHUB_TOKEN: $(GITHUB_TOKEN) + PR_NUMBER: $(System.PullRequest.PullRequestNumber) diff --git a/build/templates/unit-tests.yml b/build/templates/unit-tests.yml index d1338502..22c28c3c 100644 --- a/build/templates/unit-tests.yml +++ b/build/templates/unit-tests.yml @@ -23,15 +23,6 @@ jobs: version: '$(DotNet.Sdk.Version)' includePreviewVersions: $(DotNet.Sdk.IncludePreviewVersions) - # - task: DotNetCoreCLI@2 - # displayName: 'Run unit tests' - # inputs: - # command: test - # projects: 'src/**/$(Project).Tests.Unit.csproj' - # arguments: '--configuration $(Build.Configuration) --collect:"XPlat Code Coverage"' - # nobuild: true - # publishTestResults: true - # mergeTestResults: true - script: | dotnet test src/**/$(Project).Tests.Unit.csproj --configuration $(Build.Configuration) --collect:"XPlat Code Coverage" --logger trx --results-directory $(Pipeline.Workspace) displayName: 'Run unit tests' @@ -42,12 +33,6 @@ jobs: testResultsFormat: 'VSTest' testResultsFiles: '$(Pipeline.Workspace)/*.trx' - # - task: CopyFiles@2 - # displayName: 'Copy build artifacts' - # inputs: - # contents: '$(Agent.TempDirectory)/**' - # targetFolder: '$(Pipeline.Workspace)/coverage-unit' - - task: PublishPipelineArtifact@0 displayName: 'Publish code coverage artifacts' inputs: From baed18ff285beea60034986ae2a86a8c000df803 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:12:40 +0200 Subject: [PATCH 55/68] pr-fix: update comment --- build/templates/publish-coverage.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index b907f4d2..640a1076 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -55,8 +55,11 @@ jobs: } $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' - $commentExists = $comments | Where-Object { $_ -like "*Code coverage summary*" } - $content = "## 🧪 Code coverage summary\n\nLine coverage: $lineCoverage\nBranch coverage: $branchCoverage" + $commentExists = $comments | Where-Object { $_ -like "*Code coverage*" -and -like "*summary*" } + $buildId = $env:BUILD_BUILDID + $content = @"## 🧪 [Code coverage](https://dev.azure.com/codit/Arcus/_build/results?buildId=$buildId&view=codecoverage-tab) summary + Line coverage: **$lineCoverage** + Branch coverage: **$branchCoverage**"@ if ($commentExists) { gh pr comment $env:PR_NUMBER --body $content --edit-last From cd67a8390524fcab1a7ae94371910d217d6436a2 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:20:49 +0200 Subject: [PATCH 56/68] pr-fix: motivational message --- build/templates/publish-coverage.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 640a1076..c3c10731 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -54,10 +54,21 @@ jobs: Write-Host "Branch coverage not found" } - $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' - $commentExists = $comments | Where-Object { $_ -like "*Code coverage*" -and -like "*summary*" } + $lineCoverageValue = [double]($lineCoverage -replace '%', '') + $branchCoverageValue = [double]($branchCoverage -replace '%', '') $buildId = $env:BUILD_BUILDID - $content = @"## 🧪 [Code coverage](https://dev.azure.com/codit/Arcus/_build/results?buildId=$buildId&view=codecoverage-tab) summary + $reportUrl = "https://dev.azure.com/codit/Arcus/_build/results?buildId=$buildId&view=codecoverage-tab" + + if ($lineCoverageValue -gt 80 -and $branchCoverage -gt 80) { + $motivationalMessage = "Great job! Your code coverage is higher than my caffeine levels! ☕" + } else { + $motivationalMessage = "Your code coverage is not fully reaching 80% yet. Please inspect [the report]($reportUrl) to find possible improvements and before you know it, your code coverage will reach the stars! 🚀" + } + + $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' + $commentExists = $comments | Where-Object { $_ -like "*Code coverage*" -and $_ -like "*summary*" } + + $content = @"## 🧪 [Code coverage]($reportUrl) summary Line coverage: **$lineCoverage** Branch coverage: **$branchCoverage**"@ From 4bdcb6cbac61d43b5d6b735f1b82db8111568766 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:28:04 +0200 Subject: [PATCH 57/68] pr-fix: correct syntax error --- build/templates/publish-coverage.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index c3c10731..f78e5803 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -68,9 +68,13 @@ jobs: $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' $commentExists = $comments | Where-Object { $_ -like "*Code coverage*" -and $_ -like "*summary*" } - $content = @"## 🧪 [Code coverage]($reportUrl) summary + $content = @" + ## 🧪 [Code coverage]($reportUrl) summary Line coverage: **$lineCoverage** - Branch coverage: **$branchCoverage**"@ + Branch coverage: **$branchCoverage** + + $motivationalMessage + "@ if ($commentExists) { gh pr comment $env:PR_NUMBER --body $content --edit-last From 658dd22093f43c4000d692c0fc49007a2e43eca3 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:44:55 +0200 Subject: [PATCH 58/68] pr-fix: improve coverage --- build/templates/publish-coverage.yml | 19 ++++-- .../LoggerSinkConfigurationExtensionsTests.cs | 62 +++++++++++++++++++ .../Logging/XunitTestLoggerTests.cs | 53 ++++++++++++++++ 3 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index f78e5803..82864f46 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -59,19 +59,28 @@ jobs: $buildId = $env:BUILD_BUILDID $reportUrl = "https://dev.azure.com/codit/Arcus/_build/results?buildId=$buildId&view=codecoverage-tab" - if ($lineCoverageValue -gt 80 -and $branchCoverage -gt 80) { - $motivationalMessage = "Great job! Your code coverage is higher than my caffeine levels! ☕" + $minCoverage = 80 + if ($lineCoverageValue -ge $minCoverage -and $branchCoverage -ge $minCoverage) { + $motivationalMessage = "Great job! 😎 Your code coverage is higher than my caffeine levels! ☕" } else { - $motivationalMessage = "Your code coverage is not fully reaching 80% yet. Please inspect [the report]($reportUrl) to find possible improvements and before you know it, your code coverage will reach the stars! 🚀" + $motivationalMessage = @" + 😟 Your code coverage is not fully reaching **80%** yet. + Please inspect [the report]($reportUrl) to find possible improvements and before you know it, your code coverage will reach the stars! 🚀 + "@ } + if ($lineCoverageValue -ge $minCoverage) { $lineCoverageBadge = "🟢" } else { $lineCoverageBadge = "🔴" } + if ($branchCoverageValue -ge $minCoverage) { $branchCoverageBadge = "🟢" } else { $branchCoverageBadge = "🔴" } + $comments = gh pr view $env:PR_NUMBER --json comments --jq '.comments[].body' $commentExists = $comments | Where-Object { $_ -like "*Code coverage*" -and $_ -like "*summary*" } $content = @" ## 🧪 [Code coverage]($reportUrl) summary - Line coverage: **$lineCoverage** - Branch coverage: **$branchCoverage** + | Metric | Value | + | ------ | ----- | + | Line coverage | $lineCoverageBadge **$lineCoverage** | + | Branch coverage | $branchCoverageBadge **$branchCoverage** | $motivationalMessage "@ diff --git a/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs index f19c344e..ff14d42a 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using Arcus.Testing.Tests.Unit.Logging.Fixture; using Bogus; using Serilog; @@ -48,6 +49,23 @@ public void AddNUnitTestLogging_WithMessage_LogsMessage() mockWriter.VerifyWritten(expected); } + [Fact] + public void AddNUnitTestLogging_WithError_LogsMessage() + { + // Arrange + var mockWriter = new MockTestWriter(); + var config = new LoggerConfiguration(); + + // Act + config.WriteTo.NUnitTestLogging(TextWriter.Null, mockWriter); + + // Assert + ILogger logger = config.CreateLogger(); + string expected = Bogus.Lorem.Sentence(); + logger.Error(expected); + mockWriter.VerifyWritten(expected); + } + [Fact] public void AddMSTestLogging_WithMessage_LogsMessage() { @@ -76,6 +94,50 @@ public void AddXunitTestLogging_WithoutOutputWriter_Fails() () => config.WriteTo.XunitTestLogging(outputWriter: null)); } + [Fact] + public void AddNUnitTestLogging_WithoutOutputWriter_Fails() + { + // Arrange + var config = new LoggerConfiguration(); + + // Act / Assert + Assert.ThrowsAny( + () => config.WriteTo.NUnitTestLogging(outputWriter: null)); + } + + [Fact] + public void AddNUnitTestLoggingWithError_WithoutOutputWriter_Fails() + { + // Arrange + var config = new LoggerConfiguration(); + + // Act / Assert + Assert.ThrowsAny( + () => config.WriteTo.NUnitTestLogging(outputWriter: null, TextWriter.Null)); + } + + [Fact] + public void AddNUnitTestLoggingWithError_WithoutErrorWriter_Fails() + { + // Arrange + var config = new LoggerConfiguration(); + + // Act / Assert + Assert.ThrowsAny( + () => config.WriteTo.NUnitTestLogging(TextWriter.Null, errorWriter: null)); + } + + [Fact] + public void AddMSTestTestLogging_WithoutOutputWriter_Fails() + { + // Arrange + var config = new LoggerConfiguration(); + + // Act / Assert + Assert.ThrowsAny( + () => config.WriteTo.MSTestLogging(testContext: null)); + } + public void WriteLine(string message) { _messages.Add(message); diff --git a/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs new file mode 100644 index 00000000..929f5c99 --- /dev/null +++ b/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using Bogus; +using Microsoft.Extensions.Logging; +using Xunit; +using Xunit.Abstractions; + +namespace Arcus.Testing.Tests.Unit.Logging +{ + public class XunitTestLoggerTests + { + private static readonly Faker Bogus = new(); + + [Fact] + public void XunitLog_WithMessage_Succeeds() + { + // Arrange + var spyWriter = new SpyTestWriter(); + var logger = new XunitTestLogger(spyWriter); + string message = Bogus.Lorem.Sentence(); + + // Act + logger.LogInformation(message); + + // Assert + Assert.Contains(spyWriter.Messages, msg => msg.Contains(message)); + } + + [Fact] + public void XunitTLog_WithMessage_Succeeds() + { + // Arrange + var spyWriter = new SpyTestWriter(); + var logger = new XunitTestLogger(spyWriter); + string message = Bogus.Lorem.Sentence(); + + // Act + logger.LogInformation(message); + + // Assert + Assert.Contains(spyWriter.Messages, msg => msg.Contains(message)); + } + + private class SpyTestWriter : ITestOutputHelper + { + public List Messages { get; } = new List(); + public void WriteLine(string message) => Messages.Add(message); + public void WriteLine(string format, params object[] args) + { + Messages.Add(string.Format(format, args)); + } + } + } +} From c81e53ad21c922198a7f5a15bd5465636f652e01 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 09:57:49 +0200 Subject: [PATCH 59/68] pr-fix: error multi-line --- build/templates/publish-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 82864f46..3978f495 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -66,7 +66,7 @@ jobs: $motivationalMessage = @" 😟 Your code coverage is not fully reaching **80%** yet. Please inspect [the report]($reportUrl) to find possible improvements and before you know it, your code coverage will reach the stars! 🚀 - "@ + "@ } if ($lineCoverageValue -ge $minCoverage) { $lineCoverageBadge = "🟢" } else { $lineCoverageBadge = "🔴" } From eea37dace61a06edc921c1d3329a653d92918feb Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:20:38 +0200 Subject: [PATCH 60/68] pr-fix: more coverage + flexibe retrieval --- build/templates/publish-coverage.yml | 6 +- .../Logging/ILoggerBuilderExtensionsTests.cs | 63 +++++++++++++++++++ .../Logging/SpyLoggerTests.cs | 10 +++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 3978f495..19a6231c 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -35,8 +35,10 @@ jobs: gh repo view $summary = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - $lineCoveragePattern = "\*\*Line coverage:\*\*\s*\|\s*(\d+\.\d+%)" - $branchCoveragePattern = "\*\*Branch coverage:\*\*\s*\|\s*(\d+\.\d+%)" + Write-Host: "Summary: $summary" + + $lineCoveragePattern = "\*\*Line coverage:\*\*\s*\|\s*(\d+(\.\d+)?%)" + $branchCoveragePattern = "\*\*Branch coverage:\*\*\s*\|\s*(\d+(\.\d)?+%)" $lineCoverage = "N/A" if ($summary -match $lineCoveragePattern) { diff --git a/src/Arcus.Testing.Tests.Unit/Logging/ILoggerBuilderExtensionsTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/ILoggerBuilderExtensionsTests.cs index e41bd45b..0461d4da 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/ILoggerBuilderExtensionsTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/ILoggerBuilderExtensionsTests.cs @@ -56,6 +56,58 @@ public void AddNUnitTestLogging_WithMessage_LogsMessage() mockWriter.VerifyWritten(expected); } + [Fact] + public void AddNUnitTestLogging_WithError_LogsMessage() + { + // Arrange + var mockWriter = new MockTestWriter(); + var builder = new HostBuilder(); + + // Act + builder.ConfigureLogging(logging => logging.AddNUnitTestLogging(TextWriter.Null, mockWriter)); + + // Assert + using IHost host = builder.Build(); + var logger = host.Services.GetRequiredService>(); + + string expected = Bogus.Lorem.Sentence(); + logger.LogError(expected); + mockWriter.VerifyWritten(expected); + } + + [Fact] + public void AddNUnitTestLogging_WithoutOutputWriter_Fails() + { + // Arrange + var builder = new HostBuilder(); + builder.ConfigureLogging(logging => logging.AddNUnitTestLogging(outputWriter: null)); + + // Act / Assert + Assert.ThrowsAny(() => builder.Build()); + } + + [Fact] + public void AddNUnitTestLoggingWithError_WithoutOutputWriter_Fails() + { + // Arrange + var builder = new HostBuilder(); + builder.ConfigureLogging(logging => logging.AddNUnitTestLogging(outputWriter: null, TextWriter.Null)); + + // Act / Assert + Assert.ThrowsAny(() => builder.Build()); + } + + [Fact] + public void AddNUnitTestLoggingWithError_WithoutErrorWriter_Fails() + { + // Arrange + var builder = new HostBuilder(); + builder.ConfigureLogging(logging => logging.AddNUnitTestLogging(TextWriter.Null, errorWriter: null)); + + // Act / Assert + Assert.ThrowsAny(() => builder.Build()); + } + [Fact] public void AddMSTestLogging_WithMessage_LogsMessage() { @@ -75,6 +127,17 @@ public void AddMSTestLogging_WithMessage_LogsMessage() mockContext.VerifyWritten(expected); } + [Fact] + public void AddMSTestLogging_WithoutContext_Fails() + { + // Arrange + var builder = new HostBuilder(); + builder.ConfigureLogging(logging => logging.AddMSTestLogging(testContext: null)); + + // Act / Assert + Assert.ThrowsAny(() => builder.Build()); + } + [Fact] public void AddXunitTestLogging_WithoutBuilder_Throws() { diff --git a/src/Arcus.Testing.Tests.Unit/Logging/SpyLoggerTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/SpyLoggerTests.cs index ceea9e98..984ea80c 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/SpyLoggerTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/SpyLoggerTests.cs @@ -84,5 +84,15 @@ public void LogSeveralMessages_WithRandomValues_GetsCollected(InMemoryLogger log }); }); } + + [Fact] + public void Log_WithoutFormatter_Fails() + { + // Arrange + var logger = new InMemoryLogger(); + + // Act / Assert + Assert.ThrowsAny(() => logger.Log(LogLevel.Information, new EventId(), state: new object(), exception: new Exception(), formatter: null)); + } } } From e36283c415ee4c12853374b5995f3bf385b7ecf0 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:27:17 +0200 Subject: [PATCH 61/68] pr-fix: write host --- build/templates/publish-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 19a6231c..3f782cac 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -35,7 +35,7 @@ jobs: gh repo view $summary = Get-Content -Path './coveragereport/SummaryGithub.md' -Raw - Write-Host: "Summary: $summary" + Write-Host "Summary: $summary" $lineCoveragePattern = "\*\*Line coverage:\*\*\s*\|\s*(\d+(\.\d+)?%)" $branchCoveragePattern = "\*\*Branch coverage:\*\*\s*\|\s*(\d+(\.\d)?+%)" From e963ff38389eb6c14dd9c096323c19eb9ef3570f Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:34:52 +0200 Subject: [PATCH 62/68] pr-fix: correct pattern --- build/templates/publish-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 3f782cac..7742637b 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -38,7 +38,7 @@ jobs: Write-Host "Summary: $summary" $lineCoveragePattern = "\*\*Line coverage:\*\*\s*\|\s*(\d+(\.\d+)?%)" - $branchCoveragePattern = "\*\*Branch coverage:\*\*\s*\|\s*(\d+(\.\d)?+%)" + $branchCoveragePattern = "\*\*Branch coverage:\*\*\s*\|\s*(\d+(\.\d+)?%)" $lineCoverage = "N/A" if ($summary -match $lineCoveragePattern) { From 70230dd1813756abf08ac25bf7f113feab7f4f55 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:50:51 +0200 Subject: [PATCH 63/68] pr-fix: update with more coverage --- build/templates/publish-coverage.yml | 3 +- .../Assert_/AssertXsltTests.cs | 51 ++++++++++++++++++- .../LoggerSinkConfigurationExtensionsTests.cs | 8 ++- .../Logging/MSTestLoggerTests.cs | 25 ++++++++- 4 files changed, 83 insertions(+), 4 deletions(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 7742637b..376fd52f 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -20,7 +20,7 @@ jobs: path: '$(Build.SourcesDirectory)/TestResults' - task: reportgenerator@5 - displayName: ReportGenerator + displayName: 'Generate code coverage report' inputs: reports: '$(Build.SourcesDirectory)/TestResults/**/coverage.cobertura.xml' targetdir: coveragereport @@ -95,3 +95,4 @@ jobs: env: GITHUB_TOKEN: $(GITHUB_TOKEN) PR_NUMBER: $(System.PullRequest.PullRequestNumber) + displayName: 'Publish code coverage summary on GitHub' diff --git a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs index 212261ba..588a1517 100644 --- a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; using System.Text.Json; using System.Xml; using System.Xml.Xsl; @@ -176,5 +177,53 @@ public void Load_WithInvalidXml_ThrowsWithDescription() Assert.Contains(nameof(AssertXslt), exception.Message); Assert.Contains("XSLT contents", exception.Message); } + + [Fact] + public void TransformXml_WithoutTransformer_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml(xsltTransformer: null, inputXml: "")); + } + + [Fact] + public void TransformXml_WithoutInput_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml("", inputXml: null)); + } + + [Fact] + public void TransformXmlNode_WithoutTransformer_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml(transformer: null, new XmlDocument())); + } + + [Fact] + public void TransformXmlNode_WithoutInput_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml(new XslCompiledTransform(), input: null)); + } + + [Fact] + public void TransformXmlArg_WithoutTransformer_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml(xsltTransformer: null, inputXml: "", new XsltArgumentList())); + } + + [Fact] + public void TransformXmlArg_WithoutInput_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml("", inputXml: null, new XsltArgumentList())); + } + + [Fact] + public void TransformXmlNodeArg_WithoutTransformer_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml(transformer: null, new XmlDocument(), new XsltArgumentList())); + } + + [Fact] + public void TransformXmlNodeArg_WithoutInput_Fails() + { + Assert.ThrowsAny(() => AssertXslt.TransformToXml(new XslCompiledTransform(), input: null, new XsltArgumentList())); + } } } diff --git a/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs index ff14d42a..d4eda1f6 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs @@ -128,7 +128,7 @@ public void AddNUnitTestLoggingWithError_WithoutErrorWriter_Fails() } [Fact] - public void AddMSTestTestLogging_WithoutOutputWriter_Fails() + public void AddMSTestTestLogging_WithoutTestContext_Fails() { // Arrange var config = new LoggerConfiguration(); @@ -138,6 +138,12 @@ public void AddMSTestTestLogging_WithoutOutputWriter_Fails() () => config.WriteTo.MSTestLogging(testContext: null)); } + [Fact] + public void MsTestLogSink_WithoutTestContext_Fails() + { + Assert.ThrowsAny(() => new MSTestLogEventSink(context: null)); + } + public void WriteLine(string message) { _messages.Add(message); diff --git a/src/Arcus.Testing.Tests.Unit/Logging/MSTestLoggerTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/MSTestLoggerTests.cs index 77642d0e..b477359a 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/MSTestLoggerTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/MSTestLoggerTests.cs @@ -1,4 +1,5 @@ -using Arcus.Testing.Tests.Unit.Logging.Fixture; +using System; +using Arcus.Testing.Tests.Unit.Logging.Fixture; using Bogus; using Microsoft.Extensions.Logging; using Xunit; @@ -23,5 +24,27 @@ public void Log_WithMessage_Succeeds() // Assert mockContext.VerifyWritten(message); } + + [Fact] + public void Log_WithError_Succeeds() + { + // Arrange + var mockContext = new MockTestContext(); + var logger = new MSTestLogger(mockContext); + Exception exception = Bogus.System.Exception(); + string message = Bogus.Lorem.Sentence(); + + // Act + logger.LogError(exception, message); + + // Assert + mockContext.VerifyWritten(message); + } + + [Fact] + public void Create_WithoutContext_Fails() + { + Assert.ThrowsAny(() => new MSTestLogger(testContext: null)); + } } } From 8668cfb108765b2096d05a523dcf160de2491f21 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:01:17 +0200 Subject: [PATCH 64/68] pr-fix: improve branch coverage --- .../Assert_/AssertXsltTests.cs | 6 ----- .../Core/AsyncDisposableTests.cs | 26 +++++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 src/Arcus.Testing.Tests.Unit/Core/AsyncDisposableTests.cs diff --git a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs index 588a1517..eb1f3597 100644 --- a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs @@ -208,12 +208,6 @@ public void TransformXmlArg_WithoutTransformer_Fails() Assert.ThrowsAny(() => AssertXslt.TransformToXml(xsltTransformer: null, inputXml: "", new XsltArgumentList())); } - [Fact] - public void TransformXmlArg_WithoutInput_Fails() - { - Assert.ThrowsAny(() => AssertXslt.TransformToXml("", inputXml: null, new XsltArgumentList())); - } - [Fact] public void TransformXmlNodeArg_WithoutTransformer_Fails() { diff --git a/src/Arcus.Testing.Tests.Unit/Core/AsyncDisposableTests.cs b/src/Arcus.Testing.Tests.Unit/Core/AsyncDisposableTests.cs new file mode 100644 index 00000000..f73121b9 --- /dev/null +++ b/src/Arcus.Testing.Tests.Unit/Core/AsyncDisposableTests.cs @@ -0,0 +1,26 @@ +using System; +using Xunit; + +namespace Arcus.Testing.Tests.Unit.Core +{ + public class AsyncDisposableTests + { + [Fact] + public void Create_WithoutDisposable_Fails() + { + Assert.ThrowsAny(() => AsyncDisposable.Create(disposable: null)); + } + + [Fact] + public void Create_WithoutDispose_Fails() + { + Assert.ThrowsAny(() => AsyncDisposable.Create(dispose: null)); + } + + [Fact] + public void Create_WithoutDisposeAsync_Fails() + { + Assert.ThrowsAny(() => AsyncDisposable.Create(disposeAsync: null)); + } + } +} From 90e2bd0dad1a2dabbd673aca7443dcfd187ec88b Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:13:24 +0200 Subject: [PATCH 65/68] pr-fix: improve coverage --- src/Arcus.Testing.Tests.Unit/Blanks.cs | 4 +++- src/Arcus.Testing.Tests.Unit/Core/PollTests.cs | 9 +++++++++ .../Logging/XunitTestLoggerTests.cs | 9 ++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Arcus.Testing.Tests.Unit/Blanks.cs b/src/Arcus.Testing.Tests.Unit/Blanks.cs index 4e1d1720..cd34882c 100644 --- a/src/Arcus.Testing.Tests.Unit/Blanks.cs +++ b/src/Arcus.Testing.Tests.Unit/Blanks.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; namespace Arcus.Testing.Tests.Unit @@ -18,6 +19,7 @@ public IEnumerator GetEnumerator() yield return new object[] {""}; yield return new object[] {" "}; yield return new object[] {" "}; + yield return new object[] { Environment.NewLine }; } /// diff --git a/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs b/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs index ffe034cb..1271d892 100644 --- a/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs @@ -220,6 +220,15 @@ private static async Task ShouldFailAsync(Func(() => Poll.UntilAvailableAsync(null)); + await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(null)); + await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(null)); + await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(null)); + } + [Fact] public void Set_NegativeInterval_Fails() { diff --git a/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs index 929f5c99..5683adcc 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/XunitTestLoggerTests.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Bogus; using Microsoft.Extensions.Logging; using Xunit; @@ -40,6 +41,12 @@ public void XunitTLog_WithMessage_Succeeds() Assert.Contains(spyWriter.Messages, msg => msg.Contains(message)); } + [Fact] + public void Create_WithoutWriter_Fails() + { + Assert.ThrowsAny(() => new XunitTestLogger(testOutput: null)); + } + private class SpyTestWriter : ITestOutputHelper { public List Messages { get; } = new List(); From 1f2582f6eaac3613107f148689dc8252fa03801a Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:31:52 +0200 Subject: [PATCH 66/68] pr-fix: improve coverage --- .../Assert_/AssertCsvTests.cs | 87 +++++++++++++++++++ .../Assert_/AssertXsltTests.cs | 36 ++------ .../Core/PollTests.cs | 5 +- .../Core/TestConfigTests.cs | 12 ++- .../LoggerSinkConfigurationExtensionsTests.cs | 6 ++ 5 files changed, 115 insertions(+), 31 deletions(-) diff --git a/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs b/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs index 5e988017..1d09ab89 100644 --- a/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs @@ -6,6 +6,7 @@ using Arcus.Testing.Tests.Unit.Assert_.Fixture; using Bogus; using FsCheck.Xunit; +using Microsoft.FSharp.Core; using Xunit; using Xunit.Abstractions; using static System.DateTimeOffset; @@ -830,5 +831,91 @@ private CsvTable LoadCsv(string csv, Action configureOptions = ? AssertCsv.Load(csv) : AssertCsv.Load(csv, configureOptions); } + + [Theory] + [ClassData(typeof(Blanks))] + public void IgnoreColumn_WithoutName_Fails(string columnName) + { + // Arrange + var options = new AssertCsvOptions(); + + // Act / Assert + Assert.ThrowsAny(() => options.IgnoreColumn(columnName)); + } + + [Fact] + public void IgnoreColumn_WithNegativeIndex_Fails() + { + // Arrange + var options = new AssertCsvOptions(); + + // Act / Assert + Assert.ThrowsAny(() => options.IgnoreColumn(Bogus.Random.Int(max: -1))); + } + + [Theory] + [ClassData(typeof(Blanks))] + public void NewLine_WithoutValue_Fails(string newLine) + { + // Arrange + var options = new AssertCsvOptions(); + + // Act / Assert + Assert.ThrowsAny(() => options.NewLine = newLine); + } + + [Fact] + public void Header_WithOutsideValue_Fails() + { + // Arrange + var options = new AssertCsvOptions(); + var header = (AssertCsvHeader) Bogus.Random.Int(min: 10, max: 100); + + // Act / Assert + Assert.ThrowsAny(() => options.Header = header); + } + + [Fact] + public void RowOrder_WithOutsideValue_Fails() + { + // Arrange + var options = new AssertCsvOptions(); + var order = (AssertCsvOrder) Bogus.Random.Int(min: 10, max: 100); + + // Act / Assert + Assert.ThrowsAny(() => options.RowOrder = order); + } + + [Fact] + public void ColumnOrder_WithOutsideValue_Fails() + { + // Arrange + var options = new AssertCsvOptions(); + var order = (AssertCsvOrder) Bogus.Random.Int(min: 10, max: 100); + + // Act / Assert + Assert.ThrowsAny(() => options.ColumnOrder = order); + } + + [Fact] + public void CultureInfo_WithoutValue_Fails() + { + // Arrange + var options = new AssertCsvOptions(); + + // Act / Assert + Assert.ThrowsAny(() => options.CultureInfo = null); + } + + [Fact] + public void MaxInputCharacters_WithNegativeValue_Fails() + { + // Arrange + var options = new AssertCsvOptions(); + int max = Bogus.Random.Int(max: -1); + + // Act / Assert + Assert.ThrowsAny(() => options.MaxInputCharacters = max); + } } } diff --git a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs index eb1f3597..8e99f833 100644 --- a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs @@ -177,47 +177,27 @@ public void Load_WithInvalidXml_ThrowsWithDescription() Assert.Contains(nameof(AssertXslt), exception.Message); Assert.Contains("XSLT contents", exception.Message); } - + [Fact] - public void TransformXml_WithoutTransformer_Fails() + public void TransformXml_WithoutArgs_Fails() { Assert.ThrowsAny(() => AssertXslt.TransformToXml(xsltTransformer: null, inputXml: "")); - } - - [Fact] - public void TransformXml_WithoutInput_Fails() - { Assert.ThrowsAny(() => AssertXslt.TransformToXml("", inputXml: null)); - } - - [Fact] - public void TransformXmlNode_WithoutTransformer_Fails() - { Assert.ThrowsAny(() => AssertXslt.TransformToXml(transformer: null, new XmlDocument())); - } - - [Fact] - public void TransformXmlNode_WithoutInput_Fails() - { Assert.ThrowsAny(() => AssertXslt.TransformToXml(new XslCompiledTransform(), input: null)); - } - [Fact] - public void TransformXmlArg_WithoutTransformer_Fails() - { Assert.ThrowsAny(() => AssertXslt.TransformToXml(xsltTransformer: null, inputXml: "", new XsltArgumentList())); - } - - [Fact] - public void TransformXmlNodeArg_WithoutTransformer_Fails() - { Assert.ThrowsAny(() => AssertXslt.TransformToXml(transformer: null, new XmlDocument(), new XsltArgumentList())); + Assert.ThrowsAny(() => AssertXslt.TransformToXml(new XslCompiledTransform(), input: null, new XsltArgumentList())); } [Fact] - public void TransformXmlNodeArg_WithoutInput_Fails() + public void TransformJson_WithoutArgs_Fails() { - Assert.ThrowsAny(() => AssertXslt.TransformToXml(new XslCompiledTransform(), input: null, new XsltArgumentList())); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(xsltTransformer: null, inputXml: "")); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(xsltTransformer: null, inputXml: "", new XsltArgumentList())); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: new XslCompiledTransform(), input: new XmlDocument())); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: new XslCompiledTransform(), input: new XmlDocument(), new XsltArgumentList())); } } } diff --git a/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs b/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs index 1271d892..e1694c3a 100644 --- a/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Core/PollTests.cs @@ -223,10 +223,13 @@ private static async Task ShouldFailAsync(Func(() => Poll.UntilAvailableAsync(null)); + await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(getTargetWithResultAsync: null)); await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(null)); await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(null)); await Assert.ThrowsAnyAsync(() => Poll.UntilAvailableAsync(null)); + + Assert.ThrowsAny(() => Poll.Target(getTargetWithoutResultSync: null)); + Assert.ThrowsAny(() => Poll.Target(getTargetWithResultSync: null)); } [Fact] diff --git a/src/Arcus.Testing.Tests.Unit/Core/TestConfigTests.cs b/src/Arcus.Testing.Tests.Unit/Core/TestConfigTests.cs index f4122425..b00a7ade 100644 --- a/src/Arcus.Testing.Tests.Unit/Core/TestConfigTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Core/TestConfigTests.cs @@ -9,14 +9,22 @@ public class TestConfigTests [ClassData(typeof(Blanks))] public void Configure_WithoutNewMainFile_Fails(string newMainFile) { - Assert.ThrowsAny(() => TestConfig.Create(opt => opt.UseMainJsonFile(newMainFile))); + // Arrange + var options = new TestConfigOptions(); + + // Act / Assert + Assert.ThrowsAny(() => options.UseMainJsonFile(newMainFile)); } [Theory] [ClassData(typeof(Blanks))] public void Configure_WithoutNewOptionalFile_Fails(string newOptionalFile) { - Assert.ThrowsAny(() => TestConfig.Create(opt => opt.AddOptionalJsonFile(newOptionalFile))); + // Arrange + var options = new TestConfigOptions(); + + // Act / Assert + Assert.ThrowsAny(() => options.AddOptionalJsonFile(newOptionalFile)); } } } diff --git a/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs b/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs index d4eda1f6..334c55dd 100644 --- a/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Logging/LoggerSinkConfigurationExtensionsTests.cs @@ -144,6 +144,12 @@ public void MsTestLogSink_WithoutTestContext_Fails() Assert.ThrowsAny(() => new MSTestLogEventSink(context: null)); } + [Fact] + public void XunitLogSink_WithoutOutputWriter_Fails() + { + Assert.ThrowsAny(() => new XunitLogEventSink(outputWriter: null)); + } + public void WriteLine(string message) { _messages.Add(message); From 7156226ec6f8343ce91eb726383f5c3d5945b555 Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:35:32 +0200 Subject: [PATCH 67/68] pr-fix: correct tests --- src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs | 3 ++- src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs b/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs index 1d09ab89..3c5aeacb 100644 --- a/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Assert_/AssertCsvTests.cs @@ -854,7 +854,8 @@ public void IgnoreColumn_WithNegativeIndex_Fails() } [Theory] - [ClassData(typeof(Blanks))] + [InlineData(null)] + [InlineData("")] public void NewLine_WithoutValue_Fails(string newLine) { // Arrange diff --git a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs index 8e99f833..02753e37 100644 --- a/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs +++ b/src/Arcus.Testing.Tests.Unit/Assert_/AssertXsltTests.cs @@ -196,8 +196,10 @@ public void TransformJson_WithoutArgs_Fails() { Assert.ThrowsAny(() => AssertXslt.TransformToJson(xsltTransformer: null, inputXml: "")); Assert.ThrowsAny(() => AssertXslt.TransformToJson(xsltTransformer: null, inputXml: "", new XsltArgumentList())); - Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: new XslCompiledTransform(), input: new XmlDocument())); - Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: new XslCompiledTransform(), input: new XmlDocument(), new XsltArgumentList())); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: null, input: new XmlDocument())); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: null, input: new XmlDocument(), new XsltArgumentList())); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: new XslCompiledTransform(), input: null)); + Assert.ThrowsAny(() => AssertXslt.TransformToJson(transformer: new XslCompiledTransform(), input: null, new XsltArgumentList())); } } } From 9e1a4e813daa6a92c4494fdfb5d7ec74c895a3cc Mon Sep 17 00:00:00 2001 From: stijnmoreels <9039753+stijnmoreels@users.noreply.github.com> Date: Thu, 1 Aug 2024 11:45:20 +0200 Subject: [PATCH 68/68] pr-fix: resuse min coverage level --- build/templates/publish-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/templates/publish-coverage.yml b/build/templates/publish-coverage.yml index 376fd52f..1172151a 100644 --- a/build/templates/publish-coverage.yml +++ b/build/templates/publish-coverage.yml @@ -66,7 +66,7 @@ jobs: $motivationalMessage = "Great job! 😎 Your code coverage is higher than my caffeine levels! ☕" } else { $motivationalMessage = @" - 😟 Your code coverage is not fully reaching **80%** yet. + 😟 Your code coverage is not fully reaching **$minCoverage %** yet. Please inspect [the report]($reportUrl) to find possible improvements and before you know it, your code coverage will reach the stars! 🚀 "@ }