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