From d46e112bff25e53abb1c06f7beee0bb2ede9877c Mon Sep 17 00:00:00 2001 From: Jaap Date: Wed, 1 Oct 2025 00:30:59 +0200 Subject: [PATCH] Add tests --- .github/workflows/ci.yml | 49 + OVDB.sln | 6 + ...uthenticationControllerIntegrationTests.cs | 148 + .../RoutesControllerIntegrationTests.cs | 347 + .../Infrastructure/DatabaseFixture.cs | 93 + .../OvdbWebApplicationFactory.cs | 46 + .../Infrastructure/TestDataGenerator.cs | 110 + .../OV_DB.IntegrationTests.csproj | 33 + ...eSourceRootsMapping_OV_DB.IntegrationTests | Bin 0 -> 1394 bytes ...tSourceRootsMapping_OV_DB.IntegrationTests | Bin 0 -> 1394 bytes ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 + .../Debug/net9.0/MvcTestingAppManifest.json | 4 + .../Debug/net9.0/OV_DB.In.ACEAA502.Up2Date | 0 .../OV_DB.IntegrationTests.AssemblyInfo.cs | 22 + ....IntegrationTests.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 23 + .../OV_DB.IntegrationTests.GlobalUsings.g.cs | 9 + .../OV_DB.IntegrationTests.assets.cache | Bin 0 -> 234341 bytes ...rationTests.csproj.AssemblyReference.cache | Bin 0 -> 96303 bytes ...rationTests.csproj.CoreCompileInputs.cache | 1 + ...tegrationTests.csproj.FileListAbsolute.txt | 757 + .../Debug/net9.0/OV_DB.IntegrationTests.dll | Bin 0 -> 63488 bytes ...DB.IntegrationTests.genruntimeconfig.cache | 1 + .../Debug/net9.0/OV_DB.IntegrationTests.pdb | Bin 0 -> 38696 bytes .../OV_DB.IntegrationTests.sourcelink.json | 1 + .../net9.0/ref/OV_DB.IntegrationTests.dll | Bin 0 -> 16384 bytes .../net9.0/refint/OV_DB.IntegrationTests.dll | Bin 0 -> 16384 bytes ....IntegrationTests.csproj.nuget.dgspec.json | 416 + ...V_DB.IntegrationTests.csproj.nuget.g.props | 32 + ...DB.IntegrationTests.csproj.nuget.g.targets | 18 + ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 + .../OV_DB.IntegrationTests.AssemblyInfo.cs | 23 + ....IntegrationTests.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 23 + .../OV_DB.IntegrationTests.GlobalUsings.g.cs | 9 + .../OV_DB.IntegrationTests.assets.cache | Bin 0 -> 234341 bytes ...rationTests.csproj.AssemblyReference.cache | Bin 0 -> 85708 bytes .../obj/project.assets.json | 16668 ++++++++++++++++ .../obj/project.nuget.cache | 331 + .../Controllers/AdminControllerTests.cs | 135 + .../AuthenticationControllerTests.cs | 296 + .../Controllers/MapFilterControllerTests.cs | 126 + .../Controllers/MapsControllerTests.cs | 132 + .../Controllers/RequestsControllerTests.cs | 138 + .../Controllers/RouteTypesControllerTests.cs | 78 + .../Controllers/RoutesControllerTests.cs | 267 + .../Controllers/StationMapsControllerTests.cs | 165 + .../Controllers/StatsControllerTests.cs | 220 + .../Controllers/TraewellingControllerTests.cs | 142 + .../Controllers/TripReportControllerTests.cs | 119 + .../Helpers/DistanceCalculationHelperTests.cs | 91 + OV_DB.Tests/Helpers/GeometryHelperTests.cs | 98 + OV_DB.Tests/Helpers/LanguageHelperTests.cs | 78 + OV_DB.Tests/OV_DB.Tests.csproj | 9 +- .../Services/RefreshRoutesServiceTests.cs | 138 + ...RefreshRoutesWithoutRegionsServiceTests.cs | 78 + .../Services/RouteRegionsServiceTests.cs | 181 + .../Services/StationRegionsServiceTests.cs | 204 + .../Services/TimezoneServiceAdvancedTests.cs | 113 + .../Services/TrawellingServiceTests.cs | 182 + .../Services/UpdateRegionServiceTests.cs | 75 + OV_DB.Tests/TimezoneServiceTests.cs | 28 +- OV_DB/Services/TimezoneService.cs | 6 + OV_DB/Startup.cs | 23 +- docker-compose.integration-tests.yml | 29 + 65 files changed, 22303 insertions(+), 28 deletions(-) create mode 100644 OV_DB.IntegrationTests/Controllers/AuthenticationControllerIntegrationTests.cs create mode 100644 OV_DB.IntegrationTests/Controllers/RoutesControllerIntegrationTests.cs create mode 100644 OV_DB.IntegrationTests/Infrastructure/DatabaseFixture.cs create mode 100644 OV_DB.IntegrationTests/Infrastructure/OvdbWebApplicationFactory.cs create mode 100644 OV_DB.IntegrationTests/Infrastructure/TestDataGenerator.cs create mode 100644 OV_DB.IntegrationTests/OV_DB.IntegrationTests.csproj create mode 100644 OV_DB.IntegrationTests/bin/Release/net9.0/.msCoverageSourceRootsMapping_OV_DB.IntegrationTests create mode 100644 OV_DB.IntegrationTests/bin/Release/net9.0/CoverletSourceRootsMapping_OV_DB.IntegrationTests create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/MvcTestingAppManifest.json create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.In.ACEAA502.Up2Date create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.assets.cache create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.AssemblyReference.cache create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.CoreCompileInputs.cache create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.FileListAbsolute.txt create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.dll create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.genruntimeconfig.cache create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.pdb create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.sourcelink.json create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/ref/OV_DB.IntegrationTests.dll create mode 100644 OV_DB.IntegrationTests/obj/Debug/net9.0/refint/OV_DB.IntegrationTests.dll create mode 100644 OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.dgspec.json create mode 100644 OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.props create mode 100644 OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.targets create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.assets.cache create mode 100644 OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.csproj.AssemblyReference.cache create mode 100644 OV_DB.IntegrationTests/obj/project.assets.json create mode 100644 OV_DB.IntegrationTests/obj/project.nuget.cache create mode 100644 OV_DB.Tests/Controllers/AdminControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/AuthenticationControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/MapFilterControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/MapsControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/RequestsControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/RouteTypesControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/RoutesControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/StationMapsControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/StatsControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/TraewellingControllerTests.cs create mode 100644 OV_DB.Tests/Controllers/TripReportControllerTests.cs create mode 100644 OV_DB.Tests/Helpers/DistanceCalculationHelperTests.cs create mode 100644 OV_DB.Tests/Helpers/GeometryHelperTests.cs create mode 100644 OV_DB.Tests/Helpers/LanguageHelperTests.cs create mode 100644 OV_DB.Tests/Services/RefreshRoutesServiceTests.cs create mode 100644 OV_DB.Tests/Services/RefreshRoutesWithoutRegionsServiceTests.cs create mode 100644 OV_DB.Tests/Services/RouteRegionsServiceTests.cs create mode 100644 OV_DB.Tests/Services/StationRegionsServiceTests.cs create mode 100644 OV_DB.Tests/Services/TimezoneServiceAdvancedTests.cs create mode 100644 OV_DB.Tests/Services/TrawellingServiceTests.cs create mode 100644 OV_DB.Tests/Services/UpdateRegionServiceTests.cs create mode 100644 docker-compose.integration-tests.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c3fc5fe8..84525f04 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,17 +2,26 @@ name: OVDB CI on: push: + pull_request: + branches: [ master ] jobs: build-frontend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + cache-dependency-path: OV_DB/OVDBFrontend/package-lock.json - name: Build frontend run: | cd OV_DB/OVDBFrontend npm install npm run build + build-backend: runs-on: ubuntu-latest steps: @@ -25,3 +34,43 @@ jobs: run: | cd OV_DB dotnet build + + test-unit: + runs-on: ubuntu-latest + needs: build-backend + steps: + - uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.x + - name: Run unit tests + run: | + cd OV_DB.Tests + dotnet test --verbosity normal --logger "trx;LogFileName=test-results.trx" + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: unit-test-results + path: OV_DB.Tests/TestResults/*.trx + + test-integration: + runs-on: ubuntu-latest + needs: build-backend + steps: + - uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 9.0.x + - name: Run integration tests + run: | + cd OV_DB.IntegrationTests + dotnet test --verbosity normal --logger "trx;LogFileName=integration-test-results.trx" + - name: Upload test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: integration-test-results + path: OV_DB.IntegrationTests/TestResults/*.trx diff --git a/OVDB.sln b/OVDB.sln index a85044eb..041dae69 100644 --- a/OVDB.sln +++ b/OVDB.sln @@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OV_DB", "OV_DB\OV_DB.csproj EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OV_DB.Tests", "OV_DB.Tests\OV_DB.Tests.csproj", "{C3062B55-D91A-4ADF-B8D6-A4E1C5DB37D0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OV_DB.IntegrationTests", "OV_DB.IntegrationTests\OV_DB.IntegrationTests.csproj", "{478C49A3-292E-E2C7-D9D4-E4947BA754C9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -27,6 +29,10 @@ Global {C3062B55-D91A-4ADF-B8D6-A4E1C5DB37D0}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3062B55-D91A-4ADF-B8D6-A4E1C5DB37D0}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3062B55-D91A-4ADF-B8D6-A4E1C5DB37D0}.Release|Any CPU.Build.0 = Release|Any CPU + {478C49A3-292E-E2C7-D9D4-E4947BA754C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {478C49A3-292E-E2C7-D9D4-E4947BA754C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {478C49A3-292E-E2C7-D9D4-E4947BA754C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {478C49A3-292E-E2C7-D9D4-E4947BA754C9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/OV_DB.IntegrationTests/Controllers/AuthenticationControllerIntegrationTests.cs b/OV_DB.IntegrationTests/Controllers/AuthenticationControllerIntegrationTests.cs new file mode 100644 index 00000000..bd672c03 --- /dev/null +++ b/OV_DB.IntegrationTests/Controllers/AuthenticationControllerIntegrationTests.cs @@ -0,0 +1,148 @@ +using Microsoft.Extensions.DependencyInjection; +using OV_DB.IntegrationTests.Infrastructure; +using OV_DB.Models; +using OVDB_database.Database; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Json; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.IntegrationTests.Controllers +{ + [Collection("Database")] + public class AuthenticationControllerIntegrationTests : IAsyncLifetime + { + private readonly DatabaseFixture _databaseFixture; + private OvdbWebApplicationFactory _factory; + private HttpClient _client; + + public AuthenticationControllerIntegrationTests(DatabaseFixture databaseFixture) + { + _databaseFixture = databaseFixture; + } + + public async Task InitializeAsync() + { + _factory = new OvdbWebApplicationFactory + { + ConnectionString = _databaseFixture.ConnectionString + }; + + _client = _factory.CreateClient(); + + // Clean database before each test + await _databaseFixture.ResetDatabaseAsync(); + } + + public async Task DisposeAsync() + { + _client?.Dispose(); + if (_factory != null) + { + await _factory.DisposeAsync(); + } + } + + [Fact] + public async Task CreateAccount_WithValidData_CreatesUserAndReturnsToken() + { + // Arrange + var createAccountRequest = new + { + Email = "integration.test@example.com", + Password = "Test123!Password" + }; + + // Act + var response = await _client.PostAsJsonAsync("/api/Authentication/register", createAccountRequest); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + var result = await response.Content.ReadFromJsonAsync(); + Assert.NotNull(result); + Assert.NotNull(result.Token); + Assert.NotEmpty(result.Token); + + // Verify user was created in database + using var scope = _factory.Services.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + var user = context.Users.FirstOrDefault(u => u.Email == "integration.test@example.com"); + Assert.NotNull(user); + Assert.Equal("integration.test@example.com", user.Email); + } + + [Fact] + public async Task Login_WithValidCredentials_ReturnsToken() + { + // Arrange - Create a user first + var createRequest = new + { + Email = "login.test@example.com", + Password = "Test123!Password" + }; + await _client.PostAsJsonAsync("/api/Authentication/register", createRequest); + + var loginRequest = new + { + Email = "login.test@example.com", + Password = "Test123!Password" + }; + + // Act + var response = await _client.PostAsJsonAsync("/api/Authentication/Login", loginRequest); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + var result = await response.Content.ReadFromJsonAsync(); + Assert.NotNull(result); + Assert.NotNull(result.Token); + Assert.NotEmpty(result.Token); + } + + [Fact] + public async Task Login_WithInvalidCredentials_ReturnsUnauthorized() + { + // Arrange + var loginRequest = new + { + Email = "nonexistent@example.com", + Password = "WrongPassword123!" + }; + + // Act + var response = await _client.PostAsJsonAsync("/api/Authentication/Login", loginRequest); + + // Assert + Assert.Equal(HttpStatusCode.Forbidden, response.StatusCode); + } + + [Fact] + public async Task CreateAccount_WithDuplicateEmail_ReturnsBadRequest() + { + // Arrange - Create first user + var firstRequest = new + { + Email = "duplicate@example.com", + Password = "Test123!Password" + }; + await _client.PostAsJsonAsync("/api/Authentication/register", firstRequest); + + // Try to create duplicate + var duplicateRequest = new + { + Email = "duplicate@example.com", + Password = "DifferentPassword123!" + }; + + // Act + var response = await _client.PostAsJsonAsync("/api/Authentication/register", duplicateRequest); + + // Assert + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + } +} diff --git a/OV_DB.IntegrationTests/Controllers/RoutesControllerIntegrationTests.cs b/OV_DB.IntegrationTests/Controllers/RoutesControllerIntegrationTests.cs new file mode 100644 index 00000000..22adfd16 --- /dev/null +++ b/OV_DB.IntegrationTests/Controllers/RoutesControllerIntegrationTests.cs @@ -0,0 +1,347 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using NetTopologySuite.Geometries; +using OV_DB.IntegrationTests.Infrastructure; +using OV_DB.Models; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Net.Http.Json; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.IntegrationTests.Controllers +{ + [Collection("Database")] + public class RoutesControllerIntegrationTests : IAsyncLifetime + { + private readonly DatabaseFixture _databaseFixture; + private OvdbWebApplicationFactory _factory; + private HttpClient _client; + private string _authToken; + private User _testUser; + private Map _testMap; + private RouteType _testRouteType; + + public RoutesControllerIntegrationTests(DatabaseFixture databaseFixture) + { + _databaseFixture = databaseFixture; + } + + public async Task InitializeAsync() + { + _factory = new OvdbWebApplicationFactory + { + ConnectionString = _databaseFixture.ConnectionString + }; + + _client = _factory.CreateClient(); + + // Clean database before each test + await _databaseFixture.ResetDatabaseAsync(); + + // Create a test user and authenticate + await CreateAuthenticatedUser(); + } + + private async Task CreateAuthenticatedUser() + { + // Register user + var registerRequest = new + { + Email = "routes.test@example.com", + Password = "Test123!Password" + }; + + var registerResponse = await _client.PostAsJsonAsync("/api/Authentication/register", registerRequest); + Assert.Equal(HttpStatusCode.OK, registerResponse.StatusCode); + + var loginResponse = await registerResponse.Content.ReadFromJsonAsync(); + _authToken = loginResponse!.Token; + + // Set up auth header for future requests + _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _authToken); + + // Get the created user from database + using var scope = _factory.Services.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + _testUser = await context.Users.SingleAsync(u => u.Email == "routes.test@example.com"); + + // Create test map and route type + _testMap = TestDataGenerator.CreateTestMap(_testUser.Id, "Test Map"); + _testRouteType = TestDataGenerator.CreateTestRouteType(_testUser.Id); + + context.Maps.Add(_testMap); + context.RouteTypes.Add(_testRouteType); + await context.SaveChangesAsync(); + + // Reload to get generated IDs + await context.Entry(_testMap).ReloadAsync(); + await context.Entry(_testRouteType).ReloadAsync(); + } + + public async Task DisposeAsync() + { + _client?.Dispose(); + if (_factory != null) + { + await _factory.DisposeAsync(); + } + } + + [Fact] + public async Task CreateRoute_DirectlyInDatabase_CanBeRetrieved() + { + // Arrange - Create route directly in database (since KML endpoint uses synchronous IO) + Route testRoute; + using (var scope = _factory.Services.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + testRoute = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + testRoute.Name = "Amsterdam - Rotterdam"; + testRoute.From = "Amsterdam"; + testRoute.To = "Rotterdam"; + testRoute.LineNumber = "IC 1234"; + + // Add geometry + var geometryFactory = new GeometryFactory(new PrecisionModel(), 4326); + var coordinates = new[] + { + new Coordinate(4.9, 52.37), // Amsterdam + new Coordinate(4.48, 51.92) // Rotterdam + }; + testRoute.LineString = geometryFactory.CreateLineString(coordinates); + + context.Routes.Add(testRoute); + await context.SaveChangesAsync(); + await context.Entry(testRoute).ReloadAsync(); + } + + // Act - Retrieve via API to verify it's accessible + var response = await _client.GetAsync($"/api/Routes/{testRoute.RouteId}"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var routeDto = await response.Content.ReadFromJsonAsync(); + Assert.NotNull(routeDto); + Assert.Equal("Amsterdam - Rotterdam", routeDto.Name); + Assert.Equal("Amsterdam", routeDto.From); + Assert.Equal("Rotterdam", routeDto.To); + Assert.Equal("IC 1234", routeDto.LineNumber); + } + + [Fact] + public async Task GetRoutes_ReturnsUserRoutes() + { + // Arrange - Create test routes + using (var scope = _factory.Services.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + var route1 = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + route1.Name = "Route 1"; + var route2 = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + route2.Name = "Route 2"; + + context.Routes.AddRange(route1, route2); + await context.SaveChangesAsync(); + } + + // Act - Use the actual GET /api/Routes endpoint with query parameters + var response = await _client.GetAsync("/api/Routes?start=0&count=100"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var routeList = await response.Content.ReadFromJsonAsync(); + Assert.NotNull(routeList); + Assert.True(routeList.Routes.Count >= 2); + Assert.Contains(routeList.Routes, r => r.Name == "Route 1"); + Assert.Contains(routeList.Routes, r => r.Name == "Route 2"); + } + + [Fact] + public async Task CreateRouteInstance_WithValidData_CreatesInstance() + { + // Arrange - Create a route first with LineString for duration calculation + Route testRoute; + using (var createScope = _factory.Services.CreateScope()) + { + var createContext = createScope.ServiceProvider.GetRequiredService(); + testRoute = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + + // Add geometry for timezone calculation + var geometryFactory = new GeometryFactory(new PrecisionModel(), 4326); + var coordinates = new[] + { + new Coordinate(4.9, 52.37), // Amsterdam + new Coordinate(4.48, 51.92) // Rotterdam + }; + testRoute.LineString = geometryFactory.CreateLineString(coordinates); + + createContext.Routes.Add(testRoute); + await createContext.SaveChangesAsync(); + await createContext.Entry(testRoute).ReloadAsync(); + } + + // Use PUT /api/Routes/instances with null RouteInstanceId to create new instance + var instanceRequest = new + { + RouteId = testRoute.RouteId, + RouteInstanceId = (int?)null, // null means create new + Date = DateTime.UtcNow.Date, + StartTime = DateTime.UtcNow.AddHours(-2), + EndTime = DateTime.UtcNow, + RouteInstanceProperties = new List(), // Empty properties list + RouteInstanceMaps = new List { new { MapId = _testMap.MapId } } + }; + + // Act - Use PUT to create instance + var response = await _client.PutAsJsonAsync("/api/Routes/instances", instanceRequest); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + // Verify in database + using var scope = _factory.Services.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + var instance = await context.RouteInstances + .FirstOrDefaultAsync(ri => ri.RouteId == testRoute.RouteId); + + Assert.NotNull(instance); + Assert.Equal(DateTime.UtcNow.Date, instance.Date.Date); + Assert.NotNull(instance.StartTime); + Assert.NotNull(instance.EndTime); + Assert.True(instance.DurationHours > 0); + } + + [Fact] + public async Task UpdateRoute_WithGeometry_UpdatesLineString() + { + // Arrange - Create a route + Route testRoute; + using (var scope = _factory.Services.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + testRoute = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + + // Add a simple LineString geometry + var geometryFactory = new GeometryFactory(new PrecisionModel(), 4326); + var coordinates = new[] + { + new Coordinate(4.9, 52.37), // Amsterdam + new Coordinate(4.48, 51.92) // Rotterdam + }; + testRoute.LineString = geometryFactory.CreateLineString(coordinates); + + context.Routes.Add(testRoute); + await context.SaveChangesAsync(); + await context.Entry(testRoute).ReloadAsync(); + } + + // Act - Verify we can read it back + var response = await _client.GetAsync($"/api/Routes/{testRoute.RouteId}"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + var routeDto = await response.Content.ReadFromJsonAsync(); + Assert.NotNull(routeDto); + Assert.Equal(testRoute.Name, routeDto.Name); + + // Verify geometry exists in database + using var verifyScope = _factory.Services.CreateScope(); + var verifyContext = verifyScope.ServiceProvider.GetRequiredService(); + var savedRoute = await verifyContext.Routes.FindAsync(testRoute.RouteId); + Assert.NotNull(savedRoute); + Assert.NotNull(savedRoute.LineString); + Assert.Equal(2, savedRoute.LineString.Coordinates.Length); + } + + [Fact] + public async Task DeleteRoute_RemovesRouteAndInstances() + { + // Arrange - Create route with instance + Route testRoute; + RouteInstance testInstance; + using (var scope = _factory.Services.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + testRoute = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + context.Routes.Add(testRoute); + await context.SaveChangesAsync(); + await context.Entry(testRoute).ReloadAsync(); + + testInstance = TestDataGenerator.CreateTestRouteInstance(testRoute.RouteId); + context.RouteInstances.Add(testInstance); + await context.SaveChangesAsync(); + } + + // Act + var response = await _client.DeleteAsync($"/api/Routes/{testRoute.RouteId}"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + // Verify deletion + using var verifyScope = _factory.Services.CreateScope(); + var verifyContext = verifyScope.ServiceProvider.GetRequiredService(); + var deletedRoute = await verifyContext.Routes.FindAsync(testRoute.RouteId); + Assert.Null(deletedRoute); + + var deletedInstances = await verifyContext.RouteInstances + .Where(ri => ri.RouteId == testRoute.RouteId) + .ToListAsync(); + Assert.Empty(deletedInstances); + } + + [Fact] + public async Task GetRouteStatistics_ReturnsCorrectStats() + { + // Arrange - Create route with multiple instances + Route testRoute; + using (var scope = _factory.Services.CreateScope()) + { + var context = scope.ServiceProvider.GetRequiredService(); + testRoute = TestDataGenerator.CreateTestRoute(_testRouteType.TypeId, new List { _testMap.MapId }); + testRoute.CalculatedDistance = 100.0; // 100 km + context.Routes.Add(testRoute); + await context.SaveChangesAsync(); + await context.Entry(testRoute).ReloadAsync(); + + // Add 3 instances + for (int i = 0; i < 3; i++) + { + var instance = TestDataGenerator.CreateTestRouteInstance(testRoute.RouteId); + instance.Date = DateTime.UtcNow.AddDays(-i).Date; + context.RouteInstances.Add(instance); + } + await context.SaveChangesAsync(); + } + + // Act - Use the correct Stats endpoint: /api/Stats/{mapGuid} + var response = await _client.GetAsync($"/api/Stats/{_testMap.MapGuid}"); + + // Assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + // The user should have routes and route instances + using var verifyScope = _factory.Services.CreateScope(); + var verifyContext = verifyScope.ServiceProvider.GetRequiredService(); + var routeCount = await verifyContext.Routes + .Include(r => r.RouteMaps) + .Where(r => r.RouteMaps.Any(rm => rm.MapId == _testMap.MapId)) + .CountAsync(); + var instanceCount = await verifyContext.RouteInstances + .Include(ri => ri.Route) + .ThenInclude(r => r.RouteMaps) + .Where(ri => ri.Route.RouteMaps.Any(rm => rm.MapId == _testMap.MapId)) + .CountAsync(); + + Assert.True(routeCount > 0); + Assert.Equal(3, instanceCount); + } + } +} diff --git a/OV_DB.IntegrationTests/Infrastructure/DatabaseFixture.cs b/OV_DB.IntegrationTests/Infrastructure/DatabaseFixture.cs new file mode 100644 index 00000000..39658ae5 --- /dev/null +++ b/OV_DB.IntegrationTests/Infrastructure/DatabaseFixture.cs @@ -0,0 +1,93 @@ +using DotNet.Testcontainers.Builders; +using DotNet.Testcontainers.Containers; +using Testcontainers.MariaDb; +using System; +using System.Threading.Tasks; +using Xunit; +using Microsoft.EntityFrameworkCore; +using OVDB_database.Database; +using Microsoft.Extensions.DependencyInjection; +using Respawn; + +namespace OV_DB.IntegrationTests.Infrastructure +{ + public class DatabaseFixture : IAsyncLifetime + { + private MariaDbContainer _mariaDbContainer; + private Respawner _respawner; + + public string ConnectionString => _mariaDbContainer?.GetConnectionString(); + + public async Task InitializeAsync() + { + _mariaDbContainer = new MariaDbBuilder() + .WithImage("mariadb:11.2") + .WithDatabase("ovdb_integration_test") + .WithUsername("ovdb_test_user") + .WithPassword("test_password") + .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(3306)) + .Build(); + + await _mariaDbContainer.StartAsync(); + + // Wait for MariaDB to be fully ready + await Task.Delay(TimeSpan.FromSeconds(2)); + + // Run migrations to create schema + var services = new ServiceCollection(); + services.AddDbContext(options => + options.UseMySql( + ConnectionString, + ServerVersion.AutoDetect(ConnectionString), + mysqlOptions => mysqlOptions.UseNetTopologySuite())); + + using var serviceProvider = services.BuildServiceProvider(); + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + // Apply all migrations + await context.Database.MigrateAsync(); + + // Initialize Respawner for database cleanup + await using var connection = context.Database.GetDbConnection(); + await connection.OpenAsync(); + _respawner = await Respawner.CreateAsync(connection, new RespawnerOptions + { + DbAdapter = DbAdapter.MySql, + TablesToIgnore = new Respawn.Graph.Table[] { "__EFMigrationsHistory" } + }); + } + + public async Task ResetDatabaseAsync() + { + var services = new ServiceCollection(); + services.AddDbContext(options => + options.UseMySql( + ConnectionString, + ServerVersion.AutoDetect(ConnectionString), + mysqlOptions => mysqlOptions.UseNetTopologySuite())); + + using var serviceProvider = services.BuildServiceProvider(); + using var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); + + await using var connection = context.Database.GetDbConnection(); + await connection.OpenAsync(); + await _respawner.ResetAsync(connection); + } + + public async Task DisposeAsync() + { + if (_mariaDbContainer != null) + { + await _mariaDbContainer.DisposeAsync(); + } + } + } + + [CollectionDefinition("Database")] + public class DatabaseCollection : ICollectionFixture + { + // This class is just used to define the collection + } +} diff --git a/OV_DB.IntegrationTests/Infrastructure/OvdbWebApplicationFactory.cs b/OV_DB.IntegrationTests/Infrastructure/OvdbWebApplicationFactory.cs new file mode 100644 index 00000000..4cf2fd00 --- /dev/null +++ b/OV_DB.IntegrationTests/Infrastructure/OvdbWebApplicationFactory.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc.Testing; +using Microsoft.AspNetCore.TestHost; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using OVDB_database.Database; +using System.Collections.Generic; + +namespace OV_DB.IntegrationTests.Infrastructure +{ + public class OvdbWebApplicationFactory : WebApplicationFactory + { + public string ConnectionString { get; set; } + + protected override void ConfigureWebHost(IWebHostBuilder builder) + { + // Set environment to Testing to prevent SPA middleware issues + builder.UseEnvironment("Testing"); + + builder.ConfigureAppConfiguration((context, config) => + { + // Override connection string for integration tests + config.AddInMemoryCollection(new Dictionary + { + ["DBCONNECTIONSTRING"] = ConnectionString, + ["JWTSigningKey"] = "IntegrationTestSigningKeyThatIsLongEnoughForHS256Algorithm", + ["Tokens:ValidityInMinutes"] = "60", + ["Tokens:Issuer"] = "OVDB-IntegrationTests", + ["Tokens:Audience"] = "OVDB", + ["UserAgent"] = "OVDB-IntegrationTests" + }); + }); + + builder.ConfigureTestServices(services => + { + // Database is configured via DBCONNECTIONSTRING in appsettings + // No need to replace DbContext as it will use our test connection string + + // The database will be set up by the DatabaseFixture + // We'll use migrations instead of EnsureCreated for proper schema + }); + } + } +} diff --git a/OV_DB.IntegrationTests/Infrastructure/TestDataGenerator.cs b/OV_DB.IntegrationTests/Infrastructure/TestDataGenerator.cs new file mode 100644 index 00000000..6b3f4eca --- /dev/null +++ b/OV_DB.IntegrationTests/Infrastructure/TestDataGenerator.cs @@ -0,0 +1,110 @@ +using Bogus; +using OVDB_database.Models; +using System; +using System.Collections.Generic; + +namespace OV_DB.IntegrationTests.Infrastructure +{ + public static class TestDataGenerator + { + public static Faker UserFaker => new Faker() + .RuleFor(u => u.Email, f => f.Internet.Email()) + .RuleFor(u => u.Password, f => BCrypt.Net.BCrypt.HashPassword("Test123!")) + .RuleFor(u => u.Guid, f => Guid.NewGuid()) + .RuleFor(u => u.IsAdmin, f => false) + .RuleFor(u => u.LastLogin, f => f.Date.Recent()); + + public static Faker MapFaker => new Faker() + .RuleFor(m => m.Name, f => f.Address.City()) + .RuleFor(m => m.NameNL, f => f.Address.City()) + .RuleFor(m => m.MapGuid, f => Guid.NewGuid()) + .RuleFor(m => m.Default, f => false) + .RuleFor(m => m.OrderNr, f => f.Random.Int(1, 100)); + + public static Faker RouteTypeFaker => new Faker() + .RuleFor(rt => rt.Name, f => f.PickRandom("Train", "Bus", "Tram", "Metro", "Ferry")) + .RuleFor(rt => rt.NameNL, f => f.PickRandom("Trein", "Bus", "Tram", "Metro", "Veerboot")) + .RuleFor(rt => rt.Colour, f => f.Internet.Color()) + .RuleFor(rt => rt.OrderNr, f => f.Random.Int(1, 10)); + + public static Faker RouteFaker(int routeTypeId) => new Faker() + .RuleFor(r => r.Name, f => f.Address.StreetName()) + .RuleFor(r => r.NameNL, f => f.Address.StreetName()) + .RuleFor(r => r.From, f => f.Address.City()) + .RuleFor(r => r.To, f => f.Address.City()) + .RuleFor(r => r.RouteTypeId, routeTypeId) + .RuleFor(r => r.Share, f => Guid.NewGuid()) + .RuleFor(r => r.LineNumber, f => f.Random.Int(1, 999).ToString()) + .RuleFor(r => r.CalculatedDistance, f => f.Random.Double(1, 500)) + .RuleFor(r => r.OperatingCompany, f => f.Company.CompanyName()); + + public static Faker RouteInstanceFaker(int routeId) => new Faker() + .RuleFor(ri => ri.RouteId, routeId) + .RuleFor(ri => ri.Date, f => f.Date.Past(2)) + .RuleFor(ri => ri.StartTime, f => f.Date.Recent()) + .RuleFor(ri => ri.EndTime, (f, ri) => ri.StartTime.HasValue ? ri.StartTime.Value.AddHours(f.Random.Double(0.5, 5)) : (DateTime?)null) + .RuleFor(ri => ri.DurationHours, (f, ri) => + { + if (ri.StartTime.HasValue && ri.EndTime.HasValue) + return (ri.EndTime.Value - ri.StartTime.Value).TotalHours; + return null; + }); + + public static Faker StationFaker => new Faker() + .RuleFor(s => s.Name, f => f.Address.City() + " Station") + .RuleFor(s => s.OsmId, f => f.Random.Long(1000000, 9999999)) + .RuleFor(s => s.Lattitude, f => f.Address.Latitude()) + .RuleFor(s => s.Longitude, f => f.Address.Longitude()) + .RuleFor(s => s.Network, f => f.Company.CompanyName()) + .RuleFor(s => s.Operator, f => f.Company.CompanyName()) + .RuleFor(s => s.Hidden, f => false) + .RuleFor(s => s.Special, f => false); + + public static User CreateTestUser(string email = null, bool isAdmin = false) + { + var user = UserFaker.Generate(); + if (!string.IsNullOrEmpty(email)) + user.Email = email; + user.IsAdmin = isAdmin; + return user; + } + + public static Map CreateTestMap(int userId, string name = null) + { + var map = MapFaker.Generate(); + map.UserId = userId; + if (!string.IsNullOrEmpty(name)) + map.Name = name; + return map; + } + + public static RouteType CreateTestRouteType(int userId) + { + var routeType = RouteTypeFaker.Generate(); + routeType.UserId = userId; + return routeType; + } + + public static Route CreateTestRoute(int routeTypeId, List mapIds = null) + { + var route = RouteFaker(routeTypeId).Generate(); + if (mapIds != null && mapIds.Count > 0) + { + route.RouteMaps = new List(); + foreach (var mapId in mapIds) + { + route.RouteMaps.Add(new RouteMap { MapId = mapId, RouteId = route.RouteId }); + } + } + return route; + } + + public static RouteInstance CreateTestRouteInstance(int routeId, DateTime? date = null) + { + var instance = RouteInstanceFaker(routeId).Generate(); + if (date.HasValue) + instance.Date = date.Value; + return instance; + } + } +} diff --git a/OV_DB.IntegrationTests/OV_DB.IntegrationTests.csproj b/OV_DB.IntegrationTests/OV_DB.IntegrationTests.csproj new file mode 100644 index 00000000..2fc4c82e --- /dev/null +++ b/OV_DB.IntegrationTests/OV_DB.IntegrationTests.csproj @@ -0,0 +1,33 @@ + + + + net9.0 + enable + enable + false + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OV_DB.IntegrationTests/bin/Release/net9.0/.msCoverageSourceRootsMapping_OV_DB.IntegrationTests b/OV_DB.IntegrationTests/bin/Release/net9.0/.msCoverageSourceRootsMapping_OV_DB.IntegrationTests new file mode 100644 index 0000000000000000000000000000000000000000..d7e63519aa72d5f18b0f7f84f2df52b168343182 GIT binary patch literal 1394 zcmdUvxeCHS5QhI+@EuZWV<{ros3;a5;86*p@rpMl0Slj9{ni7E6%`bNgx$>iGqZE< z9uEa&)m2#)wfNW7QBnCT)wAf7T>08)tF>m@>tfvo8-e-Q&G`CI3+R+q3N=9%z-_=? z&DjlNbaNlt#}&Jt@Hl>xNl!yO2CMQV)F&$>SS9aA-jdGOE+v0T74!9ptPA@9OX!MB_=gsUMbLkDVrKJIk%k^E|A hqR;epyP}WeRn6a>WBZoha#I`_KE-i literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/bin/Release/net9.0/CoverletSourceRootsMapping_OV_DB.IntegrationTests b/OV_DB.IntegrationTests/bin/Release/net9.0/CoverletSourceRootsMapping_OV_DB.IntegrationTests new file mode 100644 index 0000000000000000000000000000000000000000..d7e63519aa72d5f18b0f7f84f2df52b168343182 GIT binary patch literal 1394 zcmdUvxeCHS5QhI+@EuZWV<{ros3;a5;86*p@rpMl0Slj9{ni7E6%`bNgx$>iGqZE< z9uEa&)m2#)wfNW7QBnCT)wAf7T>08)tF>m@>tfvo8-e-Q&G`CI3+R+q3N=9%z-_=? z&DjlNbaNlt#}&Jt@Hl>xNl!yO2CMQV)F&$>SS9aA-jdGOE+v0T74!9ptPA@9OX!MB_=gsUMbLkDVrKJIk%k^E|A hqR;epyP}WeRn6a>WBZoha#I`_KE-i literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/OV_DB.IntegrationTests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs new file mode 100644 index 00000000..feda5e9f --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/MvcTestingAppManifest.json b/OV_DB.IntegrationTests/obj/Debug/net9.0/MvcTestingAppManifest.json new file mode 100644 index 00000000..a5c50146 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/MvcTestingAppManifest.json @@ -0,0 +1,4 @@ +{ + "OVDB_database, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null": "C:\\GIT\\OVDB\\OVDB_database", + "OV_DB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null": "C:\\GIT\\OVDB\\OV_DB" +} \ No newline at end of file diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.In.ACEAA502.Up2Date b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.In.ACEAA502.Up2Date new file mode 100644 index 00000000..e69de29b diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs new file mode 100644 index 00000000..60dbbd1d --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("OV_DB.IntegrationTests")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+147eabaa03e0ca2c113420dc7c94688b7183984e")] +[assembly: System.Reflection.AssemblyProductAttribute("OV_DB.IntegrationTests")] +[assembly: System.Reflection.AssemblyTitleAttribute("OV_DB.IntegrationTests")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache new file mode 100644 index 00000000..db65fb5b --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +705b7fad62ee5f1420d2d3a2fa97c0868b8d94875c84d77f3d2c8be01505ab36 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..fd972cd5 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,23 @@ +is_global = true +build_property.TargetFramework = net9.0 +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = OV_DB.IntegrationTests +build_property.ProjectDir = C:\GIT\OVDB\OV_DB.IntegrationTests\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 9.0 +build_property.EnableCodeStyleSeverity = diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs new file mode 100644 index 00000000..2cd3d38c --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs @@ -0,0 +1,9 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; +global using global::Xunit; diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.assets.cache b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..aa6257acff05d87f58fe1ef13326d7b9aba43b6f GIT binary patch literal 234341 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 O6h#SvE$Q3=*8c;2TZ2yk literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.CoreCompileInputs.cache b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.CoreCompileInputs.cache new file mode 100644 index 00000000..ac4f7a30 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +20b1b131b415617eafd3f1c687aab2f5b2b97072092a0a944ce49bab336ec662 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.FileListAbsolute.txt b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.FileListAbsolute.txt new file mode 100644 index 00000000..bb2358ef --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.csproj.FileListAbsolute.txt @@ -0,0 +1,757 @@ +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\.msCoverageSourceRootsMapping_OV_DB.IntegrationTests +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\CoverletSourceRootsMapping_OV_DB.IntegrationTests +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.csproj.AssemblyReference.cache +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\MvcTestingAppManifest.json +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.AssemblyInfoInputs.cache +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.AssemblyInfo.cs +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.csproj.CoreCompileInputs.cache +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.sourcelink.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\testhost.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.deps.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.runtimeconfig.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OVDB_database.deps.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OVDB_database.runtimeconfig.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OVDB_database.exe +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\web.config +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\appsettings.Development.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\appsettings.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.staticwebassets.runtime.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.staticwebassets.endpoints.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Assets\Fonts\UFL.txt +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ovdb.db +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.exe +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\testhost.exe +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\MvcTestingAppManifest.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.runner.visualstudio.testadapter.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.runner.reporters.netcoreapp10.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.runner.utility.netcoreapp10.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Assets\Fonts\Ubuntu-Regular.ttf +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.IntegrationTests.deps.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.IntegrationTests.runtimeconfig.json +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.IntegrationTests.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.IntegrationTests.pdb +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Antiforgery.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authentication.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authentication.BearerToken.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authentication.Cookies.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authentication.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authentication.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authentication.OAuth.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authorization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Authorization.Policy.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Components.Authorization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Components.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Components.Endpoints.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Components.Forms.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Components.Server.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Components.Web.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Connections.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.CookiePolicy.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Cors.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Cryptography.Internal.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Cryptography.KeyDerivation.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.DataProtection.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.DataProtection.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.DataProtection.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Diagnostics.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Diagnostics.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Diagnostics.HealthChecks.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.HostFiltering.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Hosting.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Hosting.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Html.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.Connections.Common.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.Connections.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.Features.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Http.Results.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.HttpLogging.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.HttpOverrides.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.HttpsPolicy.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Identity.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Localization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Localization.Routing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Metadata.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.ApiExplorer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Cors.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.DataAnnotations.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Formatters.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Formatters.Xml.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Localization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.Razor.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.RazorPages.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.TagHelpers.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Mvc.ViewFeatures.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.OutputCaching.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.RateLimiting.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Razor.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Razor.Runtime.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.RequestDecompression.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.ResponseCaching.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.ResponseCaching.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.ResponseCompression.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Rewrite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Routing.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Routing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.HttpSys.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.IIS.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.IISIntegration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.Kestrel.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.Kestrel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.Session.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.SignalR.Common.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.SignalR.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.SignalR.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.SignalR.Protocols.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.StaticAssets.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.StaticFiles.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.WebSockets.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.AspNetCore.WebUtilities.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.CSharp.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Caching.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Caching.Memory.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.Binder.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.CommandLine.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.EnvironmentVariables.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.FileExtensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.Ini.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.KeyPerFile.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.UserSecrets.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Configuration.Xml.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.DependencyInjection.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.DependencyInjection.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Diagnostics.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Diagnostics.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Diagnostics.HealthChecks.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Features.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.FileProviders.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.FileProviders.Composite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.FileProviders.Embedded.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.FileProviders.Physical.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.FileSystemGlobbing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Hosting.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Hosting.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Http.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Identity.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Identity.Stores.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Localization.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Localization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.Configuration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.Console.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.Debug.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.EventLog.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.EventSource.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Logging.TraceSource.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.ObjectPool.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Options.ConfigurationExtensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Options.DataAnnotations.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Options.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Extensions.WebEncoders.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.JSInterop.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Net.Http.Headers.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.VisualBasic.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.VisualBasic.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Win32.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\Microsoft.Win32.Registry.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\mscorlib.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\netstandard.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.AppContext.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Buffers.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Collections.Concurrent.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Collections.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Collections.Immutable.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Collections.NonGeneric.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Collections.Specialized.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ComponentModel.Annotations.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ComponentModel.DataAnnotations.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ComponentModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ComponentModel.EventBasedAsync.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ComponentModel.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ComponentModel.TypeConverter.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Configuration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Console.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Data.Common.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Data.DataSetExtensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Data.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.Contracts.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.Debug.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.DiagnosticSource.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.EventLog.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.FileVersionInfo.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.Process.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.StackTrace.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.TextWriterTraceListener.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.Tools.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.TraceSource.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Diagnostics.Tracing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Drawing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Drawing.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Dynamic.Runtime.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Formats.Asn1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Formats.Tar.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Globalization.Calendars.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Globalization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Globalization.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Compression.Brotli.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Compression.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Compression.FileSystem.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Compression.ZipFile.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.FileSystem.AccessControl.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.FileSystem.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.FileSystem.DriveInfo.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.FileSystem.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.FileSystem.Watcher.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.IsolatedStorage.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.MemoryMappedFiles.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Pipelines.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Pipes.AccessControl.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.Pipes.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.IO.UnmanagedMemoryStream.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Linq.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Linq.Expressions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Linq.Parallel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Linq.Queryable.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Memory.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Http.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Http.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.HttpListener.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Mail.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.NameResolution.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.NetworkInformation.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Ping.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Quic.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Requests.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Security.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.ServicePoint.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.Sockets.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.WebClient.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.WebHeaderCollection.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.WebProxy.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.WebSockets.Client.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Net.WebSockets.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Numerics.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Numerics.Vectors.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ObjectModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.DispatchProxy.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.Emit.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.Emit.ILGeneration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.Emit.Lightweight.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.Metadata.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Reflection.TypeExtensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Resources.Reader.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Resources.ResourceManager.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Resources.Writer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.CompilerServices.Unsafe.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.CompilerServices.VisualC.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Handles.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.InteropServices.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.InteropServices.JavaScript.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.InteropServices.RuntimeInformation.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Intrinsics.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Loader.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Numerics.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Serialization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Serialization.Formatters.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Serialization.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Serialization.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Runtime.Serialization.Xml.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.AccessControl.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Claims.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.Algorithms.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.Cng.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.Csp.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.Encoding.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.OpenSsl.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.X509Certificates.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Cryptography.Xml.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Principal.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.Principal.Windows.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Security.SecureString.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ServiceModel.Web.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ServiceProcess.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Text.Encoding.CodePages.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Text.Encoding.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Text.Encoding.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Text.Encodings.Web.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Text.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Text.RegularExpressions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Channels.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Overlapped.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.RateLimiting.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Tasks.Dataflow.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Tasks.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Tasks.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Tasks.Parallel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Thread.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.ThreadPool.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Threading.Timer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Transactions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Transactions.Local.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.ValueTuple.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Web.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Web.HttpUtility.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Windows.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.Linq.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.ReaderWriter.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.Serialization.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.XDocument.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.XmlDocument.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.XmlSerializer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.XPath.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\System.Xml.XPath.XDocument.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\refs\WindowsBase.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\AutoMapper.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Azure.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Azure.Identity.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\BCrypt.Net-Next.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Bogus.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ClosedXML.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ClosedXML.Parser.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Docker.DotNet.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Docker.DotNet.X509.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\DocumentFormat.OpenXml.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\DocumentFormat.OpenXml.Framework.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ExcelNumberFormat.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\GeoCoordinate.NetStandard1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\GeoJSON.Net.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\GeoTimeZone.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Humanizer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.Authentication.JwtBearer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.JsonPatch.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.Mvc.NewtonsoftJson.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.Mvc.Testing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.OData.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.Razor.Language.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.SpaServices.Extensions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.AspNetCore.TestHost.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Bcl.AsyncInterfaces.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Build.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Build.Framework.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.AnalyzerUtilities.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.Features.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.CSharp.Workspaces.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.Elfie.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.Features.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.Razor.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.Scripting.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.CodeAnalysis.Workspaces.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.CodeCoverage.Shim.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Data.SqlClient.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Data.Sqlite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.DiaSymReader.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.DotNet.Scaffolding.Shared.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Relational.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Relational.Design.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Sqlite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.EntityFrameworkCore.SqlServer.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Caching.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Caching.Memory.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Configuration.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.DependencyModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.FileProviders.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.FileProviders.Physical.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.FileSystemGlobbing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Logging.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Logging.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Options.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Extensions.Primitives.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Identity.Client.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Identity.Client.Extensions.Msal.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.IdentityModel.Abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.IdentityModel.JsonWebTokens.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.IdentityModel.Logging.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.IdentityModel.Protocols.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.IdentityModel.Tokens.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.NET.StringTools.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.OData.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.OData.Edm.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.OData.ModelBuilder.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.OpenApi.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Spatial.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.SqlServer.Server.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.TestPlatform.CoreUtilities.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.TestPlatform.PlatformAbstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.TestPlatform.CommunicationUtilities.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.TestPlatform.CrossPlatEngine.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.TestPlatform.Utilities.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.TestPlatform.Common.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.Web.CodeGeneration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.Web.CodeGeneration.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\dotnet-aspnet-codegenerator-design.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.Web.CodeGeneration.Templating.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.Web.CodeGeneration.Utils.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.VisualStudio.Web.CodeGenerators.Mvc.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Microsoft.Win32.SystemEvents.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Mono.TextTemplating.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\MySqlConnector.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NetTopologySuite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NetTopologySuite.Features.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NetTopologySuite.IO.GeoJSON.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NetTopologySuite.IO.GeoJSON4STJ.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NetTopologySuite.IO.SpatiaLite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Newtonsoft.Json.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Newtonsoft.Json.Bson.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.Common.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.Configuration.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.DependencyResolver.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.Frameworks.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.LibraryModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.Packaging.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.ProjectModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.Protocol.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NuGet.Versioning.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NWebsec.AspNetCore.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\NWebsec.AspNetCore.Middleware.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Pomelo.EntityFrameworkCore.MySql.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Pomelo.EntityFrameworkCore.MySql.Design.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Pomelo.EntityFrameworkCore.MySql.NetTopologySuite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\RBush.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Respawn.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SharpKml.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ICSharpCode.SharpZipLib.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SixLabors.Fonts.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SixLabors.ImageSharp.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SixLabors.ImageSharp.Drawing.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SQLitePCLRaw.batteries_v2.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SQLitePCLRaw.core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SQLitePCLRaw.provider.e_sqlite3.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Renci.SshNet.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\SshNet.Security.Cryptography.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Swashbuckle.AspNetCore.Swagger.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Swashbuckle.AspNetCore.SwaggerGen.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Swashbuckle.AspNetCore.SwaggerUI.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.ClientModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.CodeDom.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Composition.AttributedModel.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Composition.Convention.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Composition.Hosting.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Composition.Runtime.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Composition.TypedParts.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Configuration.ConfigurationManager.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Drawing.Common.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Private.Windows.Core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.IdentityModel.Tokens.Jwt.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.IO.Packaging.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Memory.Data.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Reflection.MetadataLoadContext.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Runtime.Caching.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\System.Security.Cryptography.ProtectedData.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Telegram.Bot.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Telegram.Bot.AspNetCore.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Testcontainers.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\Testcontainers.MariaDb.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\TimeZoneConverter.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.abstractions.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.assert.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.core.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\xunit.execution.dotnet.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\af\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ar\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\az\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\bg\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\bn-BD\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\da\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\el\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fa\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fi-FI\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr-BE\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\he\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\hr\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\hu\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\hy\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\id\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\is\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko-KR\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ku\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\lv\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ms-MY\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\mt\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\nb\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\nb-NO\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\nl\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ro\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\sk\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\sl\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\sr\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\sr-Latn\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\sv\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\th-TH\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\uk\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\uz-Cyrl-UZ\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\uz-Latn-UZ\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\vi\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-CN\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Humanizer.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Features.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Scripting.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.CodeAnalysis.Workspaces.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.TestPlatform.CoreUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\cs\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\de\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\es\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\fr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\it\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ja\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ko\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pl\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\pt-BR\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\ru\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\tr\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hans\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.TestPlatform.CommunicationUtilities.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.TestPlatform.CrossPlatEngine.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\zh-Hant\Microsoft.VisualStudio.TestPlatform.Common.resources.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\unix\lib\net6.0\Microsoft.Data.SqlClient.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win\lib\net6.0\Microsoft.Data.SqlClient.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-arm\native\Microsoft.Data.SqlClient.SNI.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-arm64\native\Microsoft.Data.SqlClient.SNI.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\Microsoft.Data.SqlClient.SNI.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\Microsoft.Data.SqlClient.SNI.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win\lib\net9.0\Microsoft.Win32.SystemEvents.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libfreexl-1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libgcc_s_seh-1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libgeos.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libgeos_c.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libiconv-2.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\liblzma-5.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libproj-13.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libstdc++-6.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libwinpthread-1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\libxml2-2.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\mod_spatialite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\zlib1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libfreexl-1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libgcc_s_dw2-1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libgeos.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libgeos_c.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libiconv-2.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\liblzma-5.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libproj-13.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libstdc++-6.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libwinpthread-1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\libxml2-2.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\mod_spatialite.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\zlib1.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\browser-wasm\nativeassets\net9.0\e_sqlite3.a +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-arm\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-arm64\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-armel\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-mips64\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-musl-arm\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-musl-arm64\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-musl-s390x\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-musl-x64\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-ppc64le\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-s390x\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-x64\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\linux-x86\native\libe_sqlite3.so +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\maccatalyst-arm64\native\libe_sqlite3.dylib +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\maccatalyst-x64\native\libe_sqlite3.dylib +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\osx-arm64\native\libe_sqlite3.dylib +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\osx-x64\native\libe_sqlite3.dylib +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-arm\native\e_sqlite3.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-arm64\native\e_sqlite3.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x64\native\e_sqlite3.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win-x86\native\e_sqlite3.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\runtimes\win\lib\net6.0\System.Runtime.Caching.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OVDB_database.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OV_DB.pdb +C:\GIT\OVDB\OV_DB.IntegrationTests\bin\Debug\net9.0\OVDB_database.pdb +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.In.ACEAA502.Up2Date +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\refint\OV_DB.IntegrationTests.dll +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.pdb +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\OV_DB.IntegrationTests.genruntimeconfig.cache +C:\GIT\OVDB\OV_DB.IntegrationTests\obj\Debug\net9.0\ref\OV_DB.IntegrationTests.dll diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.dll b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.dll new file mode 100644 index 0000000000000000000000000000000000000000..c8b2f2f163c6209207a11e5f805bfbaf5ce29aac GIT binary patch literal 63488 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 literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.genruntimeconfig.cache b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.genruntimeconfig.cache new file mode 100644 index 00000000..062a27db --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.genruntimeconfig.cache @@ -0,0 +1 @@ +1aa0c3ab36de5e8b21d85ea7297dc1ad6f9a65bfdd75226cc60dada2e36ca136 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.pdb b/OV_DB.IntegrationTests/obj/Debug/net9.0/OV_DB.IntegrationTests.pdb new file mode 100644 index 0000000000000000000000000000000000000000..04521af189030b9b8f99301f27dd31a97bc34d51 GIT binary patch literal 38696 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%0AHQ<&ejN zn_K#t^k9)#H$hy-z5M8*LBlF(#j;hDE!F1&HamE_dh{@|Q(ngJk``%-n9f zb4T96=?ex?^a)#DG>}d98e8ZOAQVH`pe>0wb$D}0Bj%LJ(}Z(J8uDE?X3#gjkMC#J zrjAg-+o_tywgI5if$jyPr=&-?4UJrmd(Fx|(39~C*aXY8iz01A-1)Uw6#btAS zIpJ(cwa;5ZJjU3p)D9BC^&jY~O?FLc+O4|yU$8+vhlj!NEh=W|!_W^H6J6P1-#n+= zw!13M-M{qO^X0!`YLz!l7Yn~)G_3n0r-h6vx8KL))r?)9_4;4XhzQXyp-+iyvjrn1|3zx=;oaE<4ScqA^A{M<*oFfPv4vWRUz7uqeoc%&e6*es)e!NtVW z1~HyBsowi>slGh==@@i<2)&}nL$O8W)z(h&aJb?DSBxNFaQR`}h*%4!Z@w)Ia9k_g z^!?p7HRXRm;Kc!vC~1t3v#;*KgiKbctF4f0cHcDP9X&1m_C~3A>_G*AP6o=5F)m9- znl{bZe-YzqiJp}^C%@Eb<<$>W_0K}T{4ZSMYT6rd7YS%6Y<`Yr)8c`yIg`Q$ZEoS} z{4Z#SsGw+07^X>tCvc)*8PcJl+v;84^S|mlZcSLSepF=O+y8|JOEU?MV&UXGT#`$L zmSc_vD$=*N%rNX>?A+sj;qYN|K|2!@^4dqe5EC-ktapgA4RXph-7z`Ow6y7eA%U5e z7{iIz`K73kKv&M|o5k)MY`bLJtn4B5Ndr2;5EaE1O9m-oA~yUR*RF5~dZSjaFD3h2Hk9#tF*}jXPy%5*+vT{dvzoMP?tN681Z<`u& z{{@3X0!%jWj7q|EpSY8`m>l=?%=xEW?On62O*R+P7O|xx3uA>uad=?PfNuTg_#)_* zREKd{t^VrYZ?ccWissry^YW%g|4&?^a_O!PzK(PV6ytQE+L%4cVehGpNmEY0(f^;| z&TLi$Kh!>y9T+YtmU8v$Etr&-RSsbnG>EFXRJ`OMk3q~a1~zxkzi8kUn??|k;# zG=%3auqo$I?dJ+xPXactmA5wA$t|ZW@{)Enbf!N<5ZrjNP?$ zvbA)%ipzjW5Q`!yl*Bq*{)|ghqNp4_rdWese}uow^z*zj>6Gw6Bb9+}W-xhdy)M%JAm;YUkD^5OpNGq_+@O3$yQ-dW*TeCwmavnNA0bdCgOqpd;? zMx#iML~mioUAcql+1}mjK!*21m%^{rnb+<*pZzyfB0l#Kw46tD0&SVIGB|=xxD`9= zX0uMnUFsZ%2yXhDN&)gGkW&7LUC~1-8Rh*fx_aJ{8Phr3A02kvgzE)}PD6=tRU@2= zlRYw1=M6~JQS&S~&w z^I{`fN6mA`3?AV!q&1}%9B*NGq&954{dDc4y`93lb3#JeddbseZ%eUo4!uA6m7mLh z%+kA|0U2|rhjt3igmID^1~U$EH`8<7xdnHR?8C<@(ncJ2+L;#U((BXH&hzKB8=Xeq zPuqm6zc~F#&$tnD9M@!&{qDY2T~TWO9VV&PGOx~{0|audcxSRcp&xz4s`dI^!rw?2 z5w1K=loyL1C{g6HE|(m`;%()Vz0*vpoE@t_^PTcG+02ugu{$S_713UgyHLG(87}u~ z^XTCXdqy!AK1$0kQzJ6}H$1i%w^hKb;60g*4E~ZS%&(x@AK)w(qZEQrFCT+R`m+pmAC8)Ge2xT%b|fi zmZ3MhcS7elqQe{#q9eetAkmk8_g-}XH{l?`r&lZ0cH0#Xd>a;FbbV5%C@5A5^+f$_ zJdsnZy!O(*m$v)<1r5%+V=9?{gOxPB*h$@P;Npi3IjJ8tf1dk-HxFaE`=-t66c(!k zwoy?WKB-Vh(3ox<*Me&@X=hcH`X>k5BE>0pi}m7Br)WgNW32CqFF5ya;gOD^!u`%E zpH95!XXLh`Q!vr28^$P}F>Z|FI{X-@Pbwh!3eUsVMRu{veEYL@-tjE+e?ik`bl7BE zcnDX)k&2O94_Vc?Ww16U4jB0Sbf;LPv}otIIp;7R{ySa&p<=}yr(I?v2kV8?zjcbk zlO4~;M#f-1r99qV<#|{ZHy=s6I4n!ob64+OzFtnzA3DY2%}Rpx1QAaO|M$l+@RD0U z2JQ$Rz{t`l_K|H)3I98=7hXpYV;Db?eGN4c=$X|)x$btiU3O*9+x(jDJgrju zb_CedBpBHDwl`rK)-60y%p2rvSET3_IHxwCXXhAT{h_TtkBuL83WHZh41VkKGs}6? zgTSZ14faj#6x=V29p7P0aMwTk0uL&_&)+ND*r?!H-*a-+ofCmOq~c)WRxK|5=|P8o zqoyt>UyWtIonShaT^JL5ed)79(g8_hu{|p=w2k`It-edJR6J?c?~Jn1QIGOMzXZzx zs6{FQZ!iqGgF%^6`pW)-X50>!T{^pZV{rwu(tWq$1Lv=*oxr!%{A_FeC%ExBEn@_l z$*=O<^Wf&@T(!hCe*ttC8^gtAS9&+$0xIl^%KjUZ^J(pB=Z&nmX9g*|`u_!kx5&;d zM)02TV;3gD|E;GxW9d=b6wac7ul6ew(h;y@Vxis{Y;4_!(HtxBVm$QqAF{DvShDK$ zm>HQ7Zq-UrrUL}WrK@Q$n8VDR$Cgxs6pd|Cv&~+Nk4aPNe|UDK>+0FRcmAHXReEda zh)>k7BI138xLUsEt+IbPiRQR-S@zs&yP@+tDVmt1KT3A3U{Ma{kj~hgUu);gbrTjA z%sVrOxy~`@wqWtHkenHYf#UrE?W{e(PS&m8A z{o!Gsnh_jk@%ba%dDgk_{)$ILLhe<9gAn ze|yKwsCD`%mGm}f%G$ITk=)prPnZX@&i&Mg8no7R1SJbg*M{T%yZIJD>0)af%&lFgC0Fhq*!H=TvQq`b56!iwaQ*c+yq9b~DcfO>`n0*0rh0nPLBX=mitvVtqfDBf zmCIhi81hf4y)?{yXgx$bT>K;qx?z$PDK3e*m$wy2)w!v@$IT7tNA7i7bqmh zTz!}Qo+msUp1tz5qODFfmjT2gISpWqK4q?uY43Q{}k38TYhqItzFJ2jfdG?4@{uI zV%H6E>Z58Ge&Y=ijYqpC{C17js>kDSYMC;e5STE$6n^{VlFWAo_}gr0Y%4e zheouDBqlwArMVgj0@3fF-XF&}N4T%wQ+F)V<1J;#kp|mArR%$BNiISI(EeAN$J}Rp z_ADGa+ct3GEsB*;8j?w{F31B<+~d1zJP#+-F?=^G~W z(Abw(O6jBR$nH?+oBh)p5OPBi!-o5gn3CgCG2l$zZ1a;8S{^efrSHP+ z&8O^DX4D<|iEfR$O|g2n1N8~yhJkZKtMSj~wqr5!ry=Dd0ngr_x#GG~ZD*H2rS-0z z6!{N6kE|N>27!mCx?6IWB`c3Rm)dJaC}Cv6JZ|_2FoyFuosUUGqKzr)o~jsVpsy!rbu0T z>ePaoU|-ORxAS|Jy=3OpWEof0U!t{9#t38iBu09(SwXEc^f2ocS(uxTcRccnpJZjX zig{MAwmOdhN!l&#M^MEym3^+!oXsX~_;S zql`EXr2jx`{}rvF{%Ms)zy7<5MV8T%;Mze$o!oOYq91UAlj7Rwmxf5xkY6-BDn|67 z==-s=^?USO>1$0UPZu6{DgHaGHyhkrKs|>A2?lkcd{WHj$yoHNU*4az`evxZS{eHO ziw$#F|BOvU)VUuh; zCWaiP)#NzNcV?`+)3sdouXsGzk=RvH%;v7@D{vPJ*fCETxi>p({#NxSAk^WpbPSxR z;INQbksGKqtJkEB+Ep0a&qpQ2rRC9#bq7N~ryset=pV4zfpb-B$68gFdI;lb*|=c( z`P_WRT^HR~yfZjXS#_r}C|845|Sm&7Ys$~Gg&db4PcY}e-q zZ}i>T^ynY(xkQDDd8HvYrVt}>Y#y33^2IIpy)rrqAsgmb{{s?=vC2hjE=&m#YFKvf z{0obNc6BqF>e%02Q`TuI)VHrbSex_$PZ}tom?Cy=_y*j>hh3Sud~Y|lL)sp7TKI5H zinl_ixUhSy4?B?Crjh0c=a5aIr%Q_SVW@`%9(FD7sT3ruv0n$`Jw>H1;oa&RfVo%Due>?(1}cs6HB ze#2Rtf5s_l1EGy|H!$Pntt@11`RC{<*Hv{lg)VUWA80&4*OM$OFLkAP1UdX0 z&UUC7RDQvBA=Q}=Ad+#aBO=jDt$XWW-w?_Lq< z_U70Bq^lib5s|qYrZnJLO7Y5*Inzy-*=Mt4ddQ7Al`R!l2Sskq%i#|(9gC7PtL=x} zqi;xSTKVAc^kLFrp-;esFAf%oz^E#vRK%CY63p%5nviS#{A)b6Abn3a!(Pw+0UHR- zXb!J!l#4{18jMPhvHx~*6=nPq1Bezv_99 z`M+$k_g5K=`Ugy2p)mJ=1tPH^_;39>@N@(ZA9HP$K=mgcd(-ZGUs$sHYNwdMz{F=q zVn^+OHVszM`9(fvImfVH?arP~w)v^0=iD1#X-UN*Sv!`(Y^?$sx!$|Cd*Jly06*Kj zrug8eL+?|yoVK%3=bVs1K|adEBQ+l^UydahR|@S^ouDReyR^NSI~n#)}Fl++!a7}0d@e<8vS z<>FR8dH>9Hn3jpdSn*R8Z`$V^kLY#(^5xBcML}*@5F=pXhABX(U-S%*gcA|&rHNbT z*!LQA^REa*NbHlAJXw&j7G(yU=2pYJmmLs`kbDwS);jgMy%XI zai@@i28@(}>~?6ZFOIx|(Ioi!UT@TBW~^NpInlz==Ze%4F$3@b?Zx3pBu>JD+oY^G zR&{f2-E;%nv_qOJ4;|Y=S#zTh!Gw7-b~tL+E-2qcEG}!bCE24jwD+9pueEI}d%e&s zF7(?koggvFPS#h4-MNIz_W5j4xm%^VW5JS|G@EsG*Z+!2M8%-lyO-dOty97Zi$9_lR-WuZH?L9UN-9MJ}_^3e+JvV5n zPhyiCMS!-arX3@`1m}XqUmk5g?XG!PcA;zTl%+IYGka1SDXu=Gm6Q`L&dy9>e<>b> zh=T#gwa15e?7dtRlh&wc&<25h+QTJ{UB+t@E;voj-L5 zMWKW(FvdRQi8#I>2PAbB7=G_QZnDl!Lw5A7IOS1Td&`qG)QqzHDq1b3jI}XdufZNO z5XBWfU!H&Pf%~>4UVEZ1pOR^#Q3T=;6e%uM^z=mnB+x*b#%Fc2GafrunW*P}d$rEH zBLvwT?63{Eb-GOCXKX?`a>(`9TU#S1I=xc6i~Y9wRm&-$P;0i)l3Cuc;NSIlo41d0 zu}aso+nLo#4aQ&7yBW8o_lXAEPHUH$aG3c4*YE7AsfP5DVvkz887`Yk35u^P7)`_m zj&^pA`ZFy*Fyqe7q`$D;f5$FsjFHpGF%NdOWrXeaUgCXHzY|OyOS7Z*xwBZ1>FK3*sq%8RtLayv^&!0GTN}7v7%!F;VaEbB z8hG2fOtty?=g)ZE?ydim7`4!ap0#qRH)WTaQODB>0Sx+`lR1i9kc5x_V{+#utz#Bp?Kde_EDg)H#6_!a$GNa-jUjJ+ve3&sV!TxkRlELRwEqHHax&FPgK~do)gz1ff71i zK9w0Fzn{K*DVnCzw5hUdgI>UoBYAuWO!Z2{6rH}Qu&n>+u_uG(kW%^ zt6rP;jy7}HVcbJI`C5~$2PcXHJF*k_f3V%+=dbyACGYdG>EGrq*yvi)GrWfLs!Q)k zULc1X(YiJK;< zrmHt z>K_k-9YX|izGCV=K6#*fgH1`na+Obd9YI88E9p8kAL+o^7JUNdZGSGXZ`eAtSMPue z*F9sMK>umy+2AzUklX|m@ogc}kMHfgcwNeX+$MQjNm8l>U4;CtZ^lo2NX!hAg6{^# zgiBeEXR2?e?I{&Ow3#)*Gl~;|H~CN`;O>;U#kd&yQ^KYv@;*D4@(&N%Zra!^f^A*P zk~I3RiJa?rP32w6nazTn0@fw@g%{ZbqH z>L;5LUyXAfB?9mwk3eV>Oh=jqgP8!1W?>9$Dma*KD?C}IFzdbC2XSgH2T%K`==E~7 zwj&)`wCDAzcbD!DbE*t0z2w6y)oukKoi4;pMC(&fC8Db$Gyk~5`SX!S*4MYWLmc;R z6D9V8c@GQ^ZNy}lq~FDZ!=zoCl+yfE*LcD(z+;0eaobKw3PaP*H*UmG z!_RV)nVFVOwM%(7>cf16QlLD-f`TI0@vz1yCh%PHIPgRUkLt@K{I2eq%G_jA$2*nu zV>#Y^KQjoN9Pv3A;NfPf{HEgS)VW+x6;iyp2MS0hKr695H*ZbjR&9MiA#OO z+M3%x^6VDZ?7CaNd#k(`Cz2h(F_t#wkV3||-6~-tL-q(BE%F*&6~CE20^mmxsq#B)RQA6-Dc5@__z7!T;#FB78>~iubU)|Ml)``+=}*0i%?kWy2j(GH(2+>jD2{afLqMR z?iS7$umGj|Hk>?JH-?dVGw-R9_OB@HM#zencr+S*Zn%ZJiTRM5FTXRMJFj!wc*bh# zhpFTexEt&Hr}2$p;?FGEqajp3Fn^8D1S}1`?A^WLEQkOWAMYb# z^Jd1GiMe!Sku0fG1{Z`ZE+~Fumo`wrZirHyRXaEs#U!oszJcRD-0gP_W(+hK*vq|O zNq07VM2}1D(npI;-hF&#W`H_JWIvxdK+mjS>tOw7bdS;>=V!8g$Be1hJ*Qz(sAK+ z2<&eb=WDnv2mApMdf~G3d((Vt&(bcdhdS7F3;#PXsFq^*r;YLX=l~5Je(b?_7OL2# zP^?zm!{kx!$_#4RG_!x+x7fYF~1nuR$1 z=RV2DvCh+Te3a6Nk{=!$N>v^o+_GhXIK5qLaB!O~Cz|2611GkbHgGkI!?iEoJ3+G)VwJsb+8_lZE}``~1S~YW}$w zHMU+|9g8kxMQmjqF>Xx^rw@rYctRPV`nX_<6c+R3i=>sH*j>|Ry%3mA|qo#Y_{5L&F#*@*#aOu6wA9# zcdm2HZH$U8b?ClX3aBS1ikvjG`cQswIYhP&or0eyDjW6PaxQ;dG=S5~QVOh3G&>OH ztV!I7{>X=F3T=-KxuNR>r(uH@X#AyggY|1Gax`(P&BU_X7)I7rupc zNMn(GZ9#hPpuW>{rNc`%LtZO9vjsN+hRvO(wC72lYkzD!;ki(tCLM=}*Q=YW>M=~s z)n6x@4K}$66IRRW(^m1N!;lIxOk&wVq{p1Nf-N)xaxo71>w?2ivnMbs2N#Vq$$Ya{ zI*vb7d#|xJKXLnbSlm$gpTSVKtW?E8Dt(_~uVh#>!pf6qXSaxT_^>Z%VxZ=L3=m_#$-V&kv!%5-zt7MlgYx)c&0&_l4F~E`5mQOu z`bK`#iC!63q#z*k21lUQ>95kdw0tbgstoUL@ChI4w)acX{$F(OUQ%G&FFrl&T5<(9 z^F3SYCm!e$!Yo*@;K{Y#1N@`_ws+${Vqbp_Gi>-MyESx!K&Mn)t&wt5&9bEcVr~V& zaU!k5QFO?$S6F=+)p86e9XsWbvuf^*#GUyDt*}(}6Uy4=&f&p|f^ka1aUo+Kq@jU3oao}3|38RUmB zNk^a=wNsMQ2@kt<$!jvAo;vb&ML8bMpk7Jq7r6B4&aft zj6PxewtUvO;3JHRlv&3v<$swb1{BqY+3_Fiu~hr)^gJ(c64$f%*UD4t zyt9u>u#2_Mb{*>g(W3|zDxep(!$7r!4sBsY^AI;a|+hK5;DXNi!(lJ3~`oGdsYOvBEcz7;`U>; zB#=C4$fSE+?%B%4j11>U^W|OF-WBK89$3V`uSLs+IKM=PJp*`aH#uxf%Ks#|dVZr+ zkU!*D$@e|5!hz6_u6L>{&7ZpFh1k5jZt(k~7+UHY5ga%pCik)IXL57=+?BiuOqA!o z<@v$Pr~73arS+MbpU4#z1`T;8lRlQJ>v_%9z%E{;`lshyU)>i3iHlEDQ^D#{~mEQef7Zb;Y= za`C?kx2g=&BL{c}zuWSlkYyW)tnjr1?<@_naKcKD8-$G_oTOq%EWuONKUzrLmor``9hNV|n4hgfW9C zd63(`q*eWU%Pk~q=z&J#feALA3l8*en%?I{K}T2-AM!)>3oswx*u&i4Z|B)AbaYAH zbt$O0E%n4G@VW)Y1&J5}Yp85EGE@XDe?^TY2ZU98zyCeDXU3A^OQom|2PwU1B875xg?Q_IKhv3E*) z66&HRJoSVM1?ngZri&8Sj`_Y<_u-7JV`G0jUrc8#4{=J}b3IxjipY#6#KIY6lxd!6 z>?ZPHv9(4czQOO0OU z3GO&59Gj1i{liiRpCZ^cWtzRS>nogR>8$u7!yeggb@Ed#L{3d_p}=~z=_`d_TEG&D z(DS6VPRaXr+wQ*HCpO1S@S2*s<8o0G^Iitd!Pi}5{nx9znU!~kf6`dJSE37J&QW$x zzDvx61CHP%o_BlCO<)AO3M#5@HpCpBNXfxlv>RH|&ZoE}ZNr*!5pCZnn<@@-?c(y@ zn&odKa|n#T)ruu*fh*{$YjLZZ>+o$EKgioYXTdFYWUN{dB@et_58MB|@R4ESUf57j zLn@YAT>PK+m%D7c_NsNao)d}UBd6*)!cRVTM7V} zx7&I1@cTrPhwf~)PB7bLx!ZHMTTRTvI%i>f5Rv;h~@ zskOUcKW+&t=Iqhi8T;C0!Go)XN4ov$*FG}|sEF^b*}q5!V-Nnl^>!-8K4ONy&k-u-A66f*fBDdBNn-tvOO1F>pw5eH0ul73EuQe zCCuHi2mH^RqkruLgL_y=C_kQ!uVNA`XWY7l>8|SbcY-C8(?8z>VjZ{fXlbl`Q$hu-Bvv+vMjb zNbq9p`k`R=Q{nT}KS8lg=#L3Ot?_~;TWNW2Rl|HPy?Hgmtcw`ydT zzmJWsJJl>PK1fIrwJgUU)u~9Q3;HrH?dg9*J~@>ac!xIj(Uwf|B#Hm1nvg3p4s-hBC9}xA2=P`?+-h5_|Kt z@<>E!+=dr$#v}|Prcpg^hgLh!KeE~XQBroRm=H6kBd{wgjwRZrDrV2>@!Iooo1`uN z>f>0Dj)t{dDurRn@`!C%YLwyi7HFa8N0LAH6b=QlZjVXl8u%QQMe6pF!HH7jYeDaLi3 zm$(KlS}EC`7`EDJ0Fs;YJ4;TH__WMM_Bw^4;>@%GE=uND{% z{{x762&ipD2pluZ4{gPAc7i%-#nB8}x+)<%f{{H;eWW|xK|1wqvxW>OEn=DU z?~!BDRypK!b*II6l}Xm0T1(w-Rn(p*amB5%n79q|{CPrk$r0`(rxaP?dA|Cs^1tRT zYBco*ANJz;?lbkr2DZ zI;jaeBF>NzaNaHW;+|(w&2Bz$N@82;1is_cVaPY_g_sJxo0cxV!@TVao_QD)(KQ$U zoeI$rtn47lob%Jt;R4*KRI_6YAC*ViFSFf~+`szR#lIrLXS3VG+E!RF_PuSjFC2RP z<1!}d*N&X|YbHE(D35zIZ=OQ30S#ze_r>Uw}dHq(8=m<|%BwOSgE*@!`vKKGH zBpW&oVaym9=(O~{o>Af&`Tnh-qz)ij@`Krh7%Jwg%tj1lG4N41Bjf`!=VfWZmbC5P z+C#NpZwOiVhV0}X7PrbO%GS7Ve6T1X_)>{P!sB%UaJ+$S7PxC*&s6H!ZDTS{kgCh1 z+68yU{H}3N?Ru}v2E7py!%}--5mUODpE-kR+%UIxz1IqRySg_w{yUeFbw*5MdyqeL zhc`}pNopIHC3#N&G0|iG%g6~~J6a^eK|5$3o_C2k^C7i*H?9hkSzqe=*luv%_hO9v zt%qM%QFEn?8qacP!e(;<9brs);COSnNAbN8AF6KMktm;JHsF~V8^PlKX){XbSwo(= zwZQ#}=Kkuh4hw7;)>rA;`jWgt!G0y;W+)4`I<)$wGD^>r%g&>w(X($Vr8qCUwPClz zXXola;6#jkv19X3+#N@5_dKsZX{l>z524Xbp{B$v;@g@HKL0ZU{{V$#ZGQwkn(TaY zRyEyqyv^{~J=S7T#)2S8=WBzMa$H>3-m=Y@k(bzJ;gt&UPAjga%&R!C@xMQa^kwnj zFkvh{f+INb;%a!F>bMHiJn8dXx!PYhT~@s~$GZG|g+$?L%UJ|1D(Kh;Z(rjUGhv7` z{MiV9pzAWI!6S zU*3Ae8Z_g)T|PUesE43&QrA>}a!!lA)bIQFexv z?oTAC9pAJdC$@Z|Tlu?r%>Q1=GX8{w-(ip}){N<+OKLggy`sOU&awBXkFC!&3f=l% z0)$WQYX4IPUpKt{j+tWm*nH%MBTT#cJ>?g7-OiObDZrv&8w9!8Qe3cw!XxFl{+;~? zhupkDci!y!G_}Hamqd;9V@1TWePg3r9atK=WssGppLMd=l=Hr>>yw+aK5=7jiz#dC zp?eza$hp&o-tV|Q<<2>87;IZKl+>a*X1hsW;p(nW z@z41lRji3TBm-ug?z#8e9s5bl-Z+o;I;p4(oXV@@=EV;JdyBFH8G6P61HA~neUeEz z2AeGT*%EP$U0U*^68E_q!WPToMXMPr$DDjN=#lD63Vi_90myDe5;;d}vHw)0%6sU! z>VVhCkA|aN+5<@_Y;A|bljOmXz7n^`Wm{hD z!mJz9zlbwy<|DV9k`k4|Zq*m4xsb^_mPvnUHd*h@k?*#3HO+C^&$!IgGVB@Y%Z|W5 zB^POI$Kg}m=0wapbb94EoZW>ZDuqeabmrcJVYiazUsG=fB}$s7e(pJ<8>8LpvX}W! zd+v~>HgwqM?aTJz%^rbZ;$XpANvpYRhr_dLNFa+?2W84f%P+TGpS*G2$>>Xfw_Rcn zd`bsHG9r!4-JF7}CCTGpTCrA)YjHw&moxpluK*nhe(s_5w6P&IuQp+h>W)3)yR*^U zdB@E?*A4{k_m=z$3)oxQxelHGJbf3|j20Mr58Sj=-fpqXmD0}(i>He<6YT3GZWkZ# z+#}WVXU#e`@o$@*Yu9{EV%jdbk^tMJ_{OY1&jEV%Ms6bR7AY##^{1T1+m=s=Jv3{I z-)1oY9M1+v1B%!u9N!FwG0C7!v3>^QmY%eq|FV1YJi}jOMM)`sm&I33S7G;^dGC&7 z+aIg4D>;38=jyNJGeim53E(*?va^%Fr6a~(k-i4ZX|m|RgzM?+RyR5=*>8M%LB8%~ z`~#wd>{tTWMUxk`AuVxJYP0k5z>6R1E-X+ojd5YBh!f#XEwSoJ)*{r!-&%*Jo*iEp zlVg?KWXv`L;sA;c!_;g^4f0_>zV%Yw+brZz5$Pky=iqek9V2h;*x7=~lhdt+dlCmE_>3V9%h`2tpHh zCY(nTK9)_ZQ%)ZxpB}52UZF{762e)8u!az}5Get@QUZFX1SrW9NU#VA4G9$)B%8uQ zDeGw|CuPB&?Fl$!qK0%MZ?^b`WV;R%-A3SFt|c^-ps&d)s;bJ%qV5Xv{oq%`3H3zE zxd9YsT(SEbWoIkpBiCjJHt7ZLVsR>?u_v&fW_c_^;K# zt%Jne%lPsU^Bq?MuRDIi)xfjFPidItf{Q3Mfxy4MOZ4hOD9Xz!@_;vq@C&nYTFNGJ zA&TObHtziby5|#|XhCLhy?asu4mHLTE?eEC+Qn z)`sdcA;uB2h(toLi4fEhg8PKvEg|eq2=#CxS+(Ay`#{ByA{+?8YC=#(2oWJvCxmoD zH~}Y6(&%qLQh`8bkQJ8@2nj(AAvj0~UJ-(?gm5q+oK6VC31KcF1kguB3L;X>i4+eE zs!R-J_EjX%7$Sm5BD3E`2p$uHpM)@x5SHL1it!efCd%M&PuLQ(3Bi0qaFh^SBZP{C zP>T?{6GHfX%cX>{h!9>Ogb#@nc_O7JF$5$QL5CKnLsL{m1L5#HEHt~*;74?O(GnGr zDh+1;1T9gX(4>ur&alBCt=hvj0!EWHTjI5gcj_wBD^8_Fq~Wq zC+{XkC`)MeBqplC_bKpw1WmCE8bZTAwk!kLf%qJPAr$bFJQ}Wm^%Nx(q6ptO1oEIM zLZ6@|f{>j(7z)r85sE$p>OzB!tMFPCX!Vd6oFxQjdlI_v8_q-sWMPT3(7+@>7JX@o zYDk?ztZz@E2Q)RW9!d(L{Pk#x_$g7plOLM|Q!3>rS5-x+L=8|`ET2JuOB}T%vYgx# z<@kSSpk%Lz8vzh;6X8M%thfLijf6geglbr(1ot9_6M~O~@CcD|fk;&$QbV+bNLzSD z9vWNfQbG}a+FS6OCOqAZup@*HWWze5ouZm*>*NZSC1a}DGIwG|vk?N%_c%v<>)K0CDhi;O3 zgOulj*EC^;Z0ZjAbbH10LgneyydY8z5~+Q()7`Ywf2+wNls21| zRwJ9lco??cca>jQ&(&-MBxeJAU8* zRpg6ch=pHo_d`SEk&0{*4PK5_#lPzgsFjfkP5d|*dD7rF<_F6oK;?(%@(@8-NFjjM zrXdY@D=SY!_6W@*e=5E|PKF#2>P;pBDn$?a2#rI8GA4I45QTO_xDLT}AfTc{a5aRq zt~i{6%X9n?1g#|%f~zW2zaa!y6AT&z_4>c==K%~vGwR!q&=n>FhlNjc)9Q88<8;$2 zA(n0h-x3DG1-Ju3bUg4H1Z+n}D7G;I{0%T8=(24L(7+4;j`<=38tRA8%zt12Szox0 z(KDPml-pwpT;lP=1Gs>wM;>G;M?(ql-{0<=00Ng%9ZH!}h;&mVAy0-h z+UBUi7b6IB$Y%6`hABhnU+${7vp`y1;TiCi8wyWAG)N)?=pCQ|^}-aii6hW>{vwWo z09pVc8H*!R-4J*jIt(s=Q5g|^l?WMGn&J?os|-bi8UptE;9`lG4FU$}hp-BQAVmSw z1sM+oj)_T%knnM`n2%%0+A^RbU_ol=`bdxtS`-`<4?L0F6>;srUT@?9RgF>VAc84D z=^<$ivd|g;KiL{OuP2bAmf~!oy@K@sLLLM`R#(W;7=j>c2V5_bPde}gZ4y_Cw7VK6 z?IBdc|10f$LgT8UFn;Fc@j6Ln(-bEui8kIQb*gP@+N2XC)_{#^n;Kk%_y@bFmNr2s zNE!;_;?BP$3k3&*i9?l%X-flAr7ER}8#jU*cd_U~L3g?k7lI4X-?{I-X)+BZ#lXGi z&dhsv?)lDlzH{%uWb)01QxX8b^(^E8);XP!m%L7VlX2UZR^5c!?D@nn6TCp`@Sab&Vba+dXkadnz(?t zU5mn@7`8Z5m2L6{>swN=7XGGhQ?M2?05zguE#!e`Ss_|@PA_gy$=ssNa@`T8o5cRc z)b%zEl!Y~*ERsxSE->?RI<>uWfZhR_coh&Is{?T?0x>Il)i0+{?KL+y0Q;ak?-1?QWyh&QQm=@MTh*EG9`LJE9m zq|&xSv0GfCSK8Ud0d?#%V63+~%Xw}%g~f@xYzr6_ksee0#FR#%+rMJ3sgk;sQ=;V> z6{BQCwB0xd(PE4SIS7VX6a(P0=%i1k;h2NQ!*(T2hx_^rx8Bp2R=hN_) zZq(yP>3NakV#?d&i~Ud^?Fw`s7EUm#2q)P`u};~^omqvbq9nWNMkKkMq1j3c@boG~ zl~&L>tVF9EAPvW8wnAJ)o{lJYKlUl^yTBW;38Yj+`!2RPCf`B(%M@M&(O-e{B9*0= zi-42LqDS5Ps4T87oZ)V(?F0MW!Eh$DFxRu5xph&=O1Fn35SqKW*%&mj7S7cko3N8! zvXhMmlE)3LA*u}*ds;Y0PdDp|A5NX#Bz(v25x#~lPjZ7I=lrgu?B+Fo)z^vGI~uj>6b{VOY}HA|%P>LzwqpCZ zZjFhju`}53dAlXXKVx6Rc9ITxJU96xJo54@rtpI)UJx_e#gnsqIi!ThX*8*z_AQNp zA7ut*zLpu29{(N(rQ0rdMj2oB)|6tSLW~6DP@E3OBZW}VFP?|!UDSRuviWQDhTDmvc zzKly}fPcD;iO*#OS7eTMg=Vk*POm$Dd$oy~+0f|8#D3bZPqSqMzn|7~I4WVWvSc@w zu>YyF`xM8T&?G~l0cm_Zuez9$JsPbi+-@KwXa^%r_i0badDf7^{t zf%2P5($&){FxplfHOuf-|F&Wkmq(fIELLe*Z(TKGH*N}Fnc{Ke#uErWviBKASIkucWdeD)1A28 z6P8Kba|~{rCIy`be}s+R(z8eUt*cb0N{{Lqy-feKG{R-^?b{ z!v<@NthT1`)qDCW1)S%|)!X*;bm9IX&<_Scccd~ytc(j&m~z{y$zTP~W$!3aT5S2> z1hN*1=UGm5ND$EyBp=dukvvFT$#SHtkk|y*J&445-~^avt?g=GrJr6E_;3CVm6y?R zOrw7Kym0oHFRk#?X?0o9Pp_9V{ItN60>_2FT=0762k5K54+Q*lL#Q9{0kIG$@2d>a zYrbg6PdE9Q9|gxxJIgl!e!JoafUo$OLrQ<3h7JU8@%!mNeaz8<4DW+xh-%bmC`7MQ zG_;tmRE||FrCS3JcvsT#;1?_E=*HkL0&A#3SrfXBmQ?<-@;drpkl}hi!%zjoaUa8< z1%8RHut52&*H14K`}4Ao;XafO3zci&=df^I11ChkF6VMbP`aOf1^uOT-1`$*XpVY0 zf>xiXrp;)-R-qKM?W6vC{7iX}s;Mn#QL0c!L-+Utz$)mlQcWu>Em@VwUah*fit}A5 zlrLmatH@JZO`kz|EW4IG$afhUxfP4+TA|jWiCfX$Hwg7vp#rq7C|?yd7EzZ`w1{e? zCdt<;B}8exP<2wm25J`SS+UtdHw$Hzw+V|Z`|^*XxrN$=`nXUX)KyeMH*K@>A!4l< zm)nKfB2*9c2(?a1zlClQ>K=5^R_etcmk<-pKI#*yM||n0exbNmx6)qxvE~m&b_d-d z)J!jjL^ec2*iuw`GZ;lrkpXxT&`&S=?*%*&JOp^A@+0%&u$`k~ z=VM~?lfeIk{**Zi!(7>C0b`yg0T+6o0sIS*o)qaJk&cLTh4$l=Y{{E@DF-esu0_+7ygfwzX$$(k$zC&vchGr0s1{}13u&NDvRlPvGcNW1@K48 zSpSHJ;TkVn+auCZg}vQU_N3IPPMH~*HNQa)$MZV)wu&Nvj{^EBP|;j~rESzY%ai|Y zPG1|kCOt&21$HY6S=7-h>oKR5Ig}c!xLt9mpD3?+?<`P9>A526C(4UO)C?=2rZ%>QD)_!B;G62^CRNf@8%hVL?d=4t11NSaGSxD~qZ7N@PtH#j>#y&CgU7$)p_$ zHcP0p%7?M?II^=!$R93HRxhZr{j@Y)iZva|(!9Jx)1_F`p)AdXw&wgPt8^!y<)=eg zRu+|%?owR3Ls^=OOEg`IH66;*yrM+YrC8IUEX^xRG+l}{9m>*NQljZntm#me=2Ba8 z{*)CZC!ZB1hqA0JD=FQjxO9iIG?$lXx)f_Vl%=_%MAM~M)1fTQl_i=k#hMOfX|5{K zbSc(!C`&V3qUlns=}?wtZHcB!v8F>=nsp_bF2$O4m~$1H#vVApY& zu~<|VLG4!pE~8e!)wC7xdb$-bO2+_irW1gj^c3K&^c-Nn@P8MuU95G|e&p(=XK9yzYX9d0`oF5CWl!-rO?1NA6T7j#DbG6{@0y~A% zEx0ByE*xF(!vc>8=YGMb1U@F56M~--cv?7T1V1bAE#W90@x;TPggr;-N1m{UTc=j| ztA*bN{;l3N;kOIFQ}~16Kj|G5{-Ec1^yGRGY52=H~9~8bO{5<#v)x7ZY!apqhN$~$$ofQ70@TY`74gP_OY2i-` z|CI3G0RQI|ZwUVl;hz=0;(L}7fm(s>KK6gm_m><=!4C_Z5;!gVQ-YrrsNngkT?zYH zzgF;efl~tC5WZ5*I&I}*Q}9W_PYF({3Nl{_N?C$yf=>&6O7L){_*2O`dBG10&SwBV%xQkY<0s<# zV?1|S&{z3W;Qt={72tP+?*jf)Fi=(oJrDFNkW0aQ&v~mb|Cdn+yfV6sf`B#P1!#b- z0o;qZJ4hb@9>kOGTC5F&z$@`&yB2Fi3V1c8fiIve@C9T7$4LwD8afF4aykV3a>@f= zNcRC>NJoJ$qK^SzL>~vfgdPUIggym)DSaCFQu++=Wq9Vi2Jms<%jxsLm(v%4ub?jh zUx8=pwOD(;0(>QX75FN82KXxaI`A+}0}tbQb}i=izXM)N-vNFD=524DSKQ+3OckO2 z?sYT$Gaq;%9`1EBeNR+4dN>G>tBbZ^tuD>mODnMUm-6<~G09t6>I2v{%+yoi$xL3O z@K&Rho%}IcgEPRHwRmopFE`VOZO?trXgd$u*M}DOqkiRRzjCx&Iohin?NpBT zDM!1MV>hf~pQ~aAtDySD4uT3;*-$F& z%%xJ=P)Z+cpq|c5DuqImne^7=0W+6nW?xoMB;#-kc)Q4eY}NMbS=@Id4HLK9^r7~# zu@tLuUM+5BvJ>Dt;cBE!+jLXvWyDZ{TsCd&G4!m(k%~ZtE3z@xNLzF1_@GV0!)Qrd zdeVlerQ>?+wxl_-S4$-m9G;jJIm3~PNo2HQV((i?l!qKv6@c`llV%d$9dtX0Ek=#jqxa}3-D&CF`e4Z}ULySV#s)UV1V>YthK{hx@3nROALpPlsQ|O!!%J(xOmx<*Y%ZcaLhxlrvH~G{oxeoNkzQ z#@APJ;LM$3-mKHX%}j^u81V^_+e7dD!^6BrxIAaoa5?RUp^pxwCI*sbv7!XEIBaeX%dVd7H}$cB5p=iV5mz{% zWruaM5EfV9&TnZJkU`29XL0xU9W_?+V`(lC92=JFb z3UPCwTs^B}m2|SYB8S86t)(Yif!)!CZzhM5DfCKLI-@(2>5NOlY?+%mS|WC6@&1

RhPbyG%7?|3}IBZEtwQ(=3?5)Np_{vwUNNh7DF z`psM-nGpkhXd3P(kzGT-2VXGV>M7EBN_eWkkC4F+Gj4 zXfLPI)F7%of}{y*gIfL`N=}O6XaV z_;n50{e0ILmuNV`9_&83WgU9cW-}HWvU8TK9kOecUM6gwlP#8zuGFr)%YbVx!7I2$ zxxO=xxbJZd?I|>qr3i0?ozQe8wc#}Pz_>x9+E`D*a3uE7!>Vn~!FJ#b%)A%gCEC+7 zIz9JOgU++jCd{b@CjF*Z%*1zjPVty~bu9q{5stiJ_i^d|M;c1|D~bEI+km-I`1DopTd=4of^bon0C{ckRwxcCG!EaUO+^%y15Y zlevR#=QV$hA$g u{P45z_7MO}%(X*va4i?HW%EfjRq$i=R+&4lv{UEpJ#+R8JVk z^FS6XU^2wO$8=4vz$C*JKL4Vc38kj8d{NDZm74rv^{Fkf-(T<#ft%D%_?~|DVCI#S zdc(Iqb^BFaf4oe6;^aj0+Sk4`sJ^r8%fI}^l{J4RkNWs%!(Ve%IqYakjb7$gJ^lrw zU{xYDsTMnb3`BDPME-BeYVs#Tl?8M`{yCRlR?L6e<*P1QwV;r7(SrOF%7XmU3z>7u z1G_c(DTi4zi&^Cw3Ba9ANXwCKuVBp=Q2Cd<{+j%wV1<2hCV_8$*HN?b}>QqgduhMfZg#xPUKmk4OavyQg6RKjJXV6Oi1ZSXZ@oiacY-c9jeITyO z?8^JGdkh77chvAPXs!&9T>l>Oj>R3Cp`lwzX*Bavu4bi5?`b2zV zyrpSFbMw%~hUREXbCXWgr_il)mosC>9C4N-dxw1e+)wS)uh7o-XmIv37eB(SC+byb z`+Kxm{Lp4SH{<&&(#~Pcou`b*e5bf`1tPA{U6-_&nN>kx@_(dI{-c+)6lF|uc1g_7?B6&yrVlH0;F1`(q9=8{@F5Hb4kygCU!i@Mr1bM_ zGo`FX^xeY>edv-DR#esbo%x6hQKEwiUA}mC#5)SA!Un@xUh&ft1utgixa7AkMf}I@Z_ko4`jO!;1~|it)oU9n-e|459EBkdo{JS3HCmCFA*ri+cTmt2J@A;_u-CP z(It(IubgM|St(znX`z<>$Se_WFY#L?JVZR0Cz`Z+lkg@z{MG(me0357?55qodhiRa zouGRFw_3l}!uOtU|Jr(AXxVb!9rAb5e8Dt#%#y21cza31yWOq$t_P<)u$iWPlo7qF zB-a3>8n_1J8s7gVA$2~oy4ok1%(Ltg5!e0~KE@LTx_g8@5345b7 zCS^>3r-8yg7S}G+IEHV*J18Q4ncxqLH;xwr;20=dekK8Jw&&EOOJs5JYplfYi?v&i zrv=yUUf9i|L^lo%@UOm*xV4r+pCid0XK~jMJGW*RQ+@=$)JWlvuWRuPrqB-992Scl zxiOlM8V=(dClfkhq`Rd2T{fRvh0Ay1!ju)^_v(k$Zhf$yfpGYYK~A{$0qmbSL*2e&z<==+F%Ry45Qe)exSZ8~l@lV*%Y#vAIwqgop8Yz)(R8kO>3EF3Nv>yd*}bE3p2 ze!{E^^E;r{y55PR)0BudHdeRJvVeCmhRJUY=IKvko#aE=h91vlafWWw;AE|rczU8Q zn;gemiecTDr`4!qHH^!(gGDc%<8!th_#Pk?PBCn))9@C294}R~b>UnRPd&PUFz&-^ zQQfYT7+E)mH;(J;N_^k6t`Gz$Y+C2E(2U=RN+)_B{Pss+(E5$ui|@DZZ+~09hZ_73 DBfeLK literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/obj/Debug/net9.0/refint/OV_DB.IntegrationTests.dll b/OV_DB.IntegrationTests/obj/Debug/net9.0/refint/OV_DB.IntegrationTests.dll new file mode 100644 index 0000000000000000000000000000000000000000..780c8cac1c2648c325f6089388e631675c43ba28 GIT binary patch literal 16384 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

RhPbyG%7?|3}IBZEtwQ(=3?5)Np_{vwUNNh7DF z`psM-nGpkhXd3P(kzGT-2VXGV>M7EBN_eWkkC4F+Gj4 zXfLPI)F7%of}{y*gIfL`N=}O6XaV z_;n50{e0ILmuNV`9_&83WgU9cW-}HWvU8TK9kOecUM6gwlP#8zuGFr)%YbVx!7I2$ zxxO=xxbJZd?I|>qr3i0?ozQe8wc#}Pz_>x9+E`D*a3uE7!>Vn~!FJ#b%)A%gCEC+7 zIz9JOgU++jCd{b@CjF*Z%*1zjPVty~bu9q{5stiJ_i^d|M;c1|D~bEI+km-I`1DopTd=4of^bon0C{ckRwxcCG!EaUO+^%y15Y zlevR#=QV$hA$g u{P45z_7MO}%(X*va4i?HW%EfjRq$i=R+&4lv{UEpJ#+R8JVk z^FS6XU^2wO$8=4vz$C*JKL4Vc38kj8d{NDZm74rv^{Fkf-(T<#ft%D%_?~|DVCI#S zdc(Iqb^BFaf4oe6;^aj0+Sk4`sJ^r8%fI}^l{J4RkNWs%!(Ve%IqYakjb7$gJ^lrw zU{xYDsTMnb3`BDPME-BeYVs#Tl?8M`{yCRlR?L6e<*P1QwV;r7(SrOF%7XmU3z>7u z1G_c(DTi4zi&^Cw3Ba9ANXwCKuVBp=Q2Cd<{+j%wV1<2hCV_8$*HN?b}>QqgduhMfZg#xPUKmk4OavyQg6RKjJXV6Oi1ZSXZ@oiacY-c9jeITyO z?8^JGdkh77chvAPXs!&9T>l>Oj>R3Cp`lwzX*Bavu4bi5?`b2zV zyrpSFbMw%~hUREXbCXWgr_il)mosC>9C4N-dxw1e+)wS)uh7o-XmIv37eB(SC+byb z`+Kxm{Lp4SH{<&&(#~Pcou`b*e5bf`1tPA{U6-_&nN>kx@_(dI{-c+)6lF|uc1g_7?B6&yrVlH0;F1`(q9=8{@F5Hb4kygCU!i@Mr1bM_ zGo`FX^xeY>edv-DR#esbo%x6hQKEwiUA}mC#5)SA!Un@xUh&ft1utgixa7AkMf}I@Z_ko4`jO!;1~|it)oU9n-e|459EBkdo{JS3HCmCFA*ri+cTmt2J@A;_u-CP z(It(IubgM|St(znX`z<>$Se_WFY#L?JVZR0Cz`Z+lkg@z{MG(me0357?55qodhiRa zouGRFw_3l}!uOtU|Jr(AXxVb!9rAb5e8Dt#%#y21cza31yWOq$t_P<)u$iWPlo7qF zB-a3>8n_1J8s7gVA$2~oy4ok1%(Ltg5!e0~KE@LTx_g8@5345b7 zCS^>3r-8yg7S}G+IEHV*J18Q4ncxqLH;xwr;20=dekK8Jw&&EOOJs5JYplfYi?v&i zrv=yUUf9i|L^lo%@UOm*xV4r+pCid0XK~jMJGW*RQ+@=$)JWlvuWRuPrqB-992Scl zxiOlM8V=(dClfkhq`Rd2T{fRvh0Ay1!ju)^_v(k$Zhf$yfpGYYK~A{$0qmbSL*2e&z<==+F%Ry45Qe)exSZ8~l@lV*%Y#vAIwqgop8Yz)(R8kO>3EF3Nv>yd*}bE3p2 ze!{E^^E;r{y55PR)0BudHdeRJvVeCmhRJUY=IKvko#aE=h91vlafWWw;AE|rczU8Q zn;gemiecTDr`4!qHH^!(gGDc%<8!th_#Pk?PBCn))9@C294}R~b>UnRPd&PUFz&-^ zQQfYT7+E)mH;(J;N_^k6t`Gz$Y+C2E(2U=RN+)_B{Pss+(E5$ui|@DZZ+~09hZ_73 DBfeLK literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.dgspec.json b/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.dgspec.json new file mode 100644 index 00000000..478180df --- /dev/null +++ b/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.dgspec.json @@ -0,0 +1,416 @@ +{ + "format": 1, + "restore": { + "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj": {} + }, + "projects": { + "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj", + "projectName": "OVDB_database", + "projectPath": "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj", + "packagesPath": "C:\\Users\\jjasl\\.nuget\\packages\\", + "outputPath": "C:\\GIT\\OVDB\\OVDB_database\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\jjasl\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "Microsoft.EntityFrameworkCore.Design": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[9.0.7, )" + }, + "Microsoft.EntityFrameworkCore.SqlServer": { + "target": "Package", + "version": "[9.0.7, )" + }, + "Microsoft.EntityFrameworkCore.Sqlite": { + "target": "Package", + "version": "[9.0.7, )" + }, + "Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite": { + "target": "Package", + "version": "[9.0.8, )" + }, + "Microsoft.EntityFrameworkCore.Tools": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[9.0.7, )" + }, + "NetTopologySuite": { + "target": "Package", + "version": "[2.6.0, )" + }, + "Newtonsoft.Json": { + "target": "Package", + "version": "[13.0.3, )" + }, + "Pomelo.EntityFrameworkCore.MySql": { + "target": "Package", + "version": "[9.0.0-preview.3.efcore.9.0.0, )" + }, + "Pomelo.EntityFrameworkCore.MySql.Design": { + "target": "Package", + "version": "[1.1.2, )" + }, + "Pomelo.EntityFrameworkCore.MySql.NetTopologySuite": { + "target": "Package", + "version": "[9.0.0-preview.3.efcore.9.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.305/PortableRuntimeIdentifierGraph.json" + } + } + }, + "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj", + "projectName": "OV_DB.IntegrationTests", + "projectPath": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj", + "packagesPath": "C:\\Users\\jjasl\\.nuget\\packages\\", + "outputPath": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\jjasl\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj": { + "projectPath": "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj" + }, + "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj": { + "projectPath": "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "BCrypt.Net-Next": { + "target": "Package", + "version": "[4.0.3, )" + }, + "Bogus": { + "target": "Package", + "version": "[35.6.1, )" + }, + "Microsoft.AspNetCore.Mvc.Testing": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.12.0, )" + }, + "Pomelo.EntityFrameworkCore.MySql": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Respawn": { + "target": "Package", + "version": "[6.2.1, )" + }, + "Testcontainers": { + "target": "Package", + "version": "[3.10.0, )" + }, + "Testcontainers.MariaDb": { + "target": "Package", + "version": "[3.10.0, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[6.0.2, )" + }, + "xunit": { + "target": "Package", + "version": "[2.9.2, )" + }, + "xunit.runner.visualstudio": { + "target": "Package", + "version": "[2.8.2, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.305/PortableRuntimeIdentifierGraph.json" + } + } + }, + "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj", + "projectName": "OV_DB", + "projectPath": "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj", + "packagesPath": "C:\\Users\\jjasl\\.nuget\\packages\\", + "outputPath": "C:\\GIT\\OVDB\\OV_DB\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\jjasl\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj": { + "projectPath": "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "AutoMapper": { + "target": "Package", + "version": "[14.0.0, )" + }, + "ClosedXML": { + "target": "Package", + "version": "[0.105.0, )" + }, + "GeoCoordinate.NetStandard1": { + "target": "Package", + "version": "[1.0.1, )" + }, + "GeoJSON.Net": { + "target": "Package", + "version": "[1.4.1, )" + }, + "GeoTimeZone": { + "target": "Package", + "version": "[6.0.0, )" + }, + "Microsoft.AspNetCore.Authentication.JwtBearer": { + "target": "Package", + "version": "[9.0.7, )" + }, + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { + "target": "Package", + "version": "[9.0.7, )" + }, + "Microsoft.AspNetCore.OData": { + "target": "Package", + "version": "[9.3.2, )" + }, + "Microsoft.AspNetCore.SpaServices.Extensions": { + "target": "Package", + "version": "[9.0.7, )" + }, + "Microsoft.EntityFrameworkCore.Design": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[9.0.8, )" + }, + "Microsoft.Extensions.Caching.Memory": { + "target": "Package", + "version": "[9.0.8, )" + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "target": "Package", + "version": "[8.13.0, )" + }, + "Microsoft.VisualStudio.Web.CodeGeneration.Design": { + "target": "Package", + "version": "[9.0.0, )" + }, + "NWebsec.AspNetCore.Middleware": { + "target": "Package", + "version": "[3.0.0, )" + }, + "NetTopologySuite": { + "target": "Package", + "version": "[2.6.0, )" + }, + "NetTopologySuite.IO.GeoJSON": { + "target": "Package", + "version": "[4.0.0, )" + }, + "NetTopologySuite.IO.GeoJSON4STJ": { + "target": "Package", + "version": "[4.0.0, )" + }, + "SharpKml.Core": { + "target": "Package", + "version": "[6.1.0, )" + }, + "SixLabors.ImageSharp.Drawing": { + "target": "Package", + "version": "[2.1.6, )" + }, + "Swashbuckle.AspNetCore": { + "target": "Package", + "version": "[9.0.3, )" + }, + "System.Drawing.Common": { + "target": "Package", + "version": "[9.0.7, )" + }, + "System.IdentityModel.Tokens.Jwt": { + "target": "Package", + "version": "[8.13.0, )" + }, + "Telegram.Bot": { + "target": "Package", + "version": "[22.6.2, )" + }, + "Telegram.Bot.AspNetCore": { + "target": "Package", + "version": "[22.5.0, )" + }, + "TimeZoneConverter": { + "target": "Package", + "version": "[7.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.305/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.props b/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.props new file mode 100644 index 00000000..acf59a8b --- /dev/null +++ b/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.props @@ -0,0 +1,32 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\jjasl\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.14.0 + + + + + + + + + + + + + + + + + C:\Users\jjasl\.nuget\packages\xunit.analyzers\1.16.0 + C:\Users\jjasl\.nuget\packages\microsoft.extensions.apidescription.server\9.0.0 + C:\Users\jjasl\.nuget\packages\microsoft.codeanalysis.analyzers\3.3.4 + C:\Users\jjasl\.nuget\packages\microsoft.codeanalysis.analyzerutilities\3.3.0 + + \ No newline at end of file diff --git a/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.targets b/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.targets new file mode 100644 index 00000000..d4d96684 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/OV_DB.IntegrationTests.csproj.nuget.g.targets @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/OV_DB.IntegrationTests/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs new file mode 100644 index 00000000..feda5e9f --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs new file mode 100644 index 00000000..e44feef6 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("OV_DB.IntegrationTests")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+147eabaa03e0ca2c113420dc7c94688b7183984e")] +[assembly: System.Reflection.AssemblyProductAttribute("OV_DB.IntegrationTests")] +[assembly: System.Reflection.AssemblyTitleAttribute("OV_DB.IntegrationTests")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache new file mode 100644 index 00000000..db0497a5 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +409dd111e927e905e6456066ce1fcb0ecaaf2c9a4f16e55fc27492b151d83f30 diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..fd972cd5 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,23 @@ +is_global = true +build_property.TargetFramework = net9.0 +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = OV_DB.IntegrationTests +build_property.ProjectDir = C:\GIT\OVDB\OV_DB.IntegrationTests\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 9.0 +build_property.EnableCodeStyleSeverity = diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs new file mode 100644 index 00000000..2cd3d38c --- /dev/null +++ b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.GlobalUsings.g.cs @@ -0,0 +1,9 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; +global using global::Xunit; diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.assets.cache b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..cdf6875eb996f18d377e8a8a6da66f67dfd505fc GIT binary patch literal 234341 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 literal 0 HcmV?d00001 diff --git a/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.csproj.AssemblyReference.cache b/OV_DB.IntegrationTests/obj/Release/net9.0/OV_DB.IntegrationTests.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..804ad7d3cdaff33a2044e038ad67ba0c386b2a7e GIT binary patch literal 85708 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�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 4.0.3", + "Bogus >= 35.6.1", + "Microsoft.AspNetCore.Mvc.Testing >= 9.0.0", + "Microsoft.NET.Test.Sdk >= 17.12.0", + "OVDB_database >= 1.0.0", + "OV_DB >= 1.0.0", + "Pomelo.EntityFrameworkCore.MySql >= 9.0.0", + "Respawn >= 6.2.1", + "Testcontainers >= 3.10.0", + "Testcontainers.MariaDb >= 3.10.0", + "coverlet.collector >= 6.0.2", + "xunit >= 2.9.2", + "xunit.runner.visualstudio >= 2.8.2" + ] + }, + "packageFolders": { + "C:\\Users\\jjasl\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj", + "projectName": "OV_DB.IntegrationTests", + "projectPath": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj", + "packagesPath": "C:\\Users\\jjasl\\.nuget\\packages\\", + "outputPath": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\jjasl\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": { + "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj": { + "projectPath": "C:\\GIT\\OVDB\\OVDB_database\\OVDB_database.csproj" + }, + "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj": { + "projectPath": "C:\\GIT\\OVDB\\OV_DB\\OV_DB.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "BCrypt.Net-Next": { + "target": "Package", + "version": "[4.0.3, )" + }, + "Bogus": { + "target": "Package", + "version": "[35.6.1, )" + }, + "Microsoft.AspNetCore.Mvc.Testing": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.12.0, )" + }, + "Pomelo.EntityFrameworkCore.MySql": { + "target": "Package", + "version": "[9.0.0, )" + }, + "Respawn": { + "target": "Package", + "version": "[6.2.1, )" + }, + "Testcontainers": { + "target": "Package", + "version": "[3.10.0, )" + }, + "Testcontainers.MariaDb": { + "target": "Package", + "version": "[3.10.0, )" + }, + "coverlet.collector": { + "target": "Package", + "version": "[6.0.2, )" + }, + "xunit": { + "target": "Package", + "version": "[2.9.2, )" + }, + "xunit.runner.visualstudio": { + "target": "Package", + "version": "[2.8.2, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.305/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/OV_DB.IntegrationTests/obj/project.nuget.cache b/OV_DB.IntegrationTests/obj/project.nuget.cache new file mode 100644 index 00000000..b8252af1 --- /dev/null +++ b/OV_DB.IntegrationTests/obj/project.nuget.cache @@ -0,0 +1,331 @@ +{ + "version": 2, + "dgSpecHash": "cppIl+qXpT0=", + "success": true, + "projectFilePath": "C:\\GIT\\OVDB\\OV_DB.IntegrationTests\\OV_DB.IntegrationTests.csproj", + "expectedPackageFiles": [ + "C:\\Users\\jjasl\\.nuget\\packages\\automapper\\14.0.0\\automapper.14.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\azure.core\\1.38.0\\azure.core.1.38.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\azure.identity\\1.11.4\\azure.identity.1.11.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\bcrypt.net-next\\4.0.3\\bcrypt.net-next.4.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\bogus\\35.6.1\\bogus.35.6.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\closedxml\\0.105.0\\closedxml.0.105.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\closedxml.parser\\2.0.0\\closedxml.parser.2.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\coverlet.collector\\6.0.2\\coverlet.collector.6.0.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\docker.dotnet\\3.125.15\\docker.dotnet.3.125.15.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\docker.dotnet.x509\\3.125.15\\docker.dotnet.x509.3.125.15.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\documentformat.openxml\\3.1.1\\documentformat.openxml.3.1.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\documentformat.openxml.framework\\3.1.1\\documentformat.openxml.framework.3.1.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\excelnumberformat\\1.1.0\\excelnumberformat.1.1.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\geocoordinate.netstandard1\\1.0.1\\geocoordinate.netstandard1.1.0.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\geojson.net\\1.4.1\\geojson.net.1.4.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\geotimezone\\6.0.0\\geotimezone.6.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer\\2.14.1\\humanizer.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core\\2.14.1\\humanizer.core.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.af\\2.14.1\\humanizer.core.af.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ar\\2.14.1\\humanizer.core.ar.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.az\\2.14.1\\humanizer.core.az.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.bg\\2.14.1\\humanizer.core.bg.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.bn-bd\\2.14.1\\humanizer.core.bn-bd.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.cs\\2.14.1\\humanizer.core.cs.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.da\\2.14.1\\humanizer.core.da.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.de\\2.14.1\\humanizer.core.de.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.el\\2.14.1\\humanizer.core.el.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.es\\2.14.1\\humanizer.core.es.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.fa\\2.14.1\\humanizer.core.fa.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.fi-fi\\2.14.1\\humanizer.core.fi-fi.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.fr\\2.14.1\\humanizer.core.fr.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.fr-be\\2.14.1\\humanizer.core.fr-be.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.he\\2.14.1\\humanizer.core.he.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.hr\\2.14.1\\humanizer.core.hr.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.hu\\2.14.1\\humanizer.core.hu.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.hy\\2.14.1\\humanizer.core.hy.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.id\\2.14.1\\humanizer.core.id.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.is\\2.14.1\\humanizer.core.is.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.it\\2.14.1\\humanizer.core.it.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ja\\2.14.1\\humanizer.core.ja.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ko-kr\\2.14.1\\humanizer.core.ko-kr.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ku\\2.14.1\\humanizer.core.ku.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.lv\\2.14.1\\humanizer.core.lv.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ms-my\\2.14.1\\humanizer.core.ms-my.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.mt\\2.14.1\\humanizer.core.mt.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.nb\\2.14.1\\humanizer.core.nb.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.nb-no\\2.14.1\\humanizer.core.nb-no.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.nl\\2.14.1\\humanizer.core.nl.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.pl\\2.14.1\\humanizer.core.pl.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.pt\\2.14.1\\humanizer.core.pt.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ro\\2.14.1\\humanizer.core.ro.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.ru\\2.14.1\\humanizer.core.ru.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.sk\\2.14.1\\humanizer.core.sk.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.sl\\2.14.1\\humanizer.core.sl.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.sr\\2.14.1\\humanizer.core.sr.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.sr-latn\\2.14.1\\humanizer.core.sr-latn.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.sv\\2.14.1\\humanizer.core.sv.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.th-th\\2.14.1\\humanizer.core.th-th.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.tr\\2.14.1\\humanizer.core.tr.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.uk\\2.14.1\\humanizer.core.uk.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.uz-cyrl-uz\\2.14.1\\humanizer.core.uz-cyrl-uz.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.uz-latn-uz\\2.14.1\\humanizer.core.uz-latn-uz.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.vi\\2.14.1\\humanizer.core.vi.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.zh-cn\\2.14.1\\humanizer.core.zh-cn.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.zh-hans\\2.14.1\\humanizer.core.zh-hans.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\humanizer.core.zh-hant\\2.14.1\\humanizer.core.zh-hant.2.14.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.authentication.jwtbearer\\9.0.7\\microsoft.aspnetcore.authentication.jwtbearer.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.jsonpatch\\9.0.7\\microsoft.aspnetcore.jsonpatch.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.mvc.newtonsoftjson\\9.0.7\\microsoft.aspnetcore.mvc.newtonsoftjson.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.mvc.testing\\9.0.0\\microsoft.aspnetcore.mvc.testing.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.odata\\9.3.2\\microsoft.aspnetcore.odata.9.3.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.razor.language\\6.0.24\\microsoft.aspnetcore.razor.language.6.0.24.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.spaservices.extensions\\9.0.7\\microsoft.aspnetcore.spaservices.extensions.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.aspnetcore.testhost\\9.0.0\\microsoft.aspnetcore.testhost.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.bcl.asyncinterfaces\\8.0.0\\microsoft.bcl.asyncinterfaces.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.build\\17.10.4\\microsoft.build.17.10.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.build.framework\\17.10.4\\microsoft.build.framework.17.10.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.analyzers\\3.3.4\\microsoft.codeanalysis.analyzers.3.3.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.analyzerutilities\\3.3.0\\microsoft.codeanalysis.analyzerutilities.3.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.common\\4.8.0\\microsoft.codeanalysis.common.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.csharp\\4.8.0\\microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.csharp.features\\4.8.0\\microsoft.codeanalysis.csharp.features.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.csharp.workspaces\\4.8.0\\microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.elfie\\1.0.0\\microsoft.codeanalysis.elfie.1.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.features\\4.8.0\\microsoft.codeanalysis.features.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.razor\\6.0.24\\microsoft.codeanalysis.razor.6.0.24.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.scripting.common\\4.8.0\\microsoft.codeanalysis.scripting.common.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codeanalysis.workspaces.common\\4.8.0\\microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.codecoverage\\17.12.0\\microsoft.codecoverage.17.12.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.csharp\\4.7.0\\microsoft.csharp.4.7.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.data.sqlclient\\5.1.6\\microsoft.data.sqlclient.5.1.6.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.data.sqlclient.sni.runtime\\5.1.1\\microsoft.data.sqlclient.sni.runtime.5.1.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.data.sqlite.core\\9.0.8\\microsoft.data.sqlite.core.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.diasymreader\\2.0.0\\microsoft.diasymreader.2.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.dotnet.scaffolding.shared\\9.0.0\\microsoft.dotnet.scaffolding.shared.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore\\9.0.8\\microsoft.entityframeworkcore.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.abstractions\\9.0.8\\microsoft.entityframeworkcore.abstractions.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.analyzers\\9.0.8\\microsoft.entityframeworkcore.analyzers.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.relational\\9.0.8\\microsoft.entityframeworkcore.relational.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.relational.design\\1.1.1\\microsoft.entityframeworkcore.relational.design.1.1.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.sqlite\\9.0.7\\microsoft.entityframeworkcore.sqlite.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.sqlite.core\\9.0.8\\microsoft.entityframeworkcore.sqlite.core.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.sqlite.nettopologysuite\\9.0.8\\microsoft.entityframeworkcore.sqlite.nettopologysuite.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.entityframeworkcore.sqlserver\\9.0.7\\microsoft.entityframeworkcore.sqlserver.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.apidescription.server\\9.0.0\\microsoft.extensions.apidescription.server.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\9.0.8\\microsoft.extensions.caching.abstractions.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.caching.memory\\9.0.8\\microsoft.extensions.caching.memory.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration\\9.0.0\\microsoft.extensions.configuration.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\9.0.8\\microsoft.extensions.configuration.abstractions.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.binder\\9.0.0\\microsoft.extensions.configuration.binder.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.commandline\\9.0.0\\microsoft.extensions.configuration.commandline.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.environmentvariables\\9.0.0\\microsoft.extensions.configuration.environmentvariables.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\9.0.0\\microsoft.extensions.configuration.fileextensions.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.json\\9.0.0\\microsoft.extensions.configuration.json.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.configuration.usersecrets\\9.0.0\\microsoft.extensions.configuration.usersecrets.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\9.0.8\\microsoft.extensions.dependencyinjection.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\9.0.8\\microsoft.extensions.dependencyinjection.abstractions.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.dependencymodel\\9.0.8\\microsoft.extensions.dependencymodel.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.diagnostics\\9.0.0\\microsoft.extensions.diagnostics.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.diagnostics.abstractions\\9.0.0\\microsoft.extensions.diagnostics.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\9.0.7\\microsoft.extensions.fileproviders.abstractions.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\9.0.7\\microsoft.extensions.fileproviders.physical.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\9.0.7\\microsoft.extensions.filesystemglobbing.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.hosting\\9.0.0\\microsoft.extensions.hosting.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\9.0.0\\microsoft.extensions.hosting.abstractions.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging\\9.0.8\\microsoft.extensions.logging.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.8\\microsoft.extensions.logging.abstractions.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging.configuration\\9.0.0\\microsoft.extensions.logging.configuration.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging.console\\9.0.0\\microsoft.extensions.logging.console.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging.debug\\9.0.0\\microsoft.extensions.logging.debug.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging.eventlog\\9.0.0\\microsoft.extensions.logging.eventlog.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.logging.eventsource\\9.0.0\\microsoft.extensions.logging.eventsource.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.objectpool\\6.0.3\\microsoft.extensions.objectpool.6.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.options\\9.0.8\\microsoft.extensions.options.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.options.configurationextensions\\9.0.0\\microsoft.extensions.options.configurationextensions.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.extensions.primitives\\9.0.8\\microsoft.extensions.primitives.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identity.client\\4.61.3\\microsoft.identity.client.4.61.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identity.client.extensions.msal\\4.61.3\\microsoft.identity.client.extensions.msal.4.61.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identitymodel.abstractions\\8.13.0\\microsoft.identitymodel.abstractions.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\8.13.0\\microsoft.identitymodel.jsonwebtokens.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identitymodel.logging\\8.13.0\\microsoft.identitymodel.logging.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identitymodel.protocols\\8.13.0\\microsoft.identitymodel.protocols.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identitymodel.protocols.openidconnect\\8.13.0\\microsoft.identitymodel.protocols.openidconnect.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.identitymodel.tokens\\8.13.0\\microsoft.identitymodel.tokens.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.net.stringtools\\17.10.4\\microsoft.net.stringtools.17.10.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.net.test.sdk\\17.12.0\\microsoft.net.test.sdk.17.12.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.odata.core\\8.2.3\\microsoft.odata.core.8.2.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.odata.edm\\8.2.3\\microsoft.odata.edm.8.2.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.odata.modelbuilder\\2.0.0\\microsoft.odata.modelbuilder.2.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.openapi\\1.6.23\\microsoft.openapi.1.6.23.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.spatial\\8.2.3\\microsoft.spatial.8.2.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.sqlserver.server\\1.0.0\\microsoft.sqlserver.server.1.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.testplatform.objectmodel\\17.12.0\\microsoft.testplatform.objectmodel.17.12.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.testplatform.testhost\\17.12.0\\microsoft.testplatform.testhost.17.12.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegeneration\\9.0.0\\microsoft.visualstudio.web.codegeneration.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegeneration.core\\9.0.0\\microsoft.visualstudio.web.codegeneration.core.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegeneration.design\\9.0.0\\microsoft.visualstudio.web.codegeneration.design.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegeneration.entityframeworkcore\\9.0.0\\microsoft.visualstudio.web.codegeneration.entityframeworkcore.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegeneration.templating\\9.0.0\\microsoft.visualstudio.web.codegeneration.templating.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegeneration.utils\\9.0.0\\microsoft.visualstudio.web.codegeneration.utils.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.visualstudio.web.codegenerators.mvc\\9.0.0\\microsoft.visualstudio.web.codegenerators.mvc.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\microsoft.win32.systemevents\\9.0.7\\microsoft.win32.systemevents.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\mod_spatialite\\4.3.0.1\\mod_spatialite.4.3.0.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\mono.texttemplating\\3.0.0\\mono.texttemplating.3.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\mysqlconnector\\2.4.0\\mysqlconnector.2.4.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\netstandard.library\\1.6.1\\netstandard.library.1.6.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nettopologysuite\\2.6.0\\nettopologysuite.2.6.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nettopologysuite.features\\2.1.0\\nettopologysuite.features.2.1.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nettopologysuite.io.geojson\\4.0.0\\nettopologysuite.io.geojson.4.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nettopologysuite.io.geojson4stj\\4.0.0\\nettopologysuite.io.geojson4stj.4.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nettopologysuite.io.spatialite\\2.0.0\\nettopologysuite.io.spatialite.2.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\newtonsoft.json\\13.0.3\\newtonsoft.json.13.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\newtonsoft.json.bson\\1.0.2\\newtonsoft.json.bson.1.0.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.common\\6.11.0\\nuget.common.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.configuration\\6.11.0\\nuget.configuration.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.dependencyresolver.core\\6.11.0\\nuget.dependencyresolver.core.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.frameworks\\6.11.0\\nuget.frameworks.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.librarymodel\\6.11.0\\nuget.librarymodel.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.packaging\\6.11.0\\nuget.packaging.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.projectmodel\\6.11.0\\nuget.projectmodel.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.protocol\\6.11.0\\nuget.protocol.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nuget.versioning\\6.11.0\\nuget.versioning.6.11.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nwebsec.aspnetcore.core\\3.0.0\\nwebsec.aspnetcore.core.3.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\nwebsec.aspnetcore.middleware\\3.0.0\\nwebsec.aspnetcore.middleware.3.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\pomelo.entityframeworkcore.mysql\\9.0.0\\pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\pomelo.entityframeworkcore.mysql.design\\1.1.2\\pomelo.entityframeworkcore.mysql.design.1.1.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\pomelo.entityframeworkcore.mysql.nettopologysuite\\9.0.0-preview.3.efcore.9.0.0\\pomelo.entityframeworkcore.mysql.nettopologysuite.9.0.0-preview.3.efcore.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\rbush.signed\\4.0.0\\rbush.signed.4.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\respawn\\6.2.1\\respawn.6.2.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.native.system.io.compression\\4.3.0\\runtime.native.system.io.compression.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.native.system.net.http\\4.3.0\\runtime.native.system.net.http.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sharpkml.core\\6.1.0\\sharpkml.core.6.1.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sharpziplib\\1.4.2\\sharpziplib.1.4.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sixlabors.fonts\\2.1.3\\sixlabors.fonts.2.1.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sixlabors.imagesharp\\3.1.8\\sixlabors.imagesharp.3.1.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sixlabors.imagesharp.drawing\\2.1.6\\sixlabors.imagesharp.drawing.2.1.6.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sqlitepclraw.bundle_e_sqlite3\\2.1.10\\sqlitepclraw.bundle_e_sqlite3.2.1.10.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sqlitepclraw.core\\2.1.10\\sqlitepclraw.core.2.1.10.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sqlitepclraw.lib.e_sqlite3\\2.1.10\\sqlitepclraw.lib.e_sqlite3.2.1.10.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sqlitepclraw.provider.e_sqlite3\\2.1.10\\sqlitepclraw.provider.e_sqlite3.2.1.10.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\ssh.net\\2023.0.0\\ssh.net.2023.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\sshnet.security.cryptography\\1.3.0\\sshnet.security.cryptography.1.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\swashbuckle.aspnetcore\\9.0.3\\swashbuckle.aspnetcore.9.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\9.0.3\\swashbuckle.aspnetcore.swagger.9.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\swashbuckle.aspnetcore.swaggergen\\9.0.3\\swashbuckle.aspnetcore.swaggergen.9.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\swashbuckle.aspnetcore.swaggerui\\9.0.3\\swashbuckle.aspnetcore.swaggerui.9.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.appcontext\\4.3.0\\system.appcontext.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.clientmodel\\1.0.0\\system.clientmodel.1.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.codedom\\6.0.0\\system.codedom.6.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.collections.immutable\\8.0.0\\system.collections.immutable.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.componentmodel.annotations\\4.6.0\\system.componentmodel.annotations.4.6.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.composition\\7.0.0\\system.composition.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.composition.attributedmodel\\7.0.0\\system.composition.attributedmodel.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.composition.convention\\7.0.0\\system.composition.convention.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.composition.hosting\\7.0.0\\system.composition.hosting.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.composition.runtime\\7.0.0\\system.composition.runtime.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.composition.typedparts\\7.0.0\\system.composition.typedparts.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.0\\system.configuration.configurationmanager.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.console\\4.3.0\\system.console.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.data.datasetextensions\\4.5.0\\system.data.datasetextensions.4.5.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.diagnostics.diagnosticsource\\6.0.1\\system.diagnostics.diagnosticsource.6.0.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.diagnostics.eventlog\\9.0.0\\system.diagnostics.eventlog.9.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.drawing.common\\9.0.7\\system.drawing.common.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.formats.asn1\\9.0.7\\system.formats.asn1.9.0.7.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.globalization.calendars\\4.3.0\\system.globalization.calendars.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.13.0\\system.identitymodel.tokens.jwt.8.13.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io.compression\\4.3.0\\system.io.compression.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io.compression.zipfile\\4.3.0\\system.io.compression.zipfile.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io.packaging\\8.0.1\\system.io.packaging.8.0.1.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.io.pipelines\\7.0.0\\system.io.pipelines.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.linq.expressions\\4.3.0\\system.linq.expressions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.memory.data\\1.0.2\\system.memory.data.1.0.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.net.http\\4.3.0\\system.net.http.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.net.sockets\\4.3.0\\system.net.sockets.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.numerics.vectors\\4.5.0\\system.numerics.vectors.4.5.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.objectmodel\\4.3.0\\system.objectmodel.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.emit\\4.3.0\\system.reflection.emit.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.metadata\\8.0.0\\system.reflection.metadata.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.metadataloadcontext\\8.0.0\\system.reflection.metadataloadcontext.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.reflection.typeextensions\\4.3.0\\system.reflection.typeextensions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.caching\\6.0.0\\system.runtime.caching.6.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.interopservices.runtimeinformation\\4.3.0\\system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.runtime.numerics\\4.3.0\\system.runtime.numerics.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.algorithms\\4.3.0\\system.security.cryptography.algorithms.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.cng\\5.0.0\\system.security.cryptography.cng.5.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.csp\\4.3.0\\system.security.cryptography.csp.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.encoding\\4.3.0\\system.security.cryptography.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.openssl\\4.3.0\\system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.pkcs\\6.0.4\\system.security.cryptography.pkcs.6.0.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.cryptography.x509certificates\\4.3.0\\system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.security.principal.windows\\5.0.0\\system.security.principal.windows.5.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.text.encoding.codepages\\6.0.0\\system.text.encoding.codepages.6.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.text.encoding.extensions\\4.3.0\\system.text.encoding.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.text.encodings.web\\6.0.0\\system.text.encodings.web.6.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.text.json\\9.0.8\\system.text.json.9.0.8.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.threading.channels\\7.0.0\\system.threading.channels.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.threading.tasks.dataflow\\8.0.0\\system.threading.tasks.dataflow.8.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.4\\system.threading.tasks.extensions.4.5.4.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.threading.timer\\4.3.0\\system.threading.timer.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.xml.readerwriter\\4.3.0\\system.xml.readerwriter.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\system.xml.xdocument\\4.3.0\\system.xml.xdocument.4.3.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\telegram.bot\\22.6.2\\telegram.bot.22.6.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\telegram.bot.aspnetcore\\22.5.0\\telegram.bot.aspnetcore.22.5.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\testcontainers\\3.10.0\\testcontainers.3.10.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\testcontainers.mariadb\\3.10.0\\testcontainers.mariadb.3.10.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\timezoneconverter\\7.0.0\\timezoneconverter.7.0.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit\\2.9.2\\xunit.2.9.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.abstractions\\2.0.3\\xunit.abstractions.2.0.3.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.analyzers\\1.16.0\\xunit.analyzers.1.16.0.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.assert\\2.9.2\\xunit.assert.2.9.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.core\\2.9.2\\xunit.core.2.9.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.extensibility.core\\2.9.2\\xunit.extensibility.core.2.9.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.extensibility.execution\\2.9.2\\xunit.extensibility.execution.2.9.2.nupkg.sha512", + "C:\\Users\\jjasl\\.nuget\\packages\\xunit.runner.visualstudio\\2.8.2\\xunit.runner.visualstudio.2.8.2.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/OV_DB.Tests/Controllers/AdminControllerTests.cs b/OV_DB.Tests/Controllers/AdminControllerTests.cs new file mode 100644 index 00000000..d1c8d71b --- /dev/null +++ b/OV_DB.Tests/Controllers/AdminControllerTests.cs @@ -0,0 +1,135 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Moq; +using OV_DB.Controllers; +using OV_DB.Models; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class AdminControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly Mock _configurationMock; + private readonly AdminController _controller; + + public AdminControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _configurationMock = new Mock(); + + _controller = new AdminController(_context, _configurationMock.Object); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId, bool isAdmin = false) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()), + new Claim("admin", isAdmin.ToString().ToLower()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetAdministratorUsers_AsAdmin_ReturnsUserList() + { + // Arrange + var user1 = new User { Id = 1, Email = "user1@example.com", Guid = Guid.NewGuid(), IsAdmin = true }; + var user2 = new User { Id = 2, Email = "user2@example.com", Guid = Guid.NewGuid(), IsAdmin = false }; + + _context.Users.AddRange(user1, user2); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1, isAdmin: true); + + // Act + var result = await _controller.GetAdministratorUsers(); + + // Assert + var okResult = Assert.IsType(result); + var users = Assert.IsAssignableFrom>(okResult.Value); + Assert.Equal(2, users.Count); + } + + [Fact] + public async Task GetAdministratorUsers_AsNonAdmin_ReturnsForbid() + { + // Arrange + SetupControllerWithUser(1, isAdmin: false); + + // Act + var result = await _controller.GetAdministratorUsers(); + + // Assert + Assert.IsType(result); + } + + [Fact] + public async Task AddMissingGuidsForRoutes_AsAdmin_AddsGuids() + { + // Arrange + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + Share = Guid.Empty + }; + + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1, isAdmin: true); + + // Act + var result = await _controller.AddMissingGuidsForRoutes(); + + // Assert + Assert.IsType(result); + + var updatedRoute = await _context.Routes.FindAsync(1); + Assert.NotEqual(Guid.Empty, updatedRoute.Share); + } + + [Fact] + public async Task AddMissingGuidsForRoutes_AsNonAdmin_ReturnsForbid() + { + // Arrange + SetupControllerWithUser(1, isAdmin: false); + + // Act + var result = await _controller.AddMissingGuidsForRoutes(); + + // Assert + Assert.IsType(result); + } + } +} diff --git a/OV_DB.Tests/Controllers/AuthenticationControllerTests.cs b/OV_DB.Tests/Controllers/AuthenticationControllerTests.cs new file mode 100644 index 00000000..ddf52c91 --- /dev/null +++ b/OV_DB.Tests/Controllers/AuthenticationControllerTests.cs @@ -0,0 +1,296 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Moq; +using OV_DB.Controllers; +using OV_DB.Models; +using OVDB_database.Database; +using OVDB_database.Models; +using System.Security.Claims; + +namespace OV_DB.Tests.Controllers +{ + public class AuthenticationControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly Mock _configurationMock; + private readonly AuthenticationController _controller; + private readonly PasswordHasher _passwordHasher; + + public AuthenticationControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _configurationMock = new Mock(); + + // Setup JWT configuration + _configurationMock.Setup(c => c["JWTSigningKey"]).Returns("ThisIsAVeryLongSecretKeyForJWTTokenGenerationWithAtLeast256Bits"); + _configurationMock.Setup(c => c["Tokens:ValidityInMinutes"]).Returns("60"); + _configurationMock.Setup(c => c["Tokens:Issuer"]).Returns("OVDB"); + + _controller = new AuthenticationController(_configurationMock.Object, _context); + _passwordHasher = new PasswordHasher(); + } + + public void Dispose() + { + _context?.Dispose(); + } + + [Fact] + public async Task LoginAsync_WithValidCredentials_ReturnsToken() + { + // Arrange + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + IsAdmin = false + }; + user.Password = _passwordHasher.HashPassword(user, "Password123!"); + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + var loginRequest = new LoginRequest + { + Email = "test@example.com", + Password = "Password123!" + }; + + // Act + var result = await _controller.LoginAsync(loginRequest); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + Assert.NotNull(okResult.Value.Token); + } + + [Fact] + public async Task LoginAsync_WithInvalidPassword_ReturnsForbid() + { + // Arrange + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + IsAdmin = false + }; + user.Password = _passwordHasher.HashPassword(user, "Password123!"); + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + var loginRequest = new LoginRequest + { + Email = "test@example.com", + Password = "WrongPassword" + }; + + // Act + var result = await _controller.LoginAsync(loginRequest); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task LoginAsync_WithNonExistentUser_ReturnsForbid() + { + // Arrange + var loginRequest = new LoginRequest + { + Email = "nonexistent@example.com", + Password = "Password123!" + }; + + // Act + var result = await _controller.LoginAsync(loginRequest); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task LoginAsync_WithEmptyEmail_ReturnsUnauthorized() + { + // Arrange + var loginRequest = new LoginRequest + { + Email = "", + Password = "Password123!" + }; + + // Act + var result = await _controller.LoginAsync(loginRequest); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task LoginAsync_WithEmptyPassword_ReturnsUnauthorized() + { + // Arrange + var loginRequest = new LoginRequest + { + Email = "test@example.com", + Password = "" + }; + + // Act + var result = await _controller.LoginAsync(loginRequest); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task LoginAsync_UpdatesLastLogin() + { + // Arrange + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + IsAdmin = false, + LastLogin = DateTime.UtcNow.AddDays(-10) + }; + user.Password = _passwordHasher.HashPassword(user, "Password123!"); + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + var oldLastLogin = user.LastLogin; + + var loginRequest = new LoginRequest + { + Email = "test@example.com", + Password = "Password123!" + }; + + // Act + await _controller.LoginAsync(loginRequest); + + // Assert + var updatedUser = await _context.Users.FindAsync(1); + Assert.NotNull(updatedUser); + Assert.True(updatedUser.LastLogin > oldLastLogin); + } + + [Fact] + public async Task RegisterUserAsync_WithValidData_CreatesUser() + { + // Arrange + var createAccount = new CreateAccount + { + Email = "newuser@example.com", + Password = "ValidPassword123!" + }; + + // Act + var result = await _controller.RegisterUserAsync(createAccount); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + Assert.NotNull(okResult.Value.Token); + + var user = await _context.Users.FirstOrDefaultAsync(u => u.Email == "newuser@example.com"); + Assert.NotNull(user); + Assert.NotEmpty(user.Maps); // Should have default map + } + + [Fact] + public async Task RegisterUserAsync_WithShortPassword_ReturnsBadRequest() + { + // Arrange + var createAccount = new CreateAccount + { + Email = "newuser@example.com", + Password = "Short1!" + }; + + // Act + var result = await _controller.RegisterUserAsync(createAccount); + + // Assert + var badRequestResult = Assert.IsType(result.Result); + Assert.Equal("Wachtwoord te kort", badRequestResult.Value); + } + + [Fact] + public async Task RegisterUserAsync_WithExistingEmail_ReturnsBadRequest() + { + // Arrange + var existingUser = new User + { + Email = "existing@example.com", + Guid = Guid.NewGuid() + }; + existingUser.Password = _passwordHasher.HashPassword(existingUser, "Password123!"); + _context.Users.Add(existingUser); + await _context.SaveChangesAsync(); + + var createAccount = new CreateAccount + { + Email = "existing@example.com", + Password = "NewPassword123!" + }; + + // Act + var result = await _controller.RegisterUserAsync(createAccount); + + // Assert + var badRequestResult = Assert.IsType(result.Result); + Assert.Equal("Mailadres wordt al gebruikt", badRequestResult.Value); + } + + [Fact] + public async Task RefreshTokenAsync_WithValidUser_ReturnsNewToken() + { + // Arrange + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + IsAdmin = false, + LastLogin = DateTime.UtcNow.AddHours(-1) + }; + user.Password = _passwordHasher.HashPassword(user, "Password123!"); + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, "1"), + new Claim("email", "test@example.com"), + new Claim("admin", "false") + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + + var request = new RefreshTokenRequest { RefreshToken = "old-token" }; + + // Act + var result = await _controller.RefreshTokenAsync(request); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + Assert.NotNull(okResult.Value.Token); + } + } +} diff --git a/OV_DB.Tests/Controllers/MapFilterControllerTests.cs b/OV_DB.Tests/Controllers/MapFilterControllerTests.cs new file mode 100644 index 00000000..2d95d148 --- /dev/null +++ b/OV_DB.Tests/Controllers/MapFilterControllerTests.cs @@ -0,0 +1,126 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using OV_DB.Controllers; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class MapFilterControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly MapFilterController _controller; + + public MapFilterControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _controller = new MapFilterController(_context); + } + + public void Dispose() + { + _context?.Dispose(); + } + + [Fact] + public async Task GetYearsAsync_WithValidMap_ReturnsYears() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } } + }; + var instance1 = new RouteInstance { RouteInstanceId = 1, RouteId = 1, Route = route, Date = new DateTime(2023, 1, 1) }; + var instance2 = new RouteInstance { RouteInstanceId = 2, RouteId = 1, Route = route, Date = new DateTime(2024, 1, 1) }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + _context.RouteInstances.AddRange(instance1, instance2); + await _context.SaveChangesAsync(); + + // Act + var result = await _controller.GetYearsAsync(map.MapGuid.ToString()); + + // Assert + var okResult = Assert.IsType(result.Result); + var years = Assert.IsAssignableFrom>(okResult.Value); + Assert.Contains(2023, years); + Assert.Contains(2024, years); + } + + [Fact] + public async Task GetYearsAsync_WithInvalidMap_ReturnsNotFound() + { + // Arrange + var invalidGuid = Guid.NewGuid(); + + // Act + var result = await _controller.GetYearsAsync(invalidGuid.ToString()); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task GetTypesAsync_WithValidMap_ReturnsRouteTypes() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1, OrderNr = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } } + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + await _context.SaveChangesAsync(); + + // Act + var result = await _controller.GetTypesAsync(map.MapGuid.ToString()); + + // Assert + var types = Assert.IsAssignableFrom>(result.Value); + Assert.Single(types); + Assert.Equal("Train", types[0].Name); + } + + [Fact] + public async Task GetTypesAsync_WithInvalidMap_ReturnsNotFound() + { + // Arrange + var invalidGuid = Guid.NewGuid(); + + // Act + var result = await _controller.GetTypesAsync(invalidGuid.ToString()); + + // Assert + Assert.IsType(result.Result); + } + } +} diff --git a/OV_DB.Tests/Controllers/MapsControllerTests.cs b/OV_DB.Tests/Controllers/MapsControllerTests.cs new file mode 100644 index 00000000..680e0238 --- /dev/null +++ b/OV_DB.Tests/Controllers/MapsControllerTests.cs @@ -0,0 +1,132 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using OV_DB.Controllers; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class MapsControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly MapsController _controller; + + public MapsControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _controller = new MapsController(_context); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetMaps_WithValidUser_ReturnsUserMaps() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var maps = new List + { + new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Map 1", UserId = 1, User = user, OrderNr = 1 }, + new Map { MapId = 2, MapGuid = Guid.NewGuid(), Name = "Map 2", UserId = 1, User = user, OrderNr = 2 } + }; + + _context.Users.Add(user); + _context.Maps.AddRange(maps); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMaps(); + + // Assert + var mapList = Assert.IsAssignableFrom>(result.Value); + Assert.Equal(2, mapList.Count()); + Assert.All(mapList, m => Assert.Equal(1, m.UserId)); + } + + [Fact] + public async Task GetMap_WithValidId_ReturnsMap() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + + _context.Users.Add(user); + _context.Maps.Add(map); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMap(1); + + // Assert + var mapValue = Assert.IsType(result.Value); + Assert.Equal("Test Map", mapValue.Name); + } + + [Fact] + public async Task GetMap_WithInvalidId_ReturnsNotFound() + { + // Arrange + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMap(999); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task GetMap_OtherUsersMap_ReturnsNotFound() + { + // Arrange + var user1 = new User { Id = 1, Email = "user1@example.com", Guid = Guid.NewGuid() }; + var user2 = new User { Id = 2, Email = "user2@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "User2 Map", UserId = 2, User = user2 }; + + _context.Users.AddRange(user1, user2); + _context.Maps.Add(map); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMap(1); + + // Assert + Assert.IsType(result.Result); + } + } +} diff --git a/OV_DB.Tests/Controllers/RequestsControllerTests.cs b/OV_DB.Tests/Controllers/RequestsControllerTests.cs new file mode 100644 index 00000000..941e424a --- /dev/null +++ b/OV_DB.Tests/Controllers/RequestsControllerTests.cs @@ -0,0 +1,138 @@ +using AutoMapper; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using OV_DB.Controllers; +using OV_DB.Mappings; +using OV_DB.Models; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class RequestsControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly IMapper _mapper; + private readonly RequestsController _controller; + + public RequestsControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + + var config = new MapperConfiguration(cfg => cfg.AddProfile()); + _mapper = config.CreateMapper(); + + _controller = new RequestsController(_context, _mapper); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId, bool isAdmin = false) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()), + new Claim("admin", isAdmin.ToString().ToLower()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetUserRequests_WithValidUser_ReturnsRequests() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var request1 = new Request { Id = 1, UserId = 1, Message = "Request 1", Created = DateTime.Now, User = user }; + var request2 = new Request { Id = 2, UserId = 1, Message = "Request 2", Created = DateTime.Now, User = user }; + + _context.Users.Add(user); + _context.Requests.AddRange(request1, request2); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetUserRequests(); + + // Assert + var okResult = Assert.IsType(result); + var requests = Assert.IsAssignableFrom>(okResult.Value); + Assert.Equal(2, requests.Count); + } + + [Fact] + public async Task GetAdminRequests_AsAdmin_ReturnsAllRequests() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var request = new Request { Id = 1, UserId = 1, Message = "Request", Created = DateTime.Now, User = user }; + + _context.Users.Add(user); + _context.Requests.Add(request); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1, isAdmin: true); + + // Act + var result = await _controller.GetAdminRequests(); + + // Assert + var okResult = Assert.IsType(result); + var requests = Assert.IsAssignableFrom>(okResult.Value); + Assert.Single(requests); + } + + [Fact] + public async Task GetAdminRequests_AsNonAdmin_ReturnsForbid() + { + // Arrange + SetupControllerWithUser(1, isAdmin: false); + + // Act + var result = await _controller.GetAdminRequests(); + + // Assert + Assert.IsType(result); + } + + [Fact] + public async Task CreateRequest_WithValidData_CreatesRequest() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + var createDto = new CreateRequestDTO { Message = "New request" }; + + // Act + var result = await _controller.CreateRequest(createDto); + + // Assert + Assert.IsType(result); + Assert.Single(await _context.Requests.ToListAsync()); + } + } +} diff --git a/OV_DB.Tests/Controllers/RouteTypesControllerTests.cs b/OV_DB.Tests/Controllers/RouteTypesControllerTests.cs new file mode 100644 index 00000000..e00a805f --- /dev/null +++ b/OV_DB.Tests/Controllers/RouteTypesControllerTests.cs @@ -0,0 +1,78 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using AutoMapper; +using OV_DB.Controllers; +using OV_DB.Mappings; +using OVDB_database.Database; +using OVDB_database.Models; +using System.Security.Claims; + +namespace OV_DB.Tests.Controllers +{ + public class RouteTypesControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly IMapper _mapper; + private readonly RouteTypesController _controller; + + public RouteTypesControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + + var mapperConfig = new MapperConfiguration(cfg => + { + cfg.AddProfile(); + }); + _mapper = mapperConfig.CreateMapper(); + + _controller = new RouteTypesController(_context); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetRouteTypes_WithValidUser_ReturnsRouteTypes() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var routeType1 = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var routeType2 = new RouteType { TypeId = 2, Name = "Bus", NameNL = "Bus", Colour = "#00FF00", UserId = 1 }; + + _context.Users.Add(user); + _context.RouteTypes.AddRange(routeType1, routeType2); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetRouteTypes(); + + // Assert + var routeTypes = Assert.IsAssignableFrom>(result.Value); + Assert.Equal(2, routeTypes.Count()); + } + } +} diff --git a/OV_DB.Tests/Controllers/RoutesControllerTests.cs b/OV_DB.Tests/Controllers/RoutesControllerTests.cs new file mode 100644 index 00000000..cbc7097c --- /dev/null +++ b/OV_DB.Tests/Controllers/RoutesControllerTests.cs @@ -0,0 +1,267 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using AutoMapper; +using Moq; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using OV_DB.Controllers; +using OV_DB.Mappings; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; +using System.Security.Claims; + +namespace OV_DB.Tests.Controllers +{ + public class RoutesControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly IMapper _mapper; + private readonly Mock _routeRegionsServiceMock; + private readonly Mock _timezoneServiceMock; + private readonly RoutesController _controller; + private readonly GeometryFactory _geometryFactory; + + public RoutesControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + + var mapperConfig = new MapperConfiguration(cfg => + { + cfg.AddProfile(); + }); + _mapper = mapperConfig.CreateMapper(); + + _routeRegionsServiceMock = new Mock(); + _timezoneServiceMock = new Mock(); + + _controller = new RoutesController( + _context, + _mapper, + _routeRegionsServiceMock.Object, + _timezoneServiceMock.Object); + + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetRoutes_WithValidUser_ReturnsRoutes() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 10, + LineString = lineString, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } }, + RouteInstances = new List() + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetRoutes(null, null, null, null, null, CancellationToken.None); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task GetRoutes_WithFilter_FiltersResults() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }); + + var route1 = new Route + { + RouteId = 1, + Name = "Amsterdam - Utrecht", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 10, + LineString = lineString, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } }, + RouteInstances = new List() + }; + + var route2 = new Route + { + RouteId = 2, + Name = "Rotterdam - Den Haag", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 15, + LineString = lineString, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 2 } }, + RouteInstances = new List() + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.AddRange(route1, route2); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetRoutes(null, null, null, null, "Amsterdam", CancellationToken.None); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task GetRoutes_WithSorting_SortsCorrectly() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }); + + var route1 = new Route + { + RouteId = 1, + Name = "B Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 10, + LineString = lineString, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } }, + RouteInstances = new List() + }; + + var route2 = new Route + { + RouteId = 2, + Name = "A Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 15, + LineString = lineString, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 2 } }, + RouteInstances = new List() + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.AddRange(route1, route2); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetRoutes(null, null, "name", false, null, CancellationToken.None); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task GetRoutes_WithPagination_ReturnsCorrectPage() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }); + + for (int i = 1; i <= 10; i++) + { + var route = new Route + { + RouteId = i, + Name = $"Route {i}", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 10, + LineString = lineString, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = i } }, + RouteInstances = new List() + }; + _context.Routes.Add(route); + } + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetRoutes(0, 5, null, null, null, CancellationToken.None); + + // Assert + var okResult = Assert.IsType>(result); + Assert.NotNull(okResult.Value); + } + } +} diff --git a/OV_DB.Tests/Controllers/StationMapsControllerTests.cs b/OV_DB.Tests/Controllers/StationMapsControllerTests.cs new file mode 100644 index 00000000..52b390e6 --- /dev/null +++ b/OV_DB.Tests/Controllers/StationMapsControllerTests.cs @@ -0,0 +1,165 @@ +using AutoMapper; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using OV_DB.Controllers; +using OV_DB.Mappings; +using OV_DB.Models; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class StationMapsControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly IMapper _mapper; + private readonly StationMapsController _controller; + + public StationMapsControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + + var config = new MapperConfiguration(cfg => cfg.AddProfile()); + _mapper = config.CreateMapper(); + + _controller = new StationMapsController(_context, _mapper); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetMaps_WithValidUser_ReturnsStationMaps() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var stationMap1 = new StationGrouping + { + Id = 1, + Name = "Map 1", + NameNL = "Kaart 1", + UserId = 1, + User = user, + OrderNr = 1 + }; + var stationMap2 = new StationGrouping + { + Id = 2, + Name = "Map 2", + NameNL = "Kaart 2", + UserId = 1, + User = user, + OrderNr = 2 + }; + + _context.Users.Add(user); + _context.StationGroupings.AddRange(stationMap1, stationMap2); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMaps(); + + // Assert + var stationMaps = Assert.IsAssignableFrom>(result.Value); + Assert.Equal(2, stationMaps.Count); + } + + [Fact] + public async Task GetMap_WithValidId_ReturnsStationMap() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var stationMap = new StationGrouping + { + Id = 1, + Name = "Test Map", + NameNL = "Test Kaart", + UserId = 1, + User = user + }; + + _context.Users.Add(user); + _context.StationGroupings.Add(stationMap); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMap(1); + + // Assert + var mapDto = Assert.IsType(result.Value); + Assert.Equal("Test Map", mapDto.Name); + } + + [Fact] + public async Task GetMap_WithInvalidId_ReturnsNotFound() + { + // Arrange + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMap(999); + + // Assert + Assert.IsType(result.Result); + } + + [Fact] + public async Task GetMap_OtherUsersMap_ReturnsNotFound() + { + // Arrange + var user1 = new User { Id = 1, Email = "user1@example.com", Guid = Guid.NewGuid() }; + var user2 = new User { Id = 2, Email = "user2@example.com", Guid = Guid.NewGuid() }; + var stationMap = new StationGrouping + { + Id = 1, + Name = "User2 Map", + UserId = 2, + User = user2 + }; + + _context.Users.AddRange(user1, user2); + _context.StationGroupings.Add(stationMap); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetMap(1); + + // Assert + Assert.IsType(result.Result); + } + } +} diff --git a/OV_DB.Tests/Controllers/StatsControllerTests.cs b/OV_DB.Tests/Controllers/StatsControllerTests.cs new file mode 100644 index 00000000..871e0162 --- /dev/null +++ b/OV_DB.Tests/Controllers/StatsControllerTests.cs @@ -0,0 +1,220 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Moq; +using OV_DB.Controllers; +using OVDB_database.Database; +using OVDB_database.Models; +using System.Security.Claims; + +namespace OV_DB.Tests.Controllers +{ + public class StatsControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly StatsController _controller; + + public StatsControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _controller = new StatsController(_context); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetStats_WithValidData_ReturnsStats() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 100, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } } + }; + var routeInstance = new RouteInstance + { + RouteInstanceId = 1, + RouteId = 1, + Route = route, + Date = new DateTime(2025, 1, 15) + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + _context.RouteInstances.Add(routeInstance); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetStats(map.MapGuid, null); + + // Assert + var okResult = Assert.IsType(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task GetStats_WithYearFilter_FiltersCorrectly() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 100, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } } + }; + + var instance2024 = new RouteInstance + { + RouteInstanceId = 1, + RouteId = 1, + Route = route, + Date = new DateTime(2024, 6, 15) + }; + + var instance2025 = new RouteInstance + { + RouteInstanceId = 2, + RouteId = 1, + Route = route, + Date = new DateTime(2025, 1, 15) + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + _context.RouteInstances.AddRange(instance2024, instance2025); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetStats(map.MapGuid, 2025); + + // Assert + var okResult = Assert.IsType(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task GetTimedStats_WithValidData_ReturnsTimedStats() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 100, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } } + }; + var routeInstance = new RouteInstance + { + RouteInstanceId = 1, + RouteId = 1, + Route = route, + Date = new DateTime(2025, 1, 15) + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + _context.RouteInstances.Add(routeInstance); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetTimedStats(map.MapGuid, null, "en"); + + // Assert + var okResult = Assert.IsType(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task GetTimedStats_WithDutchLanguage_UsesNLNames() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + CalculatedDistance = 100, + RouteMaps = new List { new RouteMap { MapId = 1, Map = map, RouteId = 1 } } + }; + var routeInstance = new RouteInstance + { + RouteInstanceId = 1, + RouteId = 1, + Route = route, + Date = new DateTime(2025, 1, 15) + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + _context.RouteInstances.Add(routeInstance); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetTimedStats(map.MapGuid, null, "nl"); + + // Assert + var okResult = Assert.IsType(result); + Assert.NotNull(okResult.Value); + } + } +} diff --git a/OV_DB.Tests/Controllers/TraewellingControllerTests.cs b/OV_DB.Tests/Controllers/TraewellingControllerTests.cs new file mode 100644 index 00000000..73e0885b --- /dev/null +++ b/OV_DB.Tests/Controllers/TraewellingControllerTests.cs @@ -0,0 +1,142 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using Moq; +using OV_DB.Controllers; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class TraewellingControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly Mock _trawellingServiceMock; + private readonly Mock> _loggerMock; + private readonly TraewellingController _controller; + + public TraewellingControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _trawellingServiceMock = new Mock(); + _loggerMock = new Mock>(); + + _controller = new TraewellingController( + _trawellingServiceMock.Object, + _context, + _loggerMock.Object); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public void GetConnectUrl_WithValidUser_ReturnsAuthUrl() + { + // Arrange + SetupControllerWithUser(1); + + _trawellingServiceMock + .Setup(s => s.GenerateAndStoreState(1)) + .Returns("test-state"); + + _trawellingServiceMock + .Setup(s => s.GetAuthorizationUrl(1, "test-state")) + .Returns("https://traewelling.de/oauth/authorize?state=test-state"); + + // Act + var result = _controller.GetConnectUrl(); + + // Assert + var okResult = Assert.IsType(result); + Assert.NotNull(okResult.Value); + } + + [Fact] + public async Task Disconnect_WithValidUser_DisconnectsAccount() + { + // Arrange + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + TrawellingAccessToken = "token", + TrawellingRefreshToken = "refresh" + }; + + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.DisconnectAccount(); + + // Assert + Assert.IsType(result); + + var updatedUser = await _context.Users.FindAsync(1); + Assert.NotNull(updatedUser); + Assert.Null(updatedUser.TrawellingAccessToken); + Assert.Null(updatedUser.TrawellingRefreshToken); + } + + [Fact] + public async Task GetConnectionStatus_WithConnectedUser_ReturnsStatus() + { + // Arrange + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + TrawellingAccessToken = "token" + }; + + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + _trawellingServiceMock + .Setup(s => s.HasValidTokens(It.IsAny())) + .Returns(true); + + // Act + var result = await _controller.GetConnectionStatus(); + + // Assert + var okResult = Assert.IsType(result); + Assert.NotNull(okResult.Value); + } + } +} diff --git a/OV_DB.Tests/Controllers/TripReportControllerTests.cs b/OV_DB.Tests/Controllers/TripReportControllerTests.cs new file mode 100644 index 00000000..a418fabb --- /dev/null +++ b/OV_DB.Tests/Controllers/TripReportControllerTests.cs @@ -0,0 +1,119 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using OV_DB.Controllers; +using OV_DB.Models; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Controllers +{ + public class TripReportControllerTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly TripReportController _controller; + + public TripReportControllerTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _controller = new TripReportController(_context); + } + + public void Dispose() + { + _context?.Dispose(); + } + + private void SetupControllerWithUser(int userId) + { + var claims = new List + { + new Claim(ClaimTypes.NameIdentifier, userId.ToString()) + }; + var identity = new ClaimsIdentity(claims, "TestAuthType"); + var claimsPrincipal = new ClaimsPrincipal(identity); + + _controller.ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext { User = claimsPrincipal } + }; + } + + [Fact] + public async Task GetTripReport_WithValidData_ReturnsExcelFile() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + NameNL = "Test Route NL", + RouteTypeId = 1, + RouteType = routeType, + From = "Amsterdam", + To = "Rotterdam", + CalculatedDistance = 100 + }; + var routeMap = new RouteMap { MapId = 1, Map = map, RouteId = 1, Route = route }; + route.RouteMaps = new List { routeMap }; + + var routeInstance = new RouteInstance + { + RouteInstanceId = 1, + RouteId = 1, + Route = route, + Date = new DateTime(2025, 1, 15) + }; + + _context.Users.Add(user); + _context.Maps.Add(map); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + _context.RouteInstances.Add(routeInstance); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetTripReport(new List { map.MapGuid }, 2025, false); + + // Assert + var fileResult = Assert.IsType(result); + Assert.Equal("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileResult.ContentType); + } + + [Fact] + public async Task GetTripReport_WithEnglish_ReturnsEnglishExcel() + { + // Arrange + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + var map = new Map { MapId = 1, MapGuid = Guid.NewGuid(), Name = "Test Map", UserId = 1, User = user }; + + _context.Users.Add(user); + _context.Maps.Add(map); + await _context.SaveChangesAsync(); + + SetupControllerWithUser(1); + + // Act + var result = await _controller.GetTripReport(new List { map.MapGuid }, 2025, true); + + // Assert + var fileResult = Assert.IsType(result); + Assert.NotNull(fileResult.FileContents); + } + } +} diff --git a/OV_DB.Tests/Helpers/DistanceCalculationHelperTests.cs b/OV_DB.Tests/Helpers/DistanceCalculationHelperTests.cs new file mode 100644 index 00000000..84b39b32 --- /dev/null +++ b/OV_DB.Tests/Helpers/DistanceCalculationHelperTests.cs @@ -0,0 +1,91 @@ +using OV_DB.Helpers; +using OVDB_database.Models; +using NetTopologySuite.Geometries; +using NetTopologySuite; + +namespace OV_DB.Tests.Helpers +{ + public class DistanceCalculationHelperTests + { + [Fact] + public void ComputeDistance_WithSimpleLine_CalculatesCorrectDistance() + { + // Arrange + var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + var coords = new Coordinate[] + { + new Coordinate(4.9041, 52.3676), // Amsterdam + new Coordinate(2.3522, 48.8566) // Paris - approximately 430 km + }; + var lineString = geometryFactory.CreateLineString(coords); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + LineString = lineString + }; + + // Act + DistanceCalculationHelper.ComputeDistance(route); + + // Assert + Assert.True(route.CalculatedDistance > 0); + Assert.True(route.CalculatedDistance > 400 && route.CalculatedDistance < 500); // Approximately 430 km + } + + [Fact] + public void ComputeDistance_WithMultipleSegments_CalculatesCorrectDistance() + { + // Arrange + var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + var coords = new Coordinate[] + { + new Coordinate(4.9041, 52.3676), // Amsterdam + new Coordinate(4.3517, 50.8503), // Brussels + new Coordinate(2.3522, 48.8566) // Paris + }; + var lineString = geometryFactory.CreateLineString(coords); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + LineString = lineString + }; + + // Act + DistanceCalculationHelper.ComputeDistance(route); + + // Assert + Assert.True(route.CalculatedDistance > 0); + Assert.True(route.CalculatedDistance > 400); // Total distance should be over 400 km + } + + [Fact] + public void ComputeDistance_WithSameStartEnd_ReturnsZero() + { + // Arrange + var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + var coords = new Coordinate[] + { + new Coordinate(4.9041, 52.3676), + new Coordinate(4.9041, 52.3676) + }; + var lineString = geometryFactory.CreateLineString(coords); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + LineString = lineString + }; + + // Act + DistanceCalculationHelper.ComputeDistance(route); + + // Assert + Assert.Equal(0, route.CalculatedDistance); + } + } +} diff --git a/OV_DB.Tests/Helpers/GeometryHelperTests.cs b/OV_DB.Tests/Helpers/GeometryHelperTests.cs new file mode 100644 index 00000000..2c2067ec --- /dev/null +++ b/OV_DB.Tests/Helpers/GeometryHelperTests.cs @@ -0,0 +1,98 @@ +using OV_DB.Helpers; + +namespace OV_DB.Tests.Helpers +{ + public class GeometryHelperTests + { + [Fact] + public void Distance_WithSameCoordinates_ReturnsZero() + { + // Arrange + double lat1 = 52.3676, lon1 = 4.9041; // Amsterdam + + // Act + var distance = GeometryHelper.distance(lat1, lon1, lat1, lon1, 'K'); + + // Assert + Assert.Equal(0, distance); + } + + [Fact] + public void Distance_AmsterdamToParis_ReturnsCorrectKilometers() + { + // Arrange + double lat1 = 52.3676, lon1 = 4.9041; // Amsterdam + double lat2 = 48.8566, lon2 = 2.3522; // Paris + + // Act + var distance = GeometryHelper.distance(lat1, lon1, lat2, lon2, 'K'); + + // Assert + Assert.True(distance > 400 && distance < 500); // Approximately 430 km + } + + [Fact] + public void Distance_WithNauticalMiles_ReturnsCorrectValue() + { + // Arrange + double lat1 = 52.3676, lon1 = 4.9041; // Amsterdam + double lat2 = 48.8566, lon2 = 2.3522; // Paris + + // Act + var distanceNautical = GeometryHelper.distance(lat1, lon1, lat2, lon2, 'N'); + + // Assert + Assert.True(distanceNautical > 0); + Assert.True(distanceNautical < 500); // Should be less than kilometers + } + + [Fact] + public void Distance_WithMiles_ReturnsCorrectValue() + { + // Arrange + double lat1 = 52.3676, lon1 = 4.9041; // Amsterdam + double lat2 = 48.8566, lon2 = 2.3522; // Paris + + // Act + var distanceMiles = GeometryHelper.distance(lat1, lon1, lat2, lon2, 'M'); + + // Assert + Assert.True(distanceMiles > 250 && distanceMiles < 300); // Approximately 267 miles + } + + [Fact] + public void Distance_NewYorkToLosAngeles_ReturnsCorrectDistance() + { + // Arrange + double lat1 = 40.7128, lon1 = -74.0060; // New York + double lat2 = 34.0522, lon2 = -118.2437; // Los Angeles + + // Act + var distance = GeometryHelper.distance(lat1, lon1, lat2, lon2, 'K'); + + // Assert + Assert.True(distance > 3900 && distance < 4000); // Approximately 3944 km + } + + [Theory] + [InlineData(0, 0, 0, 0, 'K', 0)] // Same point + [InlineData(51.5074, -0.1278, 48.8566, 2.3522, 'K', 344)] // London to Paris (approx) + [InlineData(35.6762, 139.6503, 37.7749, -122.4194, 'K', 8280)] // Tokyo to San Francisco (approx) + public void Distance_VariousLocations_ReturnsExpectedRange(double lat1, double lon1, double lat2, double lon2, char unit, double expected) + { + // Act + var distance = GeometryHelper.distance(lat1, lon1, lat2, lon2, unit); + + // Assert + if (expected == 0) + { + Assert.Equal(0, distance); + } + else + { + // Allow 10% tolerance + Assert.InRange(distance, expected * 0.9, expected * 1.1); + } + } + } +} diff --git a/OV_DB.Tests/Helpers/LanguageHelperTests.cs b/OV_DB.Tests/Helpers/LanguageHelperTests.cs new file mode 100644 index 00000000..881a181d --- /dev/null +++ b/OV_DB.Tests/Helpers/LanguageHelperTests.cs @@ -0,0 +1,78 @@ +using OV_DB.Helpers; +using OVDB_database.Enums; + +namespace OV_DB.Tests.Helpers +{ + public class LanguageHelperTests + { + [Fact] + public void ToLanguageCode_WithEnglish_ReturnsEn() + { + // Arrange + var language = PreferredLanguage.English; + + // Act + var code = language.ToLanguageCode(); + + // Assert + Assert.Equal("en", code); + } + + [Fact] + public void ToLanguageCode_WithDutch_ReturnsNl() + { + // Arrange + var language = PreferredLanguage.Dutch; + + // Act + var code = language.ToLanguageCode(); + + // Assert + Assert.Equal("nl", code); + } + + [Fact] + public void FromLanguageCode_WithEn_ReturnsEnglish() + { + // Act + var language = LanguageHelper.FromLanguageCode("en"); + + // Assert + Assert.Equal(PreferredLanguage.English, language); + } + + [Fact] + public void FromLanguageCode_WithNl_ReturnsDutch() + { + // Act + var language = LanguageHelper.FromLanguageCode("nl"); + + // Assert + Assert.Equal(PreferredLanguage.Dutch, language); + } + + [Fact] + public void FromLanguageCode_WithNullOrInvalid_ReturnsEnglish() + { + // Act & Assert + Assert.Equal(PreferredLanguage.English, LanguageHelper.FromLanguageCode(null)); + Assert.Equal(PreferredLanguage.English, LanguageHelper.FromLanguageCode("")); + Assert.Equal(PreferredLanguage.English, LanguageHelper.FromLanguageCode("invalid")); + Assert.Equal(PreferredLanguage.English, LanguageHelper.FromLanguageCode("fr")); + } + + [Theory] + [InlineData("en", PreferredLanguage.English)] + [InlineData("EN", PreferredLanguage.English)] + [InlineData("nl", PreferredLanguage.Dutch)] + [InlineData("NL", PreferredLanguage.Dutch)] + public void FromLanguageCode_IsCaseInsensitive(string code, PreferredLanguage expected) + { + // Act + var language = LanguageHelper.FromLanguageCode(code); + + // Assert + Assert.Equal(expected, language); + } + } +} diff --git a/OV_DB.Tests/OV_DB.Tests.csproj b/OV_DB.Tests/OV_DB.Tests.csproj index 26754eea..d253e1c8 100644 --- a/OV_DB.Tests/OV_DB.Tests.csproj +++ b/OV_DB.Tests/OV_DB.Tests.csproj @@ -9,7 +9,10 @@ + + + @@ -18,9 +21,9 @@ - - - + + + diff --git a/OV_DB.Tests/Services/RefreshRoutesServiceTests.cs b/OV_DB.Tests/Services/RefreshRoutesServiceTests.cs new file mode 100644 index 00000000..af9d1d77 --- /dev/null +++ b/OV_DB.Tests/Services/RefreshRoutesServiceTests.cs @@ -0,0 +1,138 @@ +using Microsoft.AspNetCore.SignalR; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using OV_DB.Hubs; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Services +{ + public class RefreshRoutesServiceTests : IDisposable + { + private readonly ServiceProvider _serviceProvider; + private readonly OVDBDatabaseContext _context; + private readonly Mock> _hubContextMock; + private readonly Mock _routeRegionsServiceMock; + private readonly GeometryFactory _geometryFactory; + + public RefreshRoutesServiceTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _hubContextMock = new Mock>(); + _routeRegionsServiceMock = new Mock(); + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + + // Setup DI container + var services = new ServiceCollection(); + services.AddSingleton(_context); + services.AddSingleton(_routeRegionsServiceMock.Object); + _serviceProvider = services.BuildServiceProvider(); + } + + public void Dispose() + { + _context?.Dispose(); + _serviceProvider?.Dispose(); + } + + [Fact] + public async Task StartAsync_InitializesService() + { + // Arrange + var service = new RefreshRoutesService(_serviceProvider, _hubContextMock.Object); + + // Act + await service.StartAsync(CancellationToken.None); + + // Assert - Service should start without throwing + Assert.NotNull(service); + } + + [Fact] + public async Task StopAsync_StopsService() + { + // Arrange + var service = new RefreshRoutesService(_serviceProvider, _hubContextMock.Object); + await service.StartAsync(CancellationToken.None); + + // Act + await service.StopAsync(CancellationToken.None); + + // Assert - Service should stop without throwing + Assert.NotNull(service); + } + + [Fact] + public async Task RefreshRoutesAsync_UpdatesRoutes() + { + // Arrange + var polygon = _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(4.0, 52.0), + new Coordinate(5.0, 52.0), + new Coordinate(5.0, 53.0), + new Coordinate(4.0, 53.0), + new Coordinate(4.0, 52.0) + }); + + var region = new Region + { + Id = 1, + Name = "Test Region", + OsmRelationId = 100, + Geometry = _geometryFactory.CreateMultiPolygon(new[] { polygon }) + }; + + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.5, 52.5), + new Coordinate(4.6, 52.6) + }); + + var routeType = new RouteType { TypeId = 1, Name = "Train", NameNL = "Trein", Colour = "#FF0000", UserId = 1 }; + var route = new Route + { + RouteId = 1, + Name = "Test Route", + RouteTypeId = 1, + RouteType = routeType, + LineString = lineString, + Regions = new[] { region }.ToList() + }; + + _context.Regions.Add(region); + _context.RouteTypes.Add(routeType); + _context.Routes.Add(route); + await _context.SaveChangesAsync(); + + _routeRegionsServiceMock.Setup(s => s.AssignRegionsToRouteAsync(It.IsAny())) + .ReturnsAsync(true); + + var mockClients = new Mock(); + var mockClientProxy = new Mock(); + _hubContextMock.Setup(h => h.Clients).Returns(mockClients.Object); + mockClients.Setup(c => c.All).Returns(mockClientProxy.Object); + + var service = new RefreshRoutesService(_serviceProvider, _hubContextMock.Object); + + // Act + await service.RefreshRoutesAsync(1); + + // Assert + _routeRegionsServiceMock.Verify(s => s.AssignRegionsToRouteAsync(It.IsAny()), Times.Once); + } + } +} diff --git a/OV_DB.Tests/Services/RefreshRoutesWithoutRegionsServiceTests.cs b/OV_DB.Tests/Services/RefreshRoutesWithoutRegionsServiceTests.cs new file mode 100644 index 00000000..0d3e918b --- /dev/null +++ b/OV_DB.Tests/Services/RefreshRoutesWithoutRegionsServiceTests.cs @@ -0,0 +1,78 @@ +using Microsoft.AspNetCore.SignalR; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using OV_DB.Hubs; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Services +{ + public class RefreshRoutesWithoutRegionsServiceTests : IDisposable + { + private readonly ServiceProvider _serviceProvider; + private readonly OVDBDatabaseContext _context; + private readonly Mock> _hubContextMock; + private readonly Mock _routeRegionsServiceMock; + private readonly GeometryFactory _geometryFactory; + + public RefreshRoutesWithoutRegionsServiceTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _hubContextMock = new Mock>(); + _routeRegionsServiceMock = new Mock(); + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + + // Setup DI container + var services = new ServiceCollection(); + services.AddSingleton(_context); + services.AddSingleton(_routeRegionsServiceMock.Object); + _serviceProvider = services.BuildServiceProvider(); + } + + public void Dispose() + { + _context?.Dispose(); + _serviceProvider?.Dispose(); + } + + [Fact] + public async Task StartAsync_InitializesService() + { + // Arrange + var service = new RefreshRoutesWithoutRegionsService(_serviceProvider, _hubContextMock.Object); + + // Act + await service.StartAsync(CancellationToken.None); + + // Assert - Service should start without throwing + Assert.NotNull(service); + } + + [Fact] + public async Task StopAsync_StopsService() + { + // Arrange + var service = new RefreshRoutesWithoutRegionsService(_serviceProvider, _hubContextMock.Object); + await service.StartAsync(CancellationToken.None); + + // Act + await service.StopAsync(CancellationToken.None); + + // Assert - Service should stop without throwing + Assert.NotNull(service); + } + } +} diff --git a/OV_DB.Tests/Services/RouteRegionsServiceTests.cs b/OV_DB.Tests/Services/RouteRegionsServiceTests.cs new file mode 100644 index 00000000..50de3af9 --- /dev/null +++ b/OV_DB.Tests/Services/RouteRegionsServiceTests.cs @@ -0,0 +1,181 @@ +using Microsoft.EntityFrameworkCore; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; + +namespace OV_DB.Tests.Services +{ + public class RouteRegionsServiceTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly RouteRegionsService _service; + private readonly GeometryFactory _geometryFactory; + + public RouteRegionsServiceTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _service = new RouteRegionsService(_context); + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + } + + public void Dispose() + { + _context?.Dispose(); + } + + [Fact] + public async Task AssignRegionsToRouteAsync_WithIntersectingRegion_AssignsRegion() + { + // Arrange + var region = new Region + { + Id = 1, + Name = "Netherlands", + ParentRegionId = null, + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(4.5, 52.0), + new Coordinate(5.5, 52.0), + new Coordinate(5.5, 53.0), + new Coordinate(4.5, 53.0), + new Coordinate(4.5, 52.0) + }) + }) + }; + _context.Regions.Add(region); + await _context.SaveChangesAsync(); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + LineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }), + Regions = new List() + }; + + // Act + var result = await _service.AssignRegionsToRouteAsync(route); + + // Assert + Assert.True(result); // Changed + Assert.Single(route.Regions); + Assert.Equal("Netherlands", route.Regions.First().Name); + } + + [Fact] + public async Task AssignRegionsToRouteAsync_WithNonIntersectingRegion_DoesNotAssignRegion() + { + // Arrange + var region = new Region + { + Id = 1, + Name = "Spain", + ParentRegionId = null, + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(-4, 40), + new Coordinate(-3, 40), + new Coordinate(-3, 41), + new Coordinate(-4, 41), + new Coordinate(-4, 40) + }) + }) + }; + _context.Regions.Add(region); + await _context.SaveChangesAsync(); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + LineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }), + Regions = new List() + }; + + // Act + var result = await _service.AssignRegionsToRouteAsync(route); + + // Assert + Assert.False(result); // No changes + Assert.Empty(route.Regions); + } + + [Fact] + public async Task AssignRegionsToRouteAsync_WithExistingRegions_UpdatesCorrectly() + { + // Arrange + var oldRegion = new Region + { + Id = 1, + Name = "Old Region", + ParentRegionId = null, + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(10, 10), + new Coordinate(11, 10), + new Coordinate(11, 11), + new Coordinate(10, 11), + new Coordinate(10, 10) + }) + }) + }; + + var newRegion = new Region + { + Id = 2, + Name = "New Region", + ParentRegionId = null, + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(4.5, 52.0), + new Coordinate(5.5, 52.0), + new Coordinate(5.5, 53.0), + new Coordinate(4.5, 53.0), + new Coordinate(4.5, 52.0) + }) + }) + }; + + _context.Regions.AddRange(oldRegion, newRegion); + await _context.SaveChangesAsync(); + + var route = new Route + { + RouteId = 1, + Name = "Test Route", + LineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }), + Regions = new List { oldRegion } + }; + + // Act + var result = await _service.AssignRegionsToRouteAsync(route); + + // Assert + Assert.True(result); // Changed + Assert.Single(route.Regions); + Assert.Equal("New Region", route.Regions.First().Name); + } + } +} diff --git a/OV_DB.Tests/Services/StationRegionsServiceTests.cs b/OV_DB.Tests/Services/StationRegionsServiceTests.cs new file mode 100644 index 00000000..ca5ce5dc --- /dev/null +++ b/OV_DB.Tests/Services/StationRegionsServiceTests.cs @@ -0,0 +1,204 @@ +using Microsoft.EntityFrameworkCore; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; + +namespace OV_DB.Tests.Services +{ + public class StationRegionsServiceTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly StationRegionsService _service; + private readonly GeometryFactory _geometryFactory; + + public StationRegionsServiceTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _service = new StationRegionsService(_context); + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + } + + public void Dispose() + { + _context?.Dispose(); + } + + [Fact] + public async Task AssignRegionsToStationAsync_WithIntersectingRegion_AssignsRegion() + { + // Arrange + var region = new Region + { + Id = 1, + Name = "Amsterdam Region", + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(4.5, 52.0), + new Coordinate(5.5, 52.0), + new Coordinate(5.5, 53.0), + new Coordinate(4.5, 53.0), + new Coordinate(4.5, 52.0) + }) + }) + }; + _context.Regions.Add(region); + await _context.SaveChangesAsync(); + + var station = new Station + { + Id = 1, + Name = "Amsterdam Centraal", + Longitude = 4.9, + Lattitude = 52.3, + Regions = new List() + }; + + // Act + await _service.AssignRegionsToStationAsync(station); + + // Assert + Assert.Single(station.Regions); + Assert.Equal("Amsterdam Region", station.Regions.First().Name); + } + + [Fact] + public async Task AssignRegionsToStationAsync_WithNonIntersectingRegion_DoesNotAssignRegion() + { + // Arrange + var region = new Region + { + Id = 1, + Name = "Paris Region", + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(2.0, 48.5), + new Coordinate(2.5, 48.5), + new Coordinate(2.5, 49.0), + new Coordinate(2.0, 49.0), + new Coordinate(2.0, 48.5) + }) + }) + }; + _context.Regions.Add(region); + await _context.SaveChangesAsync(); + + var station = new Station + { + Id = 1, + Name = "Amsterdam Centraal", + Longitude = 4.9, + Lattitude = 52.3, + Regions = new List() + }; + + // Act + await _service.AssignRegionsToStationAsync(station); + + // Assert + Assert.Empty(station.Regions); + } + + [Fact] + public async Task AssignRegionsToStationCacheRegionsAsync_WithCachedRegions_AssignsCorrectly() + { + // Arrange + var region = new Region + { + Id = 1, + Name = "Netherlands", + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(4.5, 52.0), + new Coordinate(5.5, 52.0), + new Coordinate(5.5, 53.0), + new Coordinate(4.5, 53.0), + new Coordinate(4.5, 52.0) + }) + }) + }; + _context.Regions.Add(region); + await _context.SaveChangesAsync(); + + var station = new Station + { + Id = 1, + Name = "Amsterdam Centraal", + Longitude = 4.9, + Lattitude = 52.3, + Regions = new List() + }; + + // Act + await _service.AssignRegionsToStationCacheRegionsAsync(station); + + // Assert + Assert.Single(station.Regions); + Assert.Equal("Netherlands", station.Regions.First().Name); + } + + [Fact] + public async Task AssignRegionsToStationAsync_ClearsExistingRegions() + { + // Arrange + var oldRegion = new Region + { + Id = 1, + Name = "Old Region", + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(10, 10), + new Coordinate(11, 10), + new Coordinate(11, 11), + new Coordinate(10, 11), + new Coordinate(10, 10) + }) + }) + }; + + var newRegion = new Region + { + Id = 2, + Name = "New Region", + Geometry = _geometryFactory.CreateMultiPolygon(new[] { + _geometryFactory.CreatePolygon(new Coordinate[] + { + new Coordinate(4.5, 52.0), + new Coordinate(5.5, 52.0), + new Coordinate(5.5, 53.0), + new Coordinate(4.5, 53.0), + new Coordinate(4.5, 52.0) + }) + }) + }; + + _context.Regions.AddRange(oldRegion, newRegion); + await _context.SaveChangesAsync(); + + var station = new Station + { + Id = 1, + Name = "Amsterdam Centraal", + Longitude = 4.9, + Lattitude = 52.3, + Regions = new List { oldRegion } + }; + + // Act + await _service.AssignRegionsToStationAsync(station); + + // Assert + Assert.Single(station.Regions); + Assert.Equal("New Region", station.Regions.First().Name); + } + } +} diff --git a/OV_DB.Tests/Services/TimezoneServiceAdvancedTests.cs b/OV_DB.Tests/Services/TimezoneServiceAdvancedTests.cs new file mode 100644 index 00000000..88c1c560 --- /dev/null +++ b/OV_DB.Tests/Services/TimezoneServiceAdvancedTests.cs @@ -0,0 +1,113 @@ +using OV_DB.Services; +using NetTopologySuite.Geometries; +using NetTopologySuite; + +namespace OV_DB.Tests.Services +{ + public class TimezoneServiceAdvancedTests + { + private readonly TimezoneService _service; + private readonly GeometryFactory _geometryFactory; + + public TimezoneServiceAdvancedTests() + { + _service = new TimezoneService(); + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + } + + [Fact] + public async Task ConvertUtcToLocalTimeAsync_WithValidCoordinates_ReturnsLocalTime() + { + // Arrange + var utcDateTime = new DateTime(2025, 6, 15, 12, 0, 0, DateTimeKind.Utc); + double latitude = 52.3676; // Amsterdam + double longitude = 4.9041; + + // Act + var localTime = await _service.ConvertUtcToLocalTimeAsync(utcDateTime, latitude, longitude); + + // Assert + Assert.NotEqual(default(DateTime), localTime); + // In summer, Amsterdam is UTC+2 + Assert.True(localTime >= utcDateTime); + } + + [Fact] + public async Task ConvertUtcToLocalTimeAsync_WithInvalidCoordinates_ReturnsSafeValue() + { + // Arrange + var utcDateTime = new DateTime(2025, 6, 15, 12, 0, 0, DateTimeKind.Utc); + double latitude = 999; // Invalid + double longitude = 999; // Invalid + + // Act + var localTime = await _service.ConvertUtcToLocalTimeAsync(utcDateTime, latitude, longitude); + + // Assert - Should return the UTC time when conversion fails + Assert.Equal(utcDateTime, localTime); + } + + [Fact] + public void CalculateDurationInHours_WithSingleTimezone_ReturnsCorrectDuration() + { + // Arrange + var startTime = new DateTime(2025, 1, 1, 10, 0, 0); + var endTime = new DateTime(2025, 1, 1, 15, 30, 0); + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), // Amsterdam + new Coordinate(4.48, 51.92) // Rotterdam + }); + + // Act + var duration = _service.CalculateDurationInHours(startTime, endTime, lineString); + + // Assert + Assert.Equal(5.5, duration, precision: 1); // 5.5 hours + } + + [Fact] + public void CalculateDurationInHours_AcrossMidnight_HandlesCorrectly() + { + // Arrange + var startTime = new DateTime(2025, 1, 1, 23, 0, 0); + var endTime = new DateTime(2025, 1, 2, 2, 0, 0); + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }); + + // Act + var duration = _service.CalculateDurationInHours(startTime, endTime, lineString); + + // Assert + Assert.Equal(3.0, duration, precision: 1); // 3 hours + } + + [Theory] + [InlineData(2025, 1, 15, 10, 0, 2025, 1, 15, 12, 0, 2.0)] // 2 hours + [InlineData(2025, 6, 15, 8, 30, 2025, 6, 15, 17, 45, 9.25)] // 9.25 hours + [InlineData(2025, 3, 20, 6, 15, 2025, 3, 20, 18, 45, 12.5)] // 12.5 hours + public void CalculateDurationInHours_VariousTimeRanges_ReturnsCorrectDuration( + int startYear, int startMonth, int startDay, int startHour, int startMinute, + int endYear, int endMonth, int endDay, int endHour, int endMinute, + double expectedHours) + { + // Arrange + var startTime = new DateTime(startYear, startMonth, startDay, startHour, startMinute, 0); + var endTime = new DateTime(endYear, endMonth, endDay, endHour, endMinute, 0); + var lineString = _geometryFactory.CreateLineString(new Coordinate[] + { + new Coordinate(4.9, 52.3), + new Coordinate(5.0, 52.4) + }); + + // Act + var duration = _service.CalculateDurationInHours(startTime, endTime, lineString); + + // Assert + Assert.Equal(expectedHours, duration, precision: 2); + } + } +} diff --git a/OV_DB.Tests/Services/TrawellingServiceTests.cs b/OV_DB.Tests/Services/TrawellingServiceTests.cs new file mode 100644 index 00000000..fb3ddd85 --- /dev/null +++ b/OV_DB.Tests/Services/TrawellingServiceTests.cs @@ -0,0 +1,182 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Moq; +using Moq.Protected; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Services +{ + public class TrawellingServiceTests : IDisposable + { + private readonly OVDBDatabaseContext _context; + private readonly Mock _configurationMock; + private readonly Mock _timezoneServiceMock; + private readonly Mock> _loggerMock; + private readonly Mock _cacheMock; + private readonly Mock _httpMessageHandlerMock; + private readonly HttpClient _httpClient; + + public TrawellingServiceTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + + _configurationMock = new Mock(); + _configurationMock.Setup(c => c["Traewelling:BaseUrl"]).Returns("https://traewelling.de"); + _configurationMock.Setup(c => c["Traewelling:ClientId"]).Returns("test-client-id"); + _configurationMock.Setup(c => c["Traewelling:ClientSecret"]).Returns("test-secret"); + _configurationMock.Setup(c => c["Traewelling:RedirectUri"]).Returns("https://localhost/callback"); + _configurationMock.Setup(c => c["Traewelling:AuthorizeUrl"]).Returns("https://traewelling.de/oauth/authorize"); + _configurationMock.Setup(c => c["Traewelling:TokenUrl"]).Returns("https://traewelling.de/oauth/token"); + + _timezoneServiceMock = new Mock(); + _loggerMock = new Mock>(); + _cacheMock = new Mock(); + + _httpMessageHandlerMock = new Mock(); + _httpClient = new HttpClient(_httpMessageHandlerMock.Object); + } + + public void Dispose() + { + _context?.Dispose(); + _httpClient?.Dispose(); + } + + [Fact] + public void GetAuthorizationUrl_ReturnsValidUrl() + { + // Arrange + var service = new TrawellingService(_httpClient, _configurationMock.Object, + _timezoneServiceMock.Object, _context, _loggerMock.Object, _cacheMock.Object); + + // Act + var url = service.GetAuthorizationUrl(1, "test-state"); + + // Assert + Assert.Contains("https://traewelling.de/oauth/authorize", url); + Assert.Contains("client_id=test-client-id", url); + Assert.Contains("state=test-state", url); + Assert.Contains("response_type=code", url); + } + + [Fact] + public void GenerateAndStoreState_ReturnsValidState() + { + // Arrange + var service = new TrawellingService(_httpClient, _configurationMock.Object, + _timezoneServiceMock.Object, _context, _loggerMock.Object, _cacheMock.Object); + + // Act + var state = service.GenerateAndStoreState(1); + + // Assert + Assert.NotNull(state); + Assert.NotEmpty(state); + Assert.True(Guid.TryParse(state, out _)); + } + + [Fact] + public async Task ExchangeCodeForToken_WithValidCode_ReturnsToken() + { + // Arrange + var responseJson = @"{ + ""access_token"": ""test-access-token"", + ""refresh_token"": ""test-refresh-token"", + ""expires_in"": 3600 + }"; + + _httpMessageHandlerMock + .Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = new StringContent(responseJson, Encoding.UTF8, "application/json") + }); + + var service = new TrawellingService(_httpClient, _configurationMock.Object, + _timezoneServiceMock.Object, _context, _loggerMock.Object, _cacheMock.Object); + + var user = new User { Id = 1, Email = "test@example.com", Guid = Guid.NewGuid() }; + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + var state = service.GenerateAndStoreState(1); + + // Act + var result = await service.ExchangeCodeForTokensAsync("test-code", state, 1); + + // Assert + Assert.True(result); + var updatedUser = await _context.Users.FindAsync(1); + Assert.NotNull(updatedUser); + Assert.Equal("test-access-token", updatedUser.TrawellingAccessToken); + } + + [Fact] + public async Task RefreshToken_WithValidToken_UpdatesToken() + { + // Arrange + var responseJson = @"{ + ""access_token"": ""new-access-token"", + ""refresh_token"": ""new-refresh-token"", + ""expires_in"": 3600 + }"; + + _httpMessageHandlerMock + .Protected() + .Setup>( + "SendAsync", + ItExpr.IsAny(), + ItExpr.IsAny() + ) + .ReturnsAsync(new HttpResponseMessage + { + StatusCode = HttpStatusCode.OK, + Content = new StringContent(responseJson, Encoding.UTF8, "application/json") + }); + + var service = new TrawellingService(_httpClient, _configurationMock.Object, + _timezoneServiceMock.Object, _context, _loggerMock.Object, _cacheMock.Object); + + var user = new User + { + Id = 1, + Email = "test@example.com", + Guid = Guid.NewGuid(), + TrawellingAccessToken = "old-token", + TrawellingRefreshToken = "old-refresh-token" + }; + _context.Users.Add(user); + await _context.SaveChangesAsync(); + + // Act + var result = await service.RefreshTokensAsync(user); + + // Assert + Assert.True(result); + var updatedUser = await _context.Users.FindAsync(1); + Assert.NotNull(updatedUser); + Assert.Equal("new-access-token", updatedUser.TrawellingAccessToken); + } + } +} diff --git a/OV_DB.Tests/Services/UpdateRegionServiceTests.cs b/OV_DB.Tests/Services/UpdateRegionServiceTests.cs new file mode 100644 index 00000000..25860ee6 --- /dev/null +++ b/OV_DB.Tests/Services/UpdateRegionServiceTests.cs @@ -0,0 +1,75 @@ +using Microsoft.AspNetCore.SignalR; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Moq; +using NetTopologySuite; +using NetTopologySuite.Geometries; +using OV_DB.Hubs; +using OV_DB.Services; +using OVDB_database.Database; +using OVDB_database.Models; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace OV_DB.Tests.Services +{ + public class UpdateRegionServiceTests : IDisposable + { + private readonly ServiceProvider _serviceProvider; + private readonly OVDBDatabaseContext _context; + private readonly Mock> _hubContextMock; + private readonly GeometryFactory _geometryFactory; + + public UpdateRegionServiceTests() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + + _context = new OVDBDatabaseContext(options); + _hubContextMock = new Mock>(); + _geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); + + // Setup DI container + var services = new ServiceCollection(); + services.AddSingleton(_context); + _serviceProvider = services.BuildServiceProvider(); + } + + public void Dispose() + { + _context?.Dispose(); + _serviceProvider?.Dispose(); + } + + [Fact] + public async Task StartAsync_InitializesService() + { + // Arrange + var service = new UpdateRegionService(_serviceProvider, _hubContextMock.Object); + + // Act + await service.StartAsync(CancellationToken.None); + + // Assert - Service should start without throwing + Assert.NotNull(service); + } + + [Fact] + public async Task StopAsync_StopsService() + { + // Arrange + var service = new UpdateRegionService(_serviceProvider, _hubContextMock.Object); + await service.StartAsync(CancellationToken.None); + + // Act + await service.StopAsync(CancellationToken.None); + + // Assert - Service should stop without throwing + Assert.NotNull(service); + } + } +} diff --git a/OV_DB.Tests/TimezoneServiceTests.cs b/OV_DB.Tests/TimezoneServiceTests.cs index b129347e..51063a5d 100644 --- a/OV_DB.Tests/TimezoneServiceTests.cs +++ b/OV_DB.Tests/TimezoneServiceTests.cs @@ -50,25 +50,23 @@ public void CalculateDurationInHours_CrossTimezone_AmsterdamToLondon() { // Arrange var service = new TimezoneService(); - var startTime = new DateTime(2025, 6, 15, 14, 0, 0); // 14:00 local time as entered by user - var endTime = new DateTime(2025, 6, 15, 16, 0, 0); // 16:00 local time as entered by user + var startTime = new DateTime(2025, 6, 15, 14, 0, 0); + var endTime = new DateTime(2025, 6, 15, 16, 0, 0); // Create LineString from Amsterdam to London (different timezones) var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); var coords = new Coordinate[] { - new Coordinate(4.9041, 52.3676), // Amsterdam - new Coordinate(-0.1276, 51.5074) // London + new Coordinate(4.9041, 52.3676), // Amsterdam (CEST: UTC+2) + new Coordinate(-0.1276, 51.5074) // London (BST: UTC+1) }; var lineString = geometryFactory.CreateLineString(coords); // Act var duration = service.CalculateDurationInHours(startTime, endTime, lineString); - // Assert - // With simplified approach: treat input times as local trip times (no timezone conversion) - // User entered 14:00 to 16:00, so duration is 2 hours as they experienced it - Assert.Equal(2.0, duration); + // Assert - Amsterdam 14:00 CEST (12:00 UTC) to London 16:00 BST (15:00 UTC) = 3 hours + Assert.Equal(3.0, duration); } [Fact] @@ -76,25 +74,23 @@ public void CalculateDurationInHours_CrossTimezone_NewYorkToLosAngeles() { // Arrange var service = new TimezoneService(); - var startTime = new DateTime(2025, 3, 15, 10, 0, 0); // 10:00 local time as entered by user - var endTime = new DateTime(2025, 3, 15, 11, 0, 0); // 11:00 local time as entered by user (arrived at 11 AM local time) + var startTime = new DateTime(2025, 3, 15, 10, 0, 0); + var endTime = new DateTime(2025, 3, 15, 11, 0, 0); // Create LineString from New York to Los Angeles var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326); var coords = new Coordinate[] { - new Coordinate(-74.0060, 40.7128), // New York - new Coordinate(-118.2437, 34.0522) // Los Angeles + new Coordinate(-74.0060, 40.7128), // New York (EDT: UTC-4) + new Coordinate(-118.2437, 34.0522) // Los Angeles (PDT: UTC-7) }; var lineString = geometryFactory.CreateLineString(coords); // Act var duration = service.CalculateDurationInHours(startTime, endTime, lineString); - // Assert - // With simplified approach: treat input times as local trip times (no timezone conversion) - // User entered 10:00 to 11:00, so duration is 1 hour as they experienced it - Assert.Equal(1.0, duration); + // Assert - NY 10:00 EDT (14:00 UTC) to LA 11:00 PDT (18:00 UTC) = 4 hours + Assert.Equal(4.0, duration); } } } \ No newline at end of file diff --git a/OV_DB/Services/TimezoneService.cs b/OV_DB/Services/TimezoneService.cs index 4878977f..dd7a115c 100644 --- a/OV_DB/Services/TimezoneService.cs +++ b/OV_DB/Services/TimezoneService.cs @@ -10,6 +10,12 @@ public class TimezoneService : ITimezoneService { public double CalculateDurationInHours(DateTime startTime, DateTime endTime, LineString lineString) { + // Handle null or invalid LineString + if (lineString == null || lineString.Count < 2) + { + return (endTime - startTime).TotalHours; + } + var startTimezoneId = GetTimezoneId(lineString[0].Y, lineString[0].X); var end = lineString[lineString.Count - 1]; var endTimezoneId = GetTimezoneId(end.Y, end.X); diff --git a/OV_DB/Startup.cs b/OV_DB/Startup.cs index cc1e2b1f..c3c11d08 100644 --- a/OV_DB/Startup.cs +++ b/OV_DB/Startup.cs @@ -203,18 +203,23 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) Console.WriteLine(ex.Message); } } - app.UseSpa(spa => + + // Only configure SPA in Development or Production, not Testing + if (!env.IsEnvironment("Testing")) { - // To learn more about options for serving an Angular SPA from ASP.NET Core, - // see https://go.microsoft.com/fwlink/?linkid=864501 + app.UseSpa(spa => + { + // To learn more about options for serving an Angular SPA from ASP.NET Core, + // see https://go.microsoft.com/fwlink/?linkid=864501 - spa.Options.SourcePath = "OVDBFrontend"; + spa.Options.SourcePath = "OVDBFrontend"; - if (env.IsDevelopment()) - { - //spa.UseAngularCliServer(npmScript: "start"); - } - }); + if (env.IsDevelopment()) + { + //spa.UseAngularCliServer(npmScript: "start"); + } + }); + } } public static IEdmModel GetEdmModel() diff --git a/docker-compose.integration-tests.yml b/docker-compose.integration-tests.yml new file mode 100644 index 00000000..0ab4c0e1 --- /dev/null +++ b/docker-compose.integration-tests.yml @@ -0,0 +1,29 @@ +version: '3.8' + +services: + ovdb-test-db: + image: mariadb:11.2 + container_name: ovdb-integration-test-db + environment: + MYSQL_ROOT_PASSWORD: test_root_password + MYSQL_DATABASE: ovdb_integration_test + MYSQL_USER: ovdb_test_user + MYSQL_PASSWORD: test_password + ports: + - "3307:3306" + volumes: + - ovdb-test-data:/var/lib/mysql + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + interval: 10s + timeout: 5s + retries: 5 + networks: + - ovdb-test-network + +networks: + ovdb-test-network: + driver: bridge + +volumes: + ovdb-test-data: