diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index 7583a6b..44d7271 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -139,7 +139,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Restore dependencies run: dotnet restore TheOfficeAPI.sln @@ -174,7 +174,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Restore dependencies run: dotnet restore TheOfficeAPI.sln diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 47ea112..92608d2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,7 +27,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Restore dependencies run: dotnet restore TheOfficeAPI.sln @@ -44,11 +44,11 @@ jobs: - name: Run unit tests run: | - dotnet test tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" - dotnet test tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" - dotnet test tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" - dotnet test tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" - dotnet test tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --no-build --verbosity normal --logger trx --collect:"XPlat Code Coverage" + dotnet test tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --verbosity normal --logger trx --collect:"XPlat Code Coverage" + dotnet test tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --verbosity normal --logger trx --collect:"XPlat Code Coverage" + dotnet test tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --verbosity normal --logger trx --collect:"XPlat Code Coverage" + dotnet test tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --verbosity normal --logger trx --collect:"XPlat Code Coverage" + dotnet test tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj --configuration ${{ env.BUILD_CONFIGURATION }} --verbosity normal --logger trx --collect:"XPlat Code Coverage" env: ALLURE_CONFIG: ${{ github.workspace }}/allureConfig.json @@ -159,7 +159,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Restore dependencies run: dotnet restore TheOfficeAPI.sln @@ -270,7 +270,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Restore dotnet tools run: dotnet tool restore @@ -537,7 +537,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: ${{ env.DOTNET_VERSION }} + global-json-file: global.json - name: Restore dependencies run: dotnet restore TheOfficeAPI.sln @@ -562,7 +562,21 @@ jobs: fi continue-on-error: true + - name: Check SonarCloud token availability + id: sonar-token-check + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + run: | + if [ -z "${SONAR_TOKEN}" ]; then + echo "SONAR_TOKEN is not set - SonarCloud analysis will be skipped." + echo "has_token=false" >> $GITHUB_OUTPUT + else + echo "SONAR_TOKEN is available - SonarCloud analysis will run." + echo "has_token=true" >> $GITHUB_OUTPUT + fi + - name: Cache SonarCloud packages + if: steps.sonar-token-check.outputs.has_token == 'true' uses: actions/cache@v4 with: path: ~/.sonar/cache @@ -570,9 +584,12 @@ jobs: restore-keys: ${{ runner.os }}-sonar - name: Install SonarCloud scanner + if: steps.sonar-token-check.outputs.has_token == 'true' run: dotnet tool install --global dotnet-sonarscanner - name: Build and analyze with SonarCloud + if: steps.sonar-token-check.outputs.has_token == 'true' + continue-on-error: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} @@ -582,32 +599,36 @@ jobs: BRANCH_NAME: ${{ github.ref_name }} EVENT_NAME: ${{ github.event_name }} run: | - # Build SonarScanner command with PR-specific parameters - SONAR_PARAMS="/k:\"fszymaniak_TheOfficeAPI\" \ - /o:\"fszymaniak\" \ - /n:\"The Office API\" \ - /v:\"1.0\" \ - /d:sonar.token=\"${SONAR_TOKEN}\" \ - /d:sonar.host.url=\"https://sonarcloud.io\"" + # Build SonarScanner argument array (safer than eval + quoted string) + SONAR_ARGS=( + "/k:fszymaniak_TheOfficeAPI" + "/o:fszymaniak" + "/n:The Office API" + "/v:1.0" + "/d:sonar.token=${SONAR_TOKEN}" + "/d:sonar.host.url=https://sonarcloud.io" + ) # Add PR-specific parameters for pull requests if [ "$EVENT_NAME" == "pull_request" ]; then - SONAR_PARAMS="$SONAR_PARAMS \ - /d:sonar.pullrequest.key=\"${PR_NUMBER}\" \ - /d:sonar.pullrequest.branch=\"${PR_HEAD_REF}\" \ - /d:sonar.pullrequest.base=\"${PR_BASE_REF}\"" + SONAR_ARGS+=( + "/d:sonar.pullrequest.key=${PR_NUMBER}" + "/d:sonar.pullrequest.branch=${PR_HEAD_REF}" + "/d:sonar.pullrequest.base=${PR_BASE_REF}" + ) echo "Running SonarCloud analysis for PR #${PR_NUMBER}" else - SONAR_PARAMS="$SONAR_PARAMS /d:sonar.branch.name=\"${BRANCH_NAME}\"" + SONAR_ARGS+=("/d:sonar.branch.name=${BRANCH_NAME}") echo "Running SonarCloud analysis for branch ${BRANCH_NAME}" fi # Run analysis - eval dotnet sonarscanner begin $SONAR_PARAMS + dotnet sonarscanner begin "${SONAR_ARGS[@]}" dotnet build TheOfficeAPI.sln --configuration ${{ env.BUILD_CONFIGURATION }} --no-restore - dotnet sonarscanner end /d:sonar.token="${SONAR_TOKEN}" + dotnet sonarscanner end "/d:sonar.token=${SONAR_TOKEN}" - name: SonarCloud Quality Gate check + if: steps.sonar-token-check.outputs.has_token == 'true' uses: sonarsource/sonarqube-quality-gate-action@master timeout-minutes: 5 with: diff --git a/Directory.Packages.props b/Directory.Packages.props index e3f1b39..728a460 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -5,21 +5,21 @@ - - - + + + - + - - + + - - - + + + diff --git a/TheOfficeAPI.sln b/TheOfficeAPI.sln index 50ccada..0e04f75 100644 --- a/TheOfficeAPI.sln +++ b/TheOfficeAPI.sln @@ -13,15 +13,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level1.Tests.I EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level2.Tests.Unit", "tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj", "{E3FA0913-3456-7890-1234-D362FE48FE0D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level2.Tests.Integration", "tests/TheOfficeAPI.Level2.Tests.Integration/TheOfficeAPI.Level2.Tests.Integration.csproj", "{00000000-0000-0000-0000-000000000000}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level2.Tests.Integration", "tests/TheOfficeAPI.Level2.Tests.Integration/TheOfficeAPI.Level2.Tests.Integration.csproj", "{FFE2325B-3FC1-4A3D-8A97-EA763B34A882}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level3.Tests.Unit", "tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj", "{00000000-0000-0000-0000-000000000000}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level3.Tests.Unit", "tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj", "{1D4ED33D-6586-4BE5-9A4C-9C004063B609}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level3.Tests.Integration", "tests/TheOfficeAPI.Level3.Tests.Integration/TheOfficeAPI.Level3.Tests.Integration.csproj", "{00000000-0000-0000-0000-000000000000}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Level3.Tests.Integration", "tests/TheOfficeAPI.Level3.Tests.Integration/TheOfficeAPI.Level3.Tests.Integration.csproj", "{D5C4D8DA-0B2F-432A-84D3-88D6F770E55A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Tests.E2E", "tests/TheOfficeAPI.Tests.E2E/TheOfficeAPI.Tests.E2E.csproj", "{00000000-0000-0000-0000-000000000000}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Tests.E2E", "tests/TheOfficeAPI.Tests.E2E/TheOfficeAPI.Tests.E2E.csproj", "{9D3738D5-76A2-4AB3-9374-A7772063E015}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Common.Tests.Unit", "tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj", "{00000000-0000-0000-0000-000000000000}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheOfficeAPI.Common.Tests.Unit", "tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj", "{4A55CC08-CB9A-48A4-BA00-A99A0E236CA8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -53,7 +53,25 @@ Global {E3FA0913-3456-7890-1234-D362FE48FE0D}.Debug|Any CPU.Build.0 = Debug|Any CPU {E3FA0913-3456-7890-1234-D362FE48FE0D}.Release|Any CPU.ActiveCfg = Release|Any CPU {E3FA0913-3456-7890-1234-D362FE48FE0D}.Release|Any CPU.Build.0 = Release|Any CPU - {00000000-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00000000-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFE2325B-3FC1-4A3D-8A97-EA763B34A882}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFE2325B-3FC1-4A3D-8A97-EA763B34A882}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFE2325B-3FC1-4A3D-8A97-EA763B34A882}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFE2325B-3FC1-4A3D-8A97-EA763B34A882}.Release|Any CPU.Build.0 = Release|Any CPU + {1D4ED33D-6586-4BE5-9A4C-9C004063B609}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D4ED33D-6586-4BE5-9A4C-9C004063B609}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D4ED33D-6586-4BE5-9A4C-9C004063B609}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D4ED33D-6586-4BE5-9A4C-9C004063B609}.Release|Any CPU.Build.0 = Release|Any CPU + {D5C4D8DA-0B2F-432A-84D3-88D6F770E55A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5C4D8DA-0B2F-432A-84D3-88D6F770E55A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5C4D8DA-0B2F-432A-84D3-88D6F770E55A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5C4D8DA-0B2F-432A-84D3-88D6F770E55A}.Release|Any CPU.Build.0 = Release|Any CPU + {9D3738D5-76A2-4AB3-9374-A7772063E015}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D3738D5-76A2-4AB3-9374-A7772063E015}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D3738D5-76A2-4AB3-9374-A7772063E015}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D3738D5-76A2-4AB3-9374-A7772063E015}.Release|Any CPU.Build.0 = Release|Any CPU + {4A55CC08-CB9A-48A4-BA00-A99A0E236CA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A55CC08-CB9A-48A4-BA00-A99A0E236CA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A55CC08-CB9A-48A4-BA00-A99A0E236CA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A55CC08-CB9A-48A4-BA00-A99A0E236CA8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/global.json b/global.json new file mode 100644 index 0000000..62fae49 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "10.0.103", + "rollForward": "latestPatch", + "allowPrerelease": false + } +} diff --git a/src/TheOfficeAPI/Level0/Extensions/SwaggerConfigurationExtensions.cs b/src/TheOfficeAPI/Level0/Extensions/SwaggerConfigurationExtensions.cs index 47a3cac..2b99e3d 100644 --- a/src/TheOfficeAPI/Level0/Extensions/SwaggerConfigurationExtensions.cs +++ b/src/TheOfficeAPI/Level0/Extensions/SwaggerConfigurationExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; namespace TheOfficeAPI.Level0.Extensions { diff --git a/src/TheOfficeAPI/Level1/Extensions/SwaggerConfigurationExtensions.cs b/src/TheOfficeAPI/Level1/Extensions/SwaggerConfigurationExtensions.cs index 9ee23e3..755461e 100644 --- a/src/TheOfficeAPI/Level1/Extensions/SwaggerConfigurationExtensions.cs +++ b/src/TheOfficeAPI/Level1/Extensions/SwaggerConfigurationExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; namespace TheOfficeAPI.Level1.Extensions { diff --git a/src/TheOfficeAPI/Level2/Extensions/SwaggerConfigurationExtensions.cs b/src/TheOfficeAPI/Level2/Extensions/SwaggerConfigurationExtensions.cs index a3473f8..647cd18 100644 --- a/src/TheOfficeAPI/Level2/Extensions/SwaggerConfigurationExtensions.cs +++ b/src/TheOfficeAPI/Level2/Extensions/SwaggerConfigurationExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; namespace TheOfficeAPI.Level2.Extensions { diff --git a/src/TheOfficeAPI/Level3/Extensions/SwaggerConfigurationExtensions.cs b/src/TheOfficeAPI/Level3/Extensions/SwaggerConfigurationExtensions.cs index 8792805..bf8c36b 100644 --- a/src/TheOfficeAPI/Level3/Extensions/SwaggerConfigurationExtensions.cs +++ b/src/TheOfficeAPI/Level3/Extensions/SwaggerConfigurationExtensions.cs @@ -1,5 +1,5 @@ using System.Reflection; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; namespace TheOfficeAPI.Level3.Extensions { diff --git a/src/TheOfficeAPI/Program.cs b/src/TheOfficeAPI/Program.cs index b82be18..1f98a1a 100644 --- a/src/TheOfficeAPI/Program.cs +++ b/src/TheOfficeAPI/Program.cs @@ -66,28 +66,28 @@ public static WebApplication CreateWebApplication(string[] args) builder.Services.AddSwaggerGen(c => { // Register all API versions - c.SwaggerDoc("v0", new Microsoft.OpenApi.Models.OpenApiInfo + c.SwaggerDoc("v0", new Microsoft.OpenApi.OpenApiInfo { Title = "The Office API - Level 0", Version = "v0", Description = "Richardson Maturity Model Level 0 implementation" }); - c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo + c.SwaggerDoc("v1", new Microsoft.OpenApi.OpenApiInfo { Title = "The Office API - Level 1", Version = "v1", Description = "Richardson Maturity Model Level 1 implementation - Introduces resource-based URIs" }); - c.SwaggerDoc("v2", new Microsoft.OpenApi.Models.OpenApiInfo + c.SwaggerDoc("v2", new Microsoft.OpenApi.OpenApiInfo { Title = "The Office API - Level 2", Version = "v2", Description = "Richardson Maturity Model Level 2 implementation - Introduces HTTP verbs and proper status codes" }); - c.SwaggerDoc("v3", new Microsoft.OpenApi.Models.OpenApiInfo + c.SwaggerDoc("v3", new Microsoft.OpenApi.OpenApiInfo { Title = "The Office API - Level 3", Version = "v3", diff --git a/stryker-config.ci.json b/stryker-config.ci.json index 5b3e629..504357f 100644 --- a/stryker-config.ci.json +++ b/stryker-config.ci.json @@ -1,37 +1,37 @@ { "$schema": "https://raw.githubusercontent.com/stryker-mutator/stryker-net/master/src/Stryker.CLI/Stryker.CLI/schema.json", - "project": "src/TheOfficeAPI/TheOfficeAPI.csproj", - "test-projects": [ - "tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj", - "tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj", - "tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj", - "tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj", - "tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj" - ], - "reporters": [ - "html", - "json", - "progress", - "cleartext" - ], - "thresholds": { - "high": 80, - "low": 60, - "break": 0 - }, - "mutation-level": "Standard", - "concurrency": 2, - "output-path": "StrykerOutput", - "exclude-mutations": [], - "ignore-methods": [ - "*ToString*", - "*GetHashCode*", - "*Equals*" - ], - "dashboard": { - "enabled": false - }, - "since": { - "enabled": false + "stryker-config": { + "project": "src/TheOfficeAPI/TheOfficeAPI.csproj", + "solution": "TheOfficeAPI.sln", + "target-framework": "net10.0", + "test-projects": [ + "tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj", + "tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj", + "tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj", + "tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj", + "tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj" + ], + "reporters": [ + "html", + "json", + "progress", + "cleartext" + ], + "thresholds": { + "high": 80, + "low": 60, + "break": 0 + }, + "mutation-level": "Standard", + "concurrency": 2, + "coverage-analysis": "perTest", + "ignore-methods": [ + "*ToString*", + "*GetHashCode*", + "*Equals*" + ], + "since": { + "enabled": false + } } } diff --git a/tests/TheOfficeAPI.Common.Tests.Unit/SwaggerConfigurationExtensionsTests.cs b/tests/TheOfficeAPI.Common.Tests.Unit/SwaggerConfigurationExtensionsTests.cs index ecfd292..a2f76cf 100644 --- a/tests/TheOfficeAPI.Common.Tests.Unit/SwaggerConfigurationExtensionsTests.cs +++ b/tests/TheOfficeAPI.Common.Tests.Unit/SwaggerConfigurationExtensionsTests.cs @@ -3,7 +3,7 @@ using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; namespace TheOfficeAPI.Common.Tests.Unit; diff --git a/tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj b/tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj index bcb6e29..2d4ec16 100644 --- a/tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj +++ b/tests/TheOfficeAPI.Common.Tests.Unit/TheOfficeAPI.Common.Tests.Unit.csproj @@ -1,10 +1,11 @@ - + net10.0 enable enable false + true diff --git a/tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj b/tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj index a0c8773..41e7758 100644 --- a/tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj +++ b/tests/TheOfficeAPI.Level0.Tests.Unit/TheOfficeAPI.Level0.Tests.Unit.csproj @@ -1,10 +1,11 @@ - + net10.0 enable enable false + true diff --git a/tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj b/tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj index a0c8773..41e7758 100644 --- a/tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj +++ b/tests/TheOfficeAPI.Level1.Tests.Unit/TheOfficeAPI.Level1.Tests.Unit.csproj @@ -1,10 +1,11 @@ - + net10.0 enable enable false + true diff --git a/tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj b/tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj index a0c8773..41e7758 100644 --- a/tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj +++ b/tests/TheOfficeAPI.Level2.Tests.Unit/TheOfficeAPI.Level2.Tests.Unit.csproj @@ -1,10 +1,11 @@ - + net10.0 enable enable false + true diff --git a/tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj b/tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj index a0c8773..41e7758 100644 --- a/tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj +++ b/tests/TheOfficeAPI.Level3.Tests.Unit/TheOfficeAPI.Level3.Tests.Unit.csproj @@ -1,10 +1,11 @@ - + net10.0 enable enable false + true