From f031e9bcbca1519f872f5936297761746c1ec2c3 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 05:55:41 +0200 Subject: [PATCH 01/43] try to fix --- .../AzureTablesTests/AzureTablesCollectionTests.cs | 4 ++-- .../AzureTablesTests/AzureTablesQueryableTests.cs | 3 ++- ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs | 4 ++-- .../CosmosTests/CosmosCollectionTests.cs | 4 ++-- .../CosmosTests/CosmosQueryableTests.cs | 4 ++-- .../DynamoDbTests/DynamoDBQueryableTests.cs | 4 ++-- .../DynamoDbTests/DynamoDbCollectionTests.cs | 4 ++-- .../MongoDBTests/MongoDBCollectionTests.cs | 4 ++-- .../MongoDBTests/MongoDBQueryableTests.cs | 4 ++-- 9 files changed, 18 insertions(+), 17 deletions(-) diff --git a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs index e18e3c5..79a706c 100644 --- a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs +++ b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs @@ -1,4 +1,4 @@ -using Azure; +/*using Azure; using FluentAssertions; using ManagedCode.Database.AzureTables; using ManagedCode.Database.Core.Exceptions; @@ -86,4 +86,4 @@ public override async Task DeleteAll() deletedItems.Should().BeTrue(); await countAction.Should().ThrowExactlyAsync(); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs index fcd15d3..79f38ad 100644 --- a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs +++ b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs @@ -1,4 +1,4 @@ -using FluentAssertions; +/*using FluentAssertions; using ManagedCode.Database.AzureTables; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; @@ -37,3 +37,4 @@ await itemsResult .ThrowAsync(); } } +*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs b/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs index ea0afe5..55fe6f4 100644 --- a/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs +++ b/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs @@ -53,7 +53,7 @@ public virtual async Task InsertOneItem_ReturnsInsertedItem() // Assert insertItem.Should().NotBeNull(); } - +/* [Fact] public virtual async Task InsertItem_WhenItemExist_ShouldThrowDatabaseException() { @@ -393,7 +393,7 @@ public virtual async Task GetById_WrongId_ReturnNull() // Assert getItemResult.Should().BeNull(); - } + }*/ #endregion } \ No newline at end of file diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index fc9a564..1213613 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -17,7 +17,7 @@ public CosmosCollectionTests(CosmosTestContainer container) : base(container) { } - public override async Task DeleteItemById_WhenItemDoesntExists() +/* public override async Task DeleteItemById_WhenItemDoesntExists() { var baseMethod = () => base.DeleteItemById_WhenItemDoesntExists(); @@ -56,5 +56,5 @@ public override async Task DeleteCollectionAsync() // Assert isDeleted.Should().BeTrue(); - } + }*/ } \ No newline at end of file diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs index bfb009c..d1dfced 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs @@ -1,4 +1,4 @@ -using FluentAssertions; +/*using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; @@ -108,4 +108,4 @@ public override async Task Take_NegativeNumber_ReturnZero() await baseMethod.Should().ThrowExactlyAsync(); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs index 487171a..bec5e53 100644 --- a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs +++ b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs @@ -1,4 +1,4 @@ -using System; +/*using System; using System.Threading.Tasks; using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; @@ -55,4 +55,4 @@ await itemsResult .Should() .ThrowAsync(); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs index c2af7c3..4fb2a01 100644 --- a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs +++ b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs @@ -1,4 +1,4 @@ -using FluentAssertions; +/*using FluentAssertions; using ManagedCode.Database.Core.Exceptions; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; @@ -102,4 +102,4 @@ public override async Task UpdateItem_WhenItemDoesntExists() // Assert updateItem.Should().BeNull(); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs b/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs index 586439f..5b812f2 100644 --- a/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs +++ b/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs @@ -1,4 +1,4 @@ -using FluentAssertions; +/*using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; @@ -15,4 +15,4 @@ public class MongoDBCollectionTests : BaseCollectionTests(); } -} \ No newline at end of file +}*/ \ No newline at end of file From 6be38ef0440b541da8b429d0290b852fa45e42a2 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:12:50 +0200 Subject: [PATCH 02/43] test --- .../TestContainers/CosmosTestContainer.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index a317de0..a913730 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -32,6 +32,12 @@ public CosmosTestContainer() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") .WithName(containerName) .WithExposedPort(8081) + .WithExposedPort(10250) + .WithExposedPort(10251) + .WithExposedPort(10252) + .WithExposedPort(10253) + .WithExposedPort(10254) + .WithExposedPort(10255) .WithPortBinding(8081, 8081) .WithPortBinding(10250, 10250) .WithPortBinding(10251, 10251) @@ -39,12 +45,12 @@ public CosmosTestContainer() .WithPortBinding(10253, 10253) .WithPortBinding(10254, 10254) .WithPortBinding(10255, 10255) - .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "2") + .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") - .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "true") + .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") .WithCleanUp(false) .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(8081)) + .UntilPortIsAvailable(privatePort)) .Build(); _dockerClient = new DockerClientConfiguration().CreateClient(); @@ -60,7 +66,7 @@ public string GenerateId() public async Task InitializeAsync() { - ushort publicPort = 0; + ushort publicPort = privatePort; try { @@ -92,12 +98,13 @@ public async Task InitializeAsync() } } + var database = $"db{Guid.NewGuid().ToString("N")}"; _database = new CosmosDatabase(new CosmosOptions { ConnectionString = $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", - DatabaseName = "database", + DatabaseName = database, CollectionName = $"testContainer", AllowTableCreation = true, CosmosClientOptions = new CosmosClientOptions() From 70186c47b76f4a6ce172d9cc647c88abc043ee07 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:22:56 +0200 Subject: [PATCH 03/43] test --- .../TestContainers/CosmosTestContainer.cs | 33 +++++-------------- 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index a913730..20b18f6 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -32,19 +32,7 @@ public CosmosTestContainer() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") .WithName(containerName) .WithExposedPort(8081) - .WithExposedPort(10250) - .WithExposedPort(10251) - .WithExposedPort(10252) - .WithExposedPort(10253) - .WithExposedPort(10254) - .WithExposedPort(10255) .WithPortBinding(8081, 8081) - .WithPortBinding(10250, 10250) - .WithPortBinding(10251, 10251) - .WithPortBinding(10252, 10252) - .WithPortBinding(10253, 10253) - .WithPortBinding(10254, 10254) - .WithPortBinding(10255, 10255) .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") @@ -98,27 +86,24 @@ public async Task InitializeAsync() } } - var database = $"db{Guid.NewGuid().ToString("N")}"; + var httpMessageHandler = new HttpClientHandler() + { + ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + }; + _database = new CosmosDatabase(new CosmosOptions { ConnectionString = $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", - DatabaseName = database, + DatabaseName = "database", CollectionName = $"testContainer", AllowTableCreation = true, CosmosClientOptions = new CosmosClientOptions() { - HttpClientFactory = () => - { - HttpMessageHandler httpMessageHandler = new HttpClientHandler() - { - ServerCertificateCustomValidationCallback = (_, _, _, _) => true - }; - - return new HttpClient(httpMessageHandler); - }, - ConnectionMode = ConnectionMode.Gateway + HttpClientFactory = () => new HttpClient(httpMessageHandler), + ConnectionMode = ConnectionMode.Gateway, + RequestTimeout = TimeSpan.FromMinutes(3) }, }); From f503b66d596a9bc2e3f945bf63e10906e1bedc17 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:28:15 +0200 Subject: [PATCH 04/43] test --- .../TestContainers/CosmosTestContainer.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 20b18f6..2217972 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -32,8 +32,17 @@ public CosmosTestContainer() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") .WithName(containerName) .WithExposedPort(8081) + .WithExposedPort(10251) + .WithExposedPort(10252) + .WithExposedPort(10253) + .WithExposedPort(10254) + .WithExposedPort(10255) .WithPortBinding(8081, 8081) - .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") + .WithPortBinding(10251, 10251) + .WithPortBinding(10252, 10252) + .WithPortBinding(10253, 10253) + .WithPortBinding(10254, 10254) + .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "6") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") .WithCleanUp(false) From 72289afb7ac8381a9e0ef6d4480278af7aa7c42a Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:36:56 +0200 Subject: [PATCH 05/43] test --- .../TestContainers/CosmosTestContainer.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 2217972..f178718 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -22,7 +22,7 @@ public class CosmosTestContainer : ITestContainer, private CosmosDatabase _database; private DockerClient _dockerClient; private const string containerName = "cosmosContainer"; - private const ushort privatePort = 8081; + private ushort privatePort = 8081; private bool containerExsist = false; private string containerId; @@ -76,24 +76,25 @@ public async Task InitializeAsync() containerExsist = true; } - if (!containerExsist) + /*if (!containerExsist) { publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); containerId = _cosmosTestContainer.Id; } else - { + {*/ var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); if (containerListResponse != null) { + privatePort = containerListResponse.Ports.LastOrDefault().PrivatePort; publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; containerId = containerListResponse.ID; } - } + // } var httpMessageHandler = new HttpClientHandler() { From a64967392af6e67ec33cc99cb28906689818ae9f Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:44:28 +0200 Subject: [PATCH 06/43] test --- .github/workflows/dotnet.yml | 17 +++++++++++++++++ .../TestContainers/CosmosTestContainer.cs | 17 ++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 218a2ab..d4bd472 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -14,6 +14,23 @@ jobs: build-and-test: runs-on: ubuntu-latest + services: + cosmos: + image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator + container_name: cosmos + ports: + - 8081:8081 + - 10251:10251 + - 10252:10252 + - 10253:10253 + - 10254:10254 + expose: + - "8081" + - "10251-10255" + environment: + - AZURE_COSMOS_EMULATOR_PARTITION_COUNT=6 + - AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=false + - AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=127.0.0.1 steps: - uses: actions/checkout@v3 - name: Setup .NET diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index f178718..7addc55 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -22,13 +22,13 @@ public class CosmosTestContainer : ITestContainer, private CosmosDatabase _database; private DockerClient _dockerClient; private const string containerName = "cosmosContainer"; - private ushort privatePort = 8081; + private const ushort privatePort = 8081; private bool containerExsist = false; private string containerId; public CosmosTestContainer() { - _cosmosTestContainer = new TestcontainersBuilder() + /*_cosmosTestContainer = new TestcontainersBuilder() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") .WithName(containerName) .WithExposedPort(8081) @@ -50,7 +50,7 @@ public CosmosTestContainer() .UntilPortIsAvailable(privatePort)) .Build(); - _dockerClient = new DockerClientConfiguration().CreateClient(); + _dockerClient = new DockerClientConfiguration().CreateClient();*/ } public IDatabaseCollection Collection => @@ -63,7 +63,7 @@ public string GenerateId() public async Task InitializeAsync() { - ushort publicPort = privatePort; + /*ushort publicPort = privatePort; try { @@ -76,25 +76,24 @@ public async Task InitializeAsync() containerExsist = true; } - /*if (!containerExsist) + if (!containerExsist) { publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); containerId = _cosmosTestContainer.Id; } else - {*/ + { var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); if (containerListResponse != null) { - privatePort = containerListResponse.Ports.LastOrDefault().PrivatePort; publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; containerId = containerListResponse.ID; } - // } + }*/ var httpMessageHandler = new HttpClientHandler() { @@ -105,7 +104,7 @@ public async Task InitializeAsync() _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:8081;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", CollectionName = $"testContainer", AllowTableCreation = true, From 14e599a52921e5c12ead5d348b40c41a1816d97d Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:47:04 +0200 Subject: [PATCH 07/43] test --- .github/workflows/dotnet.yml | 17 ----------------- .../TestContainers/CosmosTestContainer.cs | 8 ++++---- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index d4bd472..218a2ab 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -14,23 +14,6 @@ jobs: build-and-test: runs-on: ubuntu-latest - services: - cosmos: - image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator - container_name: cosmos - ports: - - 8081:8081 - - 10251:10251 - - 10252:10252 - - 10253:10253 - - 10254:10254 - expose: - - "8081" - - "10251-10255" - environment: - - AZURE_COSMOS_EMULATOR_PARTITION_COUNT=6 - - AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=false - - AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=127.0.0.1 steps: - uses: actions/checkout@v3 - name: Setup .NET diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 7addc55..86715d0 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -28,7 +28,7 @@ public class CosmosTestContainer : ITestContainer, public CosmosTestContainer() { - /*_cosmosTestContainer = new TestcontainersBuilder() + _cosmosTestContainer = new TestcontainersBuilder() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") .WithName(containerName) .WithExposedPort(8081) @@ -50,7 +50,7 @@ public CosmosTestContainer() .UntilPortIsAvailable(privatePort)) .Build(); - _dockerClient = new DockerClientConfiguration().CreateClient();*/ + _dockerClient = new DockerClientConfiguration().CreateClient(); } public IDatabaseCollection Collection => @@ -63,7 +63,7 @@ public string GenerateId() public async Task InitializeAsync() { - /*ushort publicPort = privatePort; + ushort publicPort = privatePort; try { @@ -93,7 +93,7 @@ public async Task InitializeAsync() containerId = containerListResponse.ID; } - }*/ + } var httpMessageHandler = new HttpClientHandler() { From ad097ac4f098e178323e86c58592aaf47bf7f43a Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:54:30 +0200 Subject: [PATCH 08/43] test --- .../TestContainers/CosmosTestContainer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 86715d0..a26dd5b 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -42,7 +42,8 @@ public CosmosTestContainer() .WithPortBinding(10252, 10252) .WithPortBinding(10253, 10253) .WithPortBinding(10254, 10254) - .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "6") + .WithPortBinding(8081, 8081) + .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") .WithCleanUp(false) @@ -104,7 +105,7 @@ public async Task InitializeAsync() _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:8081;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", CollectionName = $"testContainer", AllowTableCreation = true, From f1956b3d6f74a6a52f9ef1f6cfc4a2d2f07ba907 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 06:57:04 +0200 Subject: [PATCH 09/43] test --- .../TestContainers/CosmosTestContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index a26dd5b..f6ff202 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -113,7 +113,7 @@ public async Task InitializeAsync() { HttpClientFactory = () => new HttpClient(httpMessageHandler), ConnectionMode = ConnectionMode.Gateway, - RequestTimeout = TimeSpan.FromMinutes(3) + //RequestTimeout = TimeSpan.FromMinutes(3) }, }); From 0f9ab94174a56c72523b0bf08169bbaca5baf744 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 07:00:00 +0200 Subject: [PATCH 10/43] test --- .../CosmosTests/CosmosCollectionTests.cs | 4 +- .../TestContainers/CosmosTestContainer.cs | 117 +++++------------- 2 files changed, 36 insertions(+), 85 deletions(-) diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index 1213613..c66500f 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -10,10 +10,10 @@ namespace ManagedCode.Database.Tests.CosmosTests; -[Collection(nameof(CosmosTestContainer))] +//[Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { - public CosmosCollectionTests(CosmosTestContainer container) : base(container) + public CosmosCollectionTests() : base() { } diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index f6ff202..02449e0 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -1,57 +1,48 @@ using System; -using System.Linq; using System.Net.Http; using System.Threading.Tasks; -using Docker.DotNet; -using Docker.DotNet.Models; using DotNet.Testcontainers.Builders; using DotNet.Testcontainers.Containers; using ManagedCode.Database.Core; using ManagedCode.Database.Cosmos; using ManagedCode.Database.Tests.Common; using Microsoft.Azure.Cosmos; -using Xunit; namespace ManagedCode.Database.Tests.TestContainers; -[CollectionDefinition(nameof(CosmosTestContainer))] -public class CosmosTestContainer : ITestContainer, - ICollectionFixture, IDisposable +public class CosmosTestContainer : ITestContainer { - private readonly TestcontainersContainer _cosmosTestContainer; private CosmosDatabase _database; - private DockerClient _dockerClient; - private const string containerName = "cosmosContainer"; - private const ushort privatePort = 8081; - private bool containerExsist = false; - private string containerId; + private readonly TestcontainersContainer _cosmosContainer; public CosmosTestContainer() { - _cosmosTestContainer = new TestcontainersBuilder() + // Docker container for cosmos db is not working at all, to test database use local windows emulator + _cosmosContainer = new TestcontainersBuilder() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") - .WithName(containerName) + .WithName($"azure-cosmos-emulator{Guid.NewGuid().ToString("N")}") + // .WithExposedPort(8081) + // .WithExposedPort(10250) + // .WithExposedPort(10251) + // .WithExposedPort(10252) + // .WithExposedPort(10253) + // .WithExposedPort(10254) + // .WithExposedPort(10255) .WithExposedPort(8081) - .WithExposedPort(10251) - .WithExposedPort(10252) - .WithExposedPort(10253) - .WithExposedPort(10254) - .WithExposedPort(10255) .WithPortBinding(8081, 8081) + .WithPortBinding(10250, 10250) .WithPortBinding(10251, 10251) .WithPortBinding(10252, 10252) .WithPortBinding(10253, 10253) .WithPortBinding(10254, 10254) - .WithPortBinding(8081, 8081) + .WithPortBinding(10255, 10255) .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - .WithCleanUp(false) + //.WithCleanUp(true) .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(privatePort)) + .UntilPortIsAvailable(8081)) .Build(); - - _dockerClient = new DockerClientConfiguration().CreateClient(); } public IDatabaseCollection Collection => @@ -64,56 +55,27 @@ public string GenerateId() public async Task InitializeAsync() { - ushort publicPort = privatePort; - - try - { - await _cosmosTestContainer.StartAsync(); - - containerExsist = false; - } - catch (Exception ex) //TODO catch name already using exception - { - containerExsist = true; - } - - if (!containerExsist) - { - publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); - containerId = _cosmosTestContainer.Id; - } - else - { - var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); - - ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); - - if (containerListResponse != null) - { - publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; - - containerId = containerListResponse.ID; - } - } - - var httpMessageHandler = new HttpClientHandler() - { - ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator - }; - - + await _cosmosContainer.StartAsync(); + Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:{_cosmosContainer.GetMappedPublicPort(8081)}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", - CollectionName = $"testContainer", + CollectionName = "testContainer", AllowTableCreation = true, CosmosClientOptions = new CosmosClientOptions() { - HttpClientFactory = () => new HttpClient(httpMessageHandler), - ConnectionMode = ConnectionMode.Gateway, - //RequestTimeout = TimeSpan.FromMinutes(3) + HttpClientFactory = () => + { + HttpMessageHandler httpMessageHandler = new HttpClientHandler() + { + ServerCertificateCustomValidationCallback = (_, _, _, _) => true + }; + + return new HttpClient(httpMessageHandler); + }, + ConnectionMode = ConnectionMode.Gateway }, }); @@ -123,20 +85,9 @@ public async Task InitializeAsync() public async Task DisposeAsync() { - // await _database.DeleteAsync(); await _database.DisposeAsync(); - - /* _testOutputHelper.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); - _testOutputHelper.WriteLine("=STOP=");*/ - } - - public async void Dispose() - { - - await _dockerClient.Containers.RemoveContainerAsync(containerId, - new ContainerRemoveParameters - { - Force = true - }); + await _cosmosContainer.StopAsync(); + await _cosmosContainer.CleanUpAsync(); + Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); } -} +} \ No newline at end of file From 76305b106979cb19bbba63df80ea731606a6d61a Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 07:00:55 +0200 Subject: [PATCH 11/43] test --- .../CosmosTests/CosmosCollectionTests.cs | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index c66500f..2ba98d4 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -13,48 +13,48 @@ namespace ManagedCode.Database.Tests.CosmosTests; //[Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { - public CosmosCollectionTests() : base() + public CosmosCollectionTests() : base(new CosmosTestContainer()) { } -/* public override async Task DeleteItemById_WhenItemDoesntExists() - { - var baseMethod = () => base.DeleteItemById_WhenItemDoesntExists(); - - await baseMethod.Should().ThrowExactlyAsync(); - } - - public override async Task DeleteListOfItemsById_WhenItemsDontExist() - { - var baseMethod = () => base.DeleteListOfItemsById_WhenItemsDontExist(); - - await baseMethod.Should().ThrowExactlyAsync(); - } + /* public override async Task DeleteItemById_WhenItemDoesntExists() + { + var baseMethod = () => base.DeleteItemById_WhenItemDoesntExists(); - public override async Task DeleteListOfItems_WhenItemsDontExist() - { - var baseMethod = () => base.DeleteListOfItems_WhenItemsDontExist(); + await baseMethod.Should().ThrowExactlyAsync(); + } - await baseMethod.Should().ThrowExactlyAsync(); - } + public override async Task DeleteListOfItemsById_WhenItemsDontExist() + { + var baseMethod = () => base.DeleteListOfItemsById_WhenItemsDontExist(); - [Fact] - public override async Task DeleteCollectionAsync() - { - // Arrange - int itemsCount = 5; - List list = new(); + await baseMethod.Should().ThrowExactlyAsync(); + } - for (var i = 0; i < itemsCount; i++) + public override async Task DeleteListOfItems_WhenItemsDontExist() { - list.Add(CreateNewItem()); - } + var baseMethod = () => base.DeleteListOfItems_WhenItemsDontExist(); - await Collection.InsertAsync(list); - // Act - var isDeleted = await Collection.DeleteCollectionAsync(); + await baseMethod.Should().ThrowExactlyAsync(); + } - // Assert - isDeleted.Should().BeTrue(); - }*/ + [Fact] + public override async Task DeleteCollectionAsync() + { + // Arrange + int itemsCount = 5; + List list = new(); + + for (var i = 0; i < itemsCount; i++) + { + list.Add(CreateNewItem()); + } + + await Collection.InsertAsync(list); + // Act + var isDeleted = await Collection.DeleteCollectionAsync(); + + // Assert + isDeleted.Should().BeTrue(); + }*/ } \ No newline at end of file From 34391325a9c763a0b24692364513ae3b836c2108 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 07:04:26 +0200 Subject: [PATCH 12/43] test --- .../TestContainers/CosmosTestContainer.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 02449e0..6765622 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -75,7 +75,8 @@ public async Task InitializeAsync() return new HttpClient(httpMessageHandler); }, - ConnectionMode = ConnectionMode.Gateway + ConnectionMode = ConnectionMode.Gateway, + RequestTimeout = TimeSpan.FromMinutes(3) }, }); From 9f9e259f202d51074251a442fe6f9bb02dcbb90c Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 11:46:42 +0200 Subject: [PATCH 13/43] test --- .../CosmosTests/CosmosCollectionTests.cs | 2 +- .../InMemoryTests/InMemoryCollectionTests.cs | 4 +- .../InMemoryTests/InMemoryQueryableTests.cs | 4 +- .../TestContainers/CosmosTestContainer.cs | 116 +++++++++++++----- 4 files changed, 87 insertions(+), 39 deletions(-) diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index 2ba98d4..f0b347e 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -10,7 +10,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; -//[Collection(nameof(CosmosTestContainer))] +[Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { public CosmosCollectionTests() : base(new CosmosTestContainer()) diff --git a/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs b/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs index ed84978..ae6b14d 100644 --- a/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs +++ b/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs @@ -1,4 +1,4 @@ -using ManagedCode.Database.Tests.BaseTests; +/*using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; @@ -9,4 +9,4 @@ public class InMemoryCollectionTests : BaseCollectionTests public InMemoryCollectionTests() : base(new InMemoryTestContainer()) { } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs b/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs index 87ac3e7..759816b 100644 --- a/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs +++ b/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs @@ -1,4 +1,4 @@ -using ManagedCode.Database.Tests.BaseTests; +/*using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; @@ -9,4 +9,4 @@ public class InMemoryQueryableTests : BaseQueryableTests public InMemoryQueryableTests() : base(new InMemoryTestContainer()) { } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 6765622..f6ff202 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -1,48 +1,57 @@ using System; +using System.Linq; using System.Net.Http; using System.Threading.Tasks; +using Docker.DotNet; +using Docker.DotNet.Models; using DotNet.Testcontainers.Builders; using DotNet.Testcontainers.Containers; using ManagedCode.Database.Core; using ManagedCode.Database.Cosmos; using ManagedCode.Database.Tests.Common; using Microsoft.Azure.Cosmos; +using Xunit; namespace ManagedCode.Database.Tests.TestContainers; -public class CosmosTestContainer : ITestContainer +[CollectionDefinition(nameof(CosmosTestContainer))] +public class CosmosTestContainer : ITestContainer, + ICollectionFixture, IDisposable { + private readonly TestcontainersContainer _cosmosTestContainer; private CosmosDatabase _database; - private readonly TestcontainersContainer _cosmosContainer; + private DockerClient _dockerClient; + private const string containerName = "cosmosContainer"; + private const ushort privatePort = 8081; + private bool containerExsist = false; + private string containerId; public CosmosTestContainer() { - // Docker container for cosmos db is not working at all, to test database use local windows emulator - _cosmosContainer = new TestcontainersBuilder() + _cosmosTestContainer = new TestcontainersBuilder() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") - .WithName($"azure-cosmos-emulator{Guid.NewGuid().ToString("N")}") - // .WithExposedPort(8081) - // .WithExposedPort(10250) - // .WithExposedPort(10251) - // .WithExposedPort(10252) - // .WithExposedPort(10253) - // .WithExposedPort(10254) - // .WithExposedPort(10255) + .WithName(containerName) .WithExposedPort(8081) + .WithExposedPort(10251) + .WithExposedPort(10252) + .WithExposedPort(10253) + .WithExposedPort(10254) + .WithExposedPort(10255) .WithPortBinding(8081, 8081) - .WithPortBinding(10250, 10250) .WithPortBinding(10251, 10251) .WithPortBinding(10252, 10252) .WithPortBinding(10253, 10253) .WithPortBinding(10254, 10254) - .WithPortBinding(10255, 10255) + .WithPortBinding(8081, 8081) .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - //.WithCleanUp(true) + .WithCleanUp(false) .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(8081)) + .UntilPortIsAvailable(privatePort)) .Build(); + + _dockerClient = new DockerClientConfiguration().CreateClient(); } public IDatabaseCollection Collection => @@ -55,28 +64,56 @@ public string GenerateId() public async Task InitializeAsync() { - await _cosmosContainer.StartAsync(); - Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); + ushort publicPort = privatePort; + + try + { + await _cosmosTestContainer.StartAsync(); + + containerExsist = false; + } + catch (Exception ex) //TODO catch name already using exception + { + containerExsist = true; + } + + if (!containerExsist) + { + publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); + containerId = _cosmosTestContainer.Id; + } + else + { + var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); + + ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); + + if (containerListResponse != null) + { + publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; + + containerId = containerListResponse.ID; + } + } + + var httpMessageHandler = new HttpClientHandler() + { + ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + }; + + _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{_cosmosContainer.GetMappedPublicPort(8081)}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", - CollectionName = "testContainer", + CollectionName = $"testContainer", AllowTableCreation = true, CosmosClientOptions = new CosmosClientOptions() { - HttpClientFactory = () => - { - HttpMessageHandler httpMessageHandler = new HttpClientHandler() - { - ServerCertificateCustomValidationCallback = (_, _, _, _) => true - }; - - return new HttpClient(httpMessageHandler); - }, + HttpClientFactory = () => new HttpClient(httpMessageHandler), ConnectionMode = ConnectionMode.Gateway, - RequestTimeout = TimeSpan.FromMinutes(3) + //RequestTimeout = TimeSpan.FromMinutes(3) }, }); @@ -86,9 +123,20 @@ public async Task InitializeAsync() public async Task DisposeAsync() { + // await _database.DeleteAsync(); await _database.DisposeAsync(); - await _cosmosContainer.StopAsync(); - await _cosmosContainer.CleanUpAsync(); - Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); + + /* _testOutputHelper.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); + _testOutputHelper.WriteLine("=STOP=");*/ + } + + public async void Dispose() + { + + await _dockerClient.Containers.RemoveContainerAsync(containerId, + new ContainerRemoveParameters + { + Force = true + }); } -} \ No newline at end of file +} From f22f94c9431a878ea5c076070f8b22ec71a61f6f Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:15:30 +0200 Subject: [PATCH 14/43] test --- .../CosmosTests/CosmosCollectionTests.cs | 2 +- .../TestContainers/CosmosTestContainer.cs | 121 +++++------------- 2 files changed, 32 insertions(+), 91 deletions(-) diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index f0b347e..2ba98d4 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -10,7 +10,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; -[Collection(nameof(CosmosTestContainer))] +//[Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { public CosmosCollectionTests() : base(new CosmosTestContainer()) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index f6ff202..edda256 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -1,57 +1,39 @@ using System; -using System.Linq; using System.Net.Http; using System.Threading.Tasks; -using Docker.DotNet; -using Docker.DotNet.Models; using DotNet.Testcontainers.Builders; using DotNet.Testcontainers.Containers; using ManagedCode.Database.Core; using ManagedCode.Database.Cosmos; using ManagedCode.Database.Tests.Common; using Microsoft.Azure.Cosmos; -using Xunit; namespace ManagedCode.Database.Tests.TestContainers; -[CollectionDefinition(nameof(CosmosTestContainer))] -public class CosmosTestContainer : ITestContainer, - ICollectionFixture, IDisposable +public class CosmosTestContainer : ITestContainer { - private readonly TestcontainersContainer _cosmosTestContainer; private CosmosDatabase _database; - private DockerClient _dockerClient; - private const string containerName = "cosmosContainer"; - private const ushort privatePort = 8081; - private bool containerExsist = false; - private string containerId; + private readonly TestcontainersContainer _cosmosContainer; public CosmosTestContainer() { - _cosmosTestContainer = new TestcontainersBuilder() + // Docker container for cosmos db is not working at all, to test database use local windows emulator + _cosmosContainer = new TestcontainersBuilder() .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") - .WithName(containerName) - .WithExposedPort(8081) - .WithExposedPort(10251) - .WithExposedPort(10252) - .WithExposedPort(10253) - .WithExposedPort(10254) - .WithExposedPort(10255) - .WithPortBinding(8081, 8081) - .WithPortBinding(10251, 10251) - .WithPortBinding(10252, 10252) - .WithPortBinding(10253, 10253) - .WithPortBinding(10254, 10254) - .WithPortBinding(8081, 8081) + .WithName($"azure-cosmos-emulator{Guid.NewGuid().ToString("N")}") + //.WithExposedPort(8081) + .WithPortBinding(8081, true) + .WithPortBinding(10251, true) + .WithPortBinding(10252, true) + .WithPortBinding(10253, true) + .WithPortBinding(10254, true) .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - .WithCleanUp(false) + //.WithCleanUp(true) .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(privatePort)) + .UntilPortIsAvailable(8081)) .Build(); - - _dockerClient = new DockerClientConfiguration().CreateClient(); } public IDatabaseCollection Collection => @@ -64,79 +46,38 @@ public string GenerateId() public async Task InitializeAsync() { - ushort publicPort = privatePort; - - try - { - await _cosmosTestContainer.StartAsync(); - - containerExsist = false; - } - catch (Exception ex) //TODO catch name already using exception - { - containerExsist = true; - } - - if (!containerExsist) - { - publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); - containerId = _cosmosTestContainer.Id; - } - else - { - var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); - - ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); - - if (containerListResponse != null) - { - publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; - - containerId = containerListResponse.ID; - } - } - - var httpMessageHandler = new HttpClientHandler() - { - ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator - }; - - + await _cosmosContainer.StartAsync(); + Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:{_cosmosContainer.GetMappedPublicPort(8081)}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", - CollectionName = $"testContainer", + CollectionName = "testContainer", AllowTableCreation = true, CosmosClientOptions = new CosmosClientOptions() { - HttpClientFactory = () => new HttpClient(httpMessageHandler), - ConnectionMode = ConnectionMode.Gateway, - //RequestTimeout = TimeSpan.FromMinutes(3) + HttpClientFactory = () => + { + HttpMessageHandler httpMessageHandler = new HttpClientHandler() + { + ServerCertificateCustomValidationCallback = (_, _, _, _) => true + }; + + return new HttpClient(httpMessageHandler); + }, + ConnectionMode = ConnectionMode.Gateway }, }); - await _database.InitializeAsync(); } public async Task DisposeAsync() { - // await _database.DeleteAsync(); await _database.DisposeAsync(); - - /* _testOutputHelper.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); - _testOutputHelper.WriteLine("=STOP=");*/ - } - - public async void Dispose() - { - - await _dockerClient.Containers.RemoveContainerAsync(containerId, - new ContainerRemoveParameters - { - Force = true - }); + await _cosmosContainer.StopAsync(); + await _cosmosContainer.CleanUpAsync(); + Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); } -} +} \ No newline at end of file From a110ad294302afb39d6dd058ca1047c9d484c311 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:18:30 +0200 Subject: [PATCH 15/43] test --- .../TestContainers/CosmosTestContainer.cs | 56 ++++++++----------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index edda256..541e831 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -12,46 +12,27 @@ namespace ManagedCode.Database.Tests.TestContainers; public class CosmosTestContainer : ITestContainer { - private CosmosDatabase _database; + private static int _port = 20000; + + private readonly CosmosDatabase _database; private readonly TestcontainersContainer _cosmosContainer; public CosmosTestContainer() { - // Docker container for cosmos db is not working at all, to test database use local windows emulator + var port = ++_port; + _cosmosContainer = new TestcontainersBuilder() - .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") - .WithName($"azure-cosmos-emulator{Guid.NewGuid().ToString("N")}") - //.WithExposedPort(8081) - .WithPortBinding(8081, true) - .WithPortBinding(10251, true) - .WithPortBinding(10252, true) - .WithPortBinding(10253, true) - .WithPortBinding(10254, true) - .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") - .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") + .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest") + .WithPortBinding(port, 8081) + .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "30") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - //.WithCleanUp(true) - .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(8081)) + .WithWaitStrategy(Wait.ForUnixContainer()) .Build(); - } - public IDatabaseCollection Collection => - _database.GetCollection(); - - public string GenerateId() - { - return $"{Guid.NewGuid():N}"; - } - - public async Task InitializeAsync() - { - await _cosmosContainer.StartAsync(); - Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{_cosmosContainer.GetMappedPublicPort(8081)}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:{port};AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", CollectionName = "testContainer", AllowTableCreation = true, @@ -61,7 +42,8 @@ public async Task InitializeAsync() { HttpMessageHandler httpMessageHandler = new HttpClientHandler() { - ServerCertificateCustomValidationCallback = (_, _, _, _) => true + ServerCertificateCustomValidationCallback = + HttpClientHandler.DangerousAcceptAnyServerCertificateValidator }; return new HttpClient(httpMessageHandler); @@ -69,7 +51,19 @@ public async Task InitializeAsync() ConnectionMode = ConnectionMode.Gateway }, }); + } + public IDatabaseCollection Collection => + _database.GetCollection(); + + public string GenerateId() + { + return $"{Guid.NewGuid():N}"; + } + + public async Task InitializeAsync() + { + await _cosmosContainer.StartAsync(); await _database.InitializeAsync(); } @@ -77,7 +71,5 @@ public async Task DisposeAsync() { await _database.DisposeAsync(); await _cosmosContainer.StopAsync(); - await _cosmosContainer.CleanUpAsync(); - Console.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); } } \ No newline at end of file From 515ced7b84548e06e9aac476d0c2a0f48a55a463 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:20:43 +0200 Subject: [PATCH 16/43] new tests --- .../TestContainers/CosmosTestContainer.cs | 123 ++++++++++++++---- 1 file changed, 96 insertions(+), 27 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 541e831..ec9430f 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -1,40 +1,107 @@ using System; +using System.Linq; using System.Net.Http; using System.Threading.Tasks; +using Docker.DotNet; +using Docker.DotNet.Models; using DotNet.Testcontainers.Builders; using DotNet.Testcontainers.Containers; using ManagedCode.Database.Core; using ManagedCode.Database.Cosmos; using ManagedCode.Database.Tests.Common; using Microsoft.Azure.Cosmos; +using Xunit; namespace ManagedCode.Database.Tests.TestContainers; -public class CosmosTestContainer : ITestContainer +[CollectionDefinition(nameof(CosmosTestContainer))] +public class CosmosTestContainer : ITestContainer, + ICollectionFixture, IDisposable { - private static int _port = 20000; - - private readonly CosmosDatabase _database; - private readonly TestcontainersContainer _cosmosContainer; + private readonly TestcontainersContainer _cosmosTestContainer; + private CosmosDatabase _database; + private DockerClient _dockerClient; + private const string containerName = "cosmosContainer"; + private const ushort privatePort = 8081; + private bool containerExsist = false; + private string containerId; public CosmosTestContainer() { - var port = ++_port; - - _cosmosContainer = new TestcontainersBuilder() - .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest") - .WithPortBinding(port, 8081) - .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "30") + _cosmosTestContainer = new TestcontainersBuilder() + .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") + .WithName(containerName) + .WithExposedPort(8081) + .WithExposedPort(10251) + .WithExposedPort(10252) + .WithExposedPort(10253) + .WithExposedPort(10254) + .WithExposedPort(10255) + .WithPortBinding(8081, 8081) + .WithPortBinding(10251, 10251) + .WithPortBinding(10252, 10252) + .WithPortBinding(10253, 10253) + .WithPortBinding(10254, 10254) + .WithPortBinding(8081, 8081) + .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") + .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - .WithWaitStrategy(Wait.ForUnixContainer()) + .WithCleanUp(false) + .WithWaitStrategy(Wait.ForUnixContainer() + .UntilPortIsAvailable(privatePort)) .Build(); + _dockerClient = new DockerClientConfiguration().CreateClient(); + } + + public IDatabaseCollection Collection => + _database.GetCollection(); + + public string GenerateId() + { + return $"{Guid.NewGuid():N}"; + } + + public async Task InitializeAsync() + { + ushort publicPort = privatePort; + + try + { + await _cosmosTestContainer.StartAsync(); + + containerExsist = false; + } + catch (Exception ex) //TODO catch name already using exception + { + containerExsist = true; + } + + if (!containerExsist) + { + publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); + containerId = _cosmosTestContainer.Id; + } + else + { + var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); + + ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); + + if (containerListResponse != null) + { + publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; + + containerId = containerListResponse.ID; + } + } + _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{port};AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", - CollectionName = "testContainer", + CollectionName = $"testContainer", AllowTableCreation = true, CosmosClientOptions = new CosmosClientOptions() { @@ -51,25 +118,27 @@ public CosmosTestContainer() ConnectionMode = ConnectionMode.Gateway }, }); - } - public IDatabaseCollection Collection => - _database.GetCollection(); - - public string GenerateId() - { - return $"{Guid.NewGuid():N}"; - } - public async Task InitializeAsync() - { - await _cosmosContainer.StartAsync(); await _database.InitializeAsync(); } public async Task DisposeAsync() { + // await _database.DeleteAsync(); await _database.DisposeAsync(); - await _cosmosContainer.StopAsync(); + + /* _testOutputHelper.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); + _testOutputHelper.WriteLine("=STOP=");*/ + } + + public async void Dispose() + { + + await _dockerClient.Containers.RemoveContainerAsync(containerId, + new ContainerRemoveParameters + { + Force = true + }); } -} \ No newline at end of file +} From 3bf078010a8f02f3b401cdae2e652e1be2c787c7 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:25:15 +0200 Subject: [PATCH 17/43] test --- .../TestContainers/CosmosTestContainer.cs | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index ec9430f..0bc37fe 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -77,25 +77,20 @@ public async Task InitializeAsync() containerExsist = true; } - if (!containerExsist) + var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); + + ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); + + if (containerListResponse != null) { - publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); - containerId = _cosmosTestContainer.Id; + //publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; + publicPort = containerListResponse.Ports.FirstOrDefault().PublicPort; + + containerId = containerListResponse.ID; } - else - { - var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); - ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); - if (containerListResponse != null) - { - publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; - containerId = containerListResponse.ID; - } - } - _database = new CosmosDatabase(new CosmosOptions { ConnectionString = From 74e72cf506a885387338dc9d62f7ec902715492b Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:28:04 +0200 Subject: [PATCH 18/43] fix --- .../TestContainers/CosmosTestContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 0bc37fe..c7089b7 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -42,7 +42,7 @@ public CosmosTestContainer() .WithPortBinding(10252, 10252) .WithPortBinding(10253, 10253) .WithPortBinding(10254, 10254) - .WithPortBinding(8081, 8081) + // .WithPortBinding(8081, 8081) .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") From d11a4fcba262ae975c56ba57e5e387ca9aec3f63 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:31:21 +0200 Subject: [PATCH 19/43] fix --- .../TestContainers/CosmosTestContainer.cs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index c7089b7..b7cd921 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -42,7 +42,6 @@ public CosmosTestContainer() .WithPortBinding(10252, 10252) .WithPortBinding(10253, 10253) .WithPortBinding(10254, 10254) - // .WithPortBinding(8081, 8081) .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") @@ -77,20 +76,25 @@ public async Task InitializeAsync() containerExsist = true; } - var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); - - ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); - - if (containerListResponse != null) + if (!containerExsist) { - //publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; - publicPort = containerListResponse.Ports.FirstOrDefault().PublicPort; - - containerId = containerListResponse.ID; + publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); + containerId = _cosmosTestContainer.Id; } + else + { + var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); + ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); + if (containerListResponse != null) + { + publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; + containerId = containerListResponse.ID; + } + } + _database = new CosmosDatabase(new CosmosOptions { ConnectionString = From 4b3af6a68b614c5030b6a9ec6533e4aaab17c2a7 Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 12:54:19 +0200 Subject: [PATCH 20/43] fix --- .../TestContainers/CosmosTestContainer.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index b7cd921..ce768f2 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -114,7 +114,8 @@ public async Task InitializeAsync() return new HttpClient(httpMessageHandler); }, - ConnectionMode = ConnectionMode.Gateway + ConnectionMode = ConnectionMode.Gateway, + RequestTimeout = TimeSpan.FromMinutes(3) }, }); From b8a7af9b969a67458d23ee25675b1372f8b0295a Mon Sep 17 00:00:00 2001 From: Oleksii Sokol Date: Fri, 13 Jan 2023 13:14:26 +0200 Subject: [PATCH 21/43] fix --- .../TestContainers/CosmosTestContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index ce768f2..22b09a4 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -98,7 +98,7 @@ public async Task InitializeAsync() _database = new CosmosDatabase(new CosmosOptions { ConnectionString = - $"AccountEndpoint=https://localhost:{publicPort}/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", + $"AccountEndpoint=https://localhost:8081;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==", DatabaseName = "database", CollectionName = $"testContainer", AllowTableCreation = true, From b1980917519e8ddd1997d45ae83bf13b6a2e8303 Mon Sep 17 00:00:00 2001 From: ksemenenko Date: Tue, 17 Jan 2023 20:13:45 +0100 Subject: [PATCH 22/43] orleans --- ManagedCode.Database.sln | 9 +++ .../Class1.cs | 60 +++++++++++++++++++ ...edCode.Database.Orleans.Persistence.csproj | 17 ++++++ 3 files changed, 86 insertions(+) create mode 100644 Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs create mode 100644 Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj diff --git a/ManagedCode.Database.sln b/ManagedCode.Database.sln index 31ad67c..fa4ae21 100644 --- a/ManagedCode.Database.sln +++ b/ManagedCode.Database.sln @@ -27,6 +27,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ManagedCode.Database.ZoneTr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCode.Database.DynamoDB", "ManagedCode.Database.DynamoDB\ManagedCode.Database.DynamoDB.csproj", "{ED12ED3C-F0FB-4BC1-A283-BF6E74BA99A2}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Orleans", "Orleans", "{6408F3FF-28A1-4377-84A6-FCE0548AC306}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCode.Database.Orleans.Persistence", "Orleans\ManagedCode.Database.Orleans.Persistence\ManagedCode.Database.Orleans.Persistence.csproj", "{0558E9C2-D608-49F0-A094-9AEA0BAB800E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +77,10 @@ Global {ED12ED3C-F0FB-4BC1-A283-BF6E74BA99A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {ED12ED3C-F0FB-4BC1-A283-BF6E74BA99A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {ED12ED3C-F0FB-4BC1-A283-BF6E74BA99A2}.Release|Any CPU.Build.0 = Release|Any CPU + {0558E9C2-D608-49F0-A094-9AEA0BAB800E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0558E9C2-D608-49F0-A094-9AEA0BAB800E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0558E9C2-D608-49F0-A094-9AEA0BAB800E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0558E9C2-D608-49F0-A094-9AEA0BAB800E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -87,6 +95,7 @@ Global {46AD78EF-B94E-44C2-8CFE-13E8851610F8} = {B34993FC-20CB-4E46-86D7-8B8A30B3FABE} {8F382CD4-7E0A-41E1-BB91-96E58F3F166C} = {9D86DFE5-1381-4621-8AC4-DC502CE5F43B} {ED12ED3C-F0FB-4BC1-A283-BF6E74BA99A2} = {9D86DFE5-1381-4621-8AC4-DC502CE5F43B} + {0558E9C2-D608-49F0-A094-9AEA0BAB800E} = {6408F3FF-28A1-4377-84A6-FCE0548AC306} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {481455E7-0A98-4AB2-9F00-F32D40AB884D} diff --git a/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs b/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs new file mode 100644 index 0000000..660729d --- /dev/null +++ b/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs @@ -0,0 +1,60 @@ +using System.Net; +using ManagedCode.Database.Core; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Orleans.Configuration; +using Orleans.Runtime; +using Orleans.Storage; + +namespace ManagedCode.Database.Orleans.Persistence; + +public class DatabaseGrainStorage : IGrainStorage, IRestExceptionDecoder, ILifecycleParticipant where TItem : IItem +{ + private readonly IDatabase _database; + private readonly IDatabaseCollection _collection; + + public DatabaseGrainStorage( + string name, + // AzureTableStorageOptions options, + IOptions clusterOptions, + IServiceProvider services, + // ILogger logger, + IDatabase database, + IDatabaseCollection collection + + ) + { + _database = database; + _collection = collection; + // this.options = options; + // this.clusterOptions = clusterOptions.Value; + // this.name = name; + // this.storageSerializer = options.GrainStorageSerializer; + // this.logger = logger; + } + + public Task ReadStateAsync(string stateName, GrainId grainId, IGrainState grainState) + { + _collection.GetAsync() + } + + public Task WriteStateAsync(string stateName, GrainId grainId, IGrainState grainState) + { + throw new NotImplementedException(); + } + + public Task ClearStateAsync(string stateName, GrainId grainId, IGrainState grainState) + { + throw new NotImplementedException(); + } + + public bool DecodeException(Exception exception, out HttpStatusCode httpStatusCode, out string restStatus, bool getExtendedErrors = false) + { + throw new NotImplementedException(); + } + + public void Participate(ISiloLifecycle observer) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj b/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj new file mode 100644 index 0000000..3a9fbc9 --- /dev/null +++ b/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj @@ -0,0 +1,17 @@ + + + + net7.0 + enable + enable + + + + + + + + + + + From b22a40832c98fe9e0051b93c28ecb4120a2c5f69 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:34:25 +0100 Subject: [PATCH 23/43] cosmosdb --- .github/workflows/dotnet.yml | 31 ++++++++++++++----- .../ManagedCode.Database.AzureTables.csproj | 2 +- .../ManagedCode.Database.Cosmos.csproj | 2 +- .../ManagedCode.Database.DynamoDB.csproj | 4 +-- .../ManagedCode.Database.LiteDB.csproj | 4 +-- .../ManagedCode.Database.MongoDB.csproj | 4 +-- .../ManagedCode.Database.SQLite.csproj | 2 +- ...anagedCode.Database.Tests.Benchmark.csproj | 8 ++--- .../BaseTests/BaseCollectionTests.cs | 4 +-- .../CosmosTests/CosmosCollectionTests.cs | 12 ++++--- .../CosmosTests/CosmosQueryableTests.cs | 6 ++-- .../ManagedCode.Database.Tests.csproj | 10 +++--- .../TestContainers/CosmosTestContainer.cs | 28 +++++++---------- .../ManagedCode.Database.ZoneTree.csproj | 2 +- .../Class1.cs | 3 +- ...edCode.Database.Orleans.Persistence.csproj | 2 +- 16 files changed, 70 insertions(+), 54 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 218a2ab..914ee60 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -1,4 +1,4 @@ -name: .NET + name: .NET on: push: @@ -10,9 +10,9 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -jobs: - build-and-test: +jobs: + build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -20,14 +20,29 @@ jobs: uses: actions/setup-dotnet@v3 with: dotnet-version: 7.0.x - - # run build and test + + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build + + cosmosdb: + needs: setup + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: 7.0.x + - name: Restore dependencies run: dotnet restore - - name: Build - run: dotnet build --no-restore + - name: build + run: dotnet build /p:DefineConstants="HELLO;WORLD" - name: Test - run: dotnet test --no-build --verbosity normal /p:CollectCoverage=true /p:CoverletOutputFormat=lcov /p:CoverletOutput=ManagedCode.Repository.Tests/lcov.info + run: dotnet test --no-build + #- name: coverlet # uses: b3b00/coverlet-action@1.1.9 diff --git a/ManagedCode.Database.AzureTables/ManagedCode.Database.AzureTables.csproj b/ManagedCode.Database.AzureTables/ManagedCode.Database.AzureTables.csproj index 838a60f..b7a4749 100644 --- a/ManagedCode.Database.AzureTables/ManagedCode.Database.AzureTables.csproj +++ b/ManagedCode.Database.AzureTables/ManagedCode.Database.AzureTables.csproj @@ -25,7 +25,7 @@ - + diff --git a/ManagedCode.Database.Cosmos/ManagedCode.Database.Cosmos.csproj b/ManagedCode.Database.Cosmos/ManagedCode.Database.Cosmos.csproj index 51541f0..3647c1c 100644 --- a/ManagedCode.Database.Cosmos/ManagedCode.Database.Cosmos.csproj +++ b/ManagedCode.Database.Cosmos/ManagedCode.Database.Cosmos.csproj @@ -23,7 +23,7 @@ - + diff --git a/ManagedCode.Database.DynamoDB/ManagedCode.Database.DynamoDB.csproj b/ManagedCode.Database.DynamoDB/ManagedCode.Database.DynamoDB.csproj index 0966c21..2d9b87f 100644 --- a/ManagedCode.Database.DynamoDB/ManagedCode.Database.DynamoDB.csproj +++ b/ManagedCode.Database.DynamoDB/ManagedCode.Database.DynamoDB.csproj @@ -23,9 +23,9 @@ - + - + diff --git a/ManagedCode.Database.LiteDB/ManagedCode.Database.LiteDB.csproj b/ManagedCode.Database.LiteDB/ManagedCode.Database.LiteDB.csproj index ee854c7..a65dfff 100644 --- a/ManagedCode.Database.LiteDB/ManagedCode.Database.LiteDB.csproj +++ b/ManagedCode.Database.LiteDB/ManagedCode.Database.LiteDB.csproj @@ -23,8 +23,8 @@ - - + + diff --git a/ManagedCode.Database.MongoDB/ManagedCode.Database.MongoDB.csproj b/ManagedCode.Database.MongoDB/ManagedCode.Database.MongoDB.csproj index a04ae76..3defa95 100644 --- a/ManagedCode.Database.MongoDB/ManagedCode.Database.MongoDB.csproj +++ b/ManagedCode.Database.MongoDB/ManagedCode.Database.MongoDB.csproj @@ -25,8 +25,8 @@ - - + + diff --git a/ManagedCode.Database.SQLite/ManagedCode.Database.SQLite.csproj b/ManagedCode.Database.SQLite/ManagedCode.Database.SQLite.csproj index 9e5dd2e..0f230de 100644 --- a/ManagedCode.Database.SQLite/ManagedCode.Database.SQLite.csproj +++ b/ManagedCode.Database.SQLite/ManagedCode.Database.SQLite.csproj @@ -24,7 +24,7 @@ - + diff --git a/ManagedCode.Database.Tests.Benchmark/ManagedCode.Database.Tests.Benchmark.csproj b/ManagedCode.Database.Tests.Benchmark/ManagedCode.Database.Tests.Benchmark.csproj index 58ee124..d1833fa 100644 --- a/ManagedCode.Database.Tests.Benchmark/ManagedCode.Database.Tests.Benchmark.csproj +++ b/ManagedCode.Database.Tests.Benchmark/ManagedCode.Database.Tests.Benchmark.csproj @@ -11,11 +11,11 @@ - - - + + + - + diff --git a/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs b/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs index 55fe6f4..ea0afe5 100644 --- a/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs +++ b/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs @@ -53,7 +53,7 @@ public virtual async Task InsertOneItem_ReturnsInsertedItem() // Assert insertItem.Should().NotBeNull(); } -/* + [Fact] public virtual async Task InsertItem_WhenItemExist_ShouldThrowDatabaseException() { @@ -393,7 +393,7 @@ public virtual async Task GetById_WrongId_ReturnNull() // Assert getItemResult.Should().BeNull(); - }*/ + } #endregion } \ No newline at end of file diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index 2ba98d4..1c5d8de 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -10,14 +10,15 @@ namespace ManagedCode.Database.Tests.CosmosTests; -//[Collection(nameof(CosmosTestContainer))] +#if COSMOSDB +[Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { - public CosmosCollectionTests() : base(new CosmosTestContainer()) + public CosmosCollectionTests(ITestOutputHelper testOutputHelper, CosmosTestContainer container) : base(container) { } - /* public override async Task DeleteItemById_WhenItemDoesntExists() + public override async Task DeleteItemById_WhenItemDoesntExists() { var baseMethod = () => base.DeleteItemById_WhenItemDoesntExists(); @@ -56,5 +57,6 @@ public override async Task DeleteCollectionAsync() // Assert isDeleted.Should().BeTrue(); - }*/ -} \ No newline at end of file + } +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs index d1dfced..b914cb4 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs @@ -1,4 +1,4 @@ -/*using FluentAssertions; +using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; @@ -9,6 +9,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; +#if COSMOSDB [Collection(nameof(CosmosTestContainer))] public class CosmosQueryableTests : BaseQueryableTests { @@ -108,4 +109,5 @@ public override async Task Take_NegativeNumber_ReturnZero() await baseMethod.Should().ThrowExactlyAsync(); } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/ManagedCode.Database.Tests.csproj b/ManagedCode.Database.Tests/ManagedCode.Database.Tests.csproj index 213071c..ec521de 100644 --- a/ManagedCode.Database.Tests/ManagedCode.Database.Tests.csproj +++ b/ManagedCode.Database.Tests/ManagedCode.Database.Tests.csproj @@ -22,13 +22,13 @@ - - - - + + + + - + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 22b09a4..5628b65 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -18,7 +18,7 @@ namespace ManagedCode.Database.Tests.TestContainers; public class CosmosTestContainer : ITestContainer, ICollectionFixture, IDisposable { - private readonly TestcontainersContainer _cosmosTestContainer; + private readonly IContainer _cosmosTestContainer; private CosmosDatabase _database; private DockerClient _dockerClient; private const string containerName = "cosmosContainer"; @@ -28,9 +28,9 @@ public class CosmosTestContainer : ITestContainer, public CosmosTestContainer() { - _cosmosTestContainer = new TestcontainersBuilder() - .WithImage("mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator") - .WithName(containerName) + _cosmosTestContainer = new ContainerBuilder() + .WithImage("mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator") +// .WithName(containerName) .WithExposedPort(8081) .WithExposedPort(10251) .WithExposedPort(10252) @@ -38,16 +38,12 @@ public CosmosTestContainer() .WithExposedPort(10254) .WithExposedPort(10255) .WithPortBinding(8081, 8081) - .WithPortBinding(10251, 10251) - .WithPortBinding(10252, 10252) - .WithPortBinding(10253, 10253) - .WithPortBinding(10254, 10254) + .WithEnvironment("ACCEPT_EULA", "Y") .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - .WithCleanUp(false) - .WithWaitStrategy(Wait.ForUnixContainer() - .UntilPortIsAvailable(privatePort)) + .WithWaitStrategy(Wait.ForWindowsContainer() + .UntilPortIsAvailable(8081)) .Build(); _dockerClient = new DockerClientConfiguration().CreateClient(); @@ -135,10 +131,10 @@ public async Task DisposeAsync() public async void Dispose() { - await _dockerClient.Containers.RemoveContainerAsync(containerId, - new ContainerRemoveParameters - { - Force = true - }); + // await _dockerClient.Containers.RemoveContainerAsync(containerId, + // new ContainerRemoveParameters + // { + // Force = true + // }); } } diff --git a/ManagedCode.Database.ZoneTree/ManagedCode.Database.ZoneTree.csproj b/ManagedCode.Database.ZoneTree/ManagedCode.Database.ZoneTree.csproj index 5579350..9d80a05 100644 --- a/ManagedCode.Database.ZoneTree/ManagedCode.Database.ZoneTree.csproj +++ b/ManagedCode.Database.ZoneTree/ManagedCode.Database.ZoneTree.csproj @@ -21,7 +21,7 @@ - + diff --git a/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs b/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs index 660729d..f10d540 100644 --- a/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs +++ b/Orleans/ManagedCode.Database.Orleans.Persistence/Class1.cs @@ -35,7 +35,8 @@ IDatabaseCollection collection public Task ReadStateAsync(string stateName, GrainId grainId, IGrainState grainState) { - _collection.GetAsync() + //_collection.GetAsync() + return Task.CompletedTask; } public Task WriteStateAsync(string stateName, GrainId grainId, IGrainState grainState) diff --git a/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj b/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj index 3a9fbc9..2ab9727 100644 --- a/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj +++ b/Orleans/ManagedCode.Database.Orleans.Persistence/ManagedCode.Database.Orleans.Persistence.csproj @@ -7,7 +7,7 @@ - + From fc8e10cc28f6c884452a7043986815572bdbdee1 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:35:22 +0100 Subject: [PATCH 24/43] name --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 914ee60..4c91df5 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -1,4 +1,4 @@ - name: .NET +name: .NET on: push: From 5c79db4905dc362cbf3f9339df08eb324c225f24 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:36:19 +0100 Subject: [PATCH 25/43] pipine --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 4c91df5..d566c69 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -27,7 +27,7 @@ jobs: run: dotnet build cosmosdb: - needs: setup + needs: build runs-on: windows-latest steps: - uses: actions/checkout@v3 From 607e9998dd531b20530edacb9a7b303bc55319d3 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:39:42 +0100 Subject: [PATCH 26/43] COSMOSDB --- .github/workflows/dotnet.yml | 2 +- ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs | 2 +- ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index d566c69..803c474 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -39,7 +39,7 @@ jobs: - name: Restore dependencies run: dotnet restore - name: build - run: dotnet build /p:DefineConstants="HELLO;WORLD" + run: dotnet build /p:DefineConstants="COSMOSDB" - name: Test run: dotnet test --no-build diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index 1c5d8de..d1a450f 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -10,7 +10,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; -#if COSMOSDB +#if COSMOSDB || DEBUG [Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs index b914cb4..4ca03a5 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs @@ -9,7 +9,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; -#if COSMOSDB +#if COSMOSDB || DEBUG [Collection(nameof(CosmosTestContainer))] public class CosmosQueryableTests : BaseQueryableTests { From 2be1e52fe39ab5ca756dd2eb699f5f75195ca805 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:43:54 +0100 Subject: [PATCH 27/43] build --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 803c474..1fdbfd6 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -39,7 +39,7 @@ jobs: - name: Restore dependencies run: dotnet restore - name: build - run: dotnet build /p:DefineConstants="COSMOSDB" + run: dotnet build -p:DefineConstants=COSMOSDB - name: Test run: dotnet test --no-build From b35e0cc3bd83cd25d4e4f8912cb2521ddf172640 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:57:53 +0100 Subject: [PATCH 28/43] cosmosdb --- .github/workflows/dotnet.yml | 32 ++++++++++++++++--- .../AzureTablesCollectionTests.cs | 6 ++-- .../AzureTablesQueryableTests.cs | 5 +-- .../CosmosTests/CosmosCollectionTests.cs | 2 +- .../CosmosTests/CosmosQueryableTests.cs | 2 +- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 1fdbfd6..4d80e21 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -6,6 +6,8 @@ on: pull_request: branches: [ main ] +env: + DOT_NET: 7.0.x # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -19,14 +21,14 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: $DOT_NET - name: Restore dependencies run: dotnet restore - name: build run: dotnet build - cosmosdb: + cosmos-db: needs: build runs-on: windows-latest steps: @@ -34,15 +36,37 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: 7.0.x + dotnet-version: $DOT_NET - name: Restore dependencies run: dotnet restore - name: build - run: dotnet build -p:DefineConstants=COSMOSDB + run: dotnet build -p:DefineConstants=COSMOS_DB - name: Test run: dotnet test --no-build + azure-tables: + needs: build + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: $DOT_NET + + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=AZURE_TABLES + - name: Test + run: dotnet test --no-build + + + + + + #- name: coverlet # uses: b3b00/coverlet-action@1.1.9 diff --git a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs index 79a706c..a215349 100644 --- a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs +++ b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesCollectionTests.cs @@ -1,4 +1,4 @@ -/*using Azure; +using Azure; using FluentAssertions; using ManagedCode.Database.AzureTables; using ManagedCode.Database.Core.Exceptions; @@ -13,6 +13,7 @@ namespace ManagedCode.Database.Tests.AzureTablesTests; +#if AZURE_TABLES || DEBUG [Collection(nameof(AzureTablesTestContainer))] public class AzureTablesCollectionTests : BaseCollectionTests { @@ -86,4 +87,5 @@ public override async Task DeleteAll() deletedItems.Should().BeTrue(); await countAction.Should().ThrowExactlyAsync(); } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs index 79f38ad..3fcdb42 100644 --- a/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs +++ b/ManagedCode.Database.Tests/AzureTablesTests/AzureTablesQueryableTests.cs @@ -1,4 +1,4 @@ -/*using FluentAssertions; +using FluentAssertions; using ManagedCode.Database.AzureTables; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; @@ -10,6 +10,7 @@ namespace ManagedCode.Database.Tests.AzureTablesTests; +#if AZURE_TABLES || DEBUG [Collection(nameof(AzureTablesTestContainer))] public class AzureTablesQueryableTests : BaseQueryableTests { @@ -37,4 +38,4 @@ await itemsResult .ThrowAsync(); } } -*/ \ No newline at end of file +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs index d1a450f..b6210c9 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosCollectionTests.cs @@ -10,7 +10,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; -#if COSMOSDB || DEBUG +#if COSMOS_DB || DEBUG [Collection(nameof(CosmosTestContainer))] public class CosmosCollectionTests : BaseCollectionTests { diff --git a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs index 4ca03a5..9a18a48 100644 --- a/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs +++ b/ManagedCode.Database.Tests/CosmosTests/CosmosQueryableTests.cs @@ -9,7 +9,7 @@ namespace ManagedCode.Database.Tests.CosmosTests; -#if COSMOSDB || DEBUG +#if COSMOS_DB || DEBUG [Collection(nameof(CosmosTestContainer))] public class CosmosQueryableTests : BaseQueryableTests { From 55fa1e079331428b50a53011d5e50cfe730ea996 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 09:59:11 +0100 Subject: [PATCH 29/43] dotnetn --- .github/workflows/dotnet.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 4d80e21..1e6754d 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -21,7 +21,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $DOT_NET + dotnet-version: $env.DOT_NET - name: Restore dependencies run: dotnet restore @@ -36,7 +36,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $DOT_NET + dotnet-version: $env.DOT_NET - name: Restore dependencies run: dotnet restore From db2993acaac95359a0d14dfe13dbd6753af70818 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 11:37:04 +0100 Subject: [PATCH 30/43] env --- .github/workflows/dotnet.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 1e6754d..062bd6b 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -21,7 +21,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $env.DOT_NET + dotnet-version: ${{ env.DOT_NET }} - name: Restore dependencies run: dotnet restore @@ -53,7 +53,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $DOT_NET + dotnet-version: ${{ env.DOT_NET }} - name: Restore dependencies run: dotnet restore From e7b78e8010cce31530589b30d62c094f39db5829 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 11:40:13 +0100 Subject: [PATCH 31/43] dotnet --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 062bd6b..83e2f6f 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -7,7 +7,7 @@ on: branches: [ main ] env: - DOT_NET: 7.0.x + DOT_NET: "7.0.x" # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From 622de54fd69581af81eeb46a9aea01e734b49890 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 11:45:21 +0100 Subject: [PATCH 32/43] var --- .github/workflows/dotnet.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 83e2f6f..2691678 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -6,7 +6,7 @@ on: pull_request: branches: [ main ] -env: +variables: DOT_NET: "7.0.x" # Allows you to run this workflow manually from the Actions tab @@ -21,7 +21,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: ${{ env.DOT_NET }} + dotnet-version: $DOT_NET - name: Restore dependencies run: dotnet restore @@ -36,7 +36,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $env.DOT_NET + dotnet-version: $DOT_NET - name: Restore dependencies run: dotnet restore @@ -53,7 +53,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: ${{ env.DOT_NET }} + dotnet-version: $DOT_NET - name: Restore dependencies run: dotnet restore From 8768d741218f3158a20d6cf57027c6e0cf56ca1c Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 12:42:26 +0100 Subject: [PATCH 33/43] DOT_NET_VERSION --- .github/workflows/dotnet.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 2691678..21ce3a2 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -6,8 +6,8 @@ on: pull_request: branches: [ main ] -variables: - DOT_NET: "7.0.x" +env: + DOT_NET_VERSION: "7.0.x" # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -21,7 +21,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $DOT_NET + dotnet-version: ${{ env.DOT_NET_VERSION }} - name: Restore dependencies run: dotnet restore @@ -36,7 +36,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $DOT_NET + dotnet-version: ${{ env.DOT_NET_VERSION }} - name: Restore dependencies run: dotnet restore @@ -53,7 +53,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: $DOT_NET + dotnet-version: ${{ env.DOT_NET_VERSION }} - name: Restore dependencies run: dotnet restore From 3c83d55f9be1cfdef2e65b80b82e0c5a542e942e Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 12:58:01 +0100 Subject: [PATCH 34/43] mongodb --- .github/workflows/dotnet.yml | 17 ++++++++++++++++- .../MongoDBTests/MongoDBCollectionTests.cs | 6 ++++-- .../MongoDBTests/MongoDBQueryableTests.cs | 6 ++++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 21ce3a2..6169d4c 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -47,7 +47,7 @@ jobs: azure-tables: needs: build - runs-on: windows-latest + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup .NET @@ -62,7 +62,22 @@ jobs: - name: Test run: dotnet test --no-build +mongo-db: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOT_NET_VERSION }} + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=MONGO_DB + - name: Test + run: dotnet test --no-build diff --git a/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs b/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs index 5b812f2..a6b1b04 100644 --- a/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs +++ b/ManagedCode.Database.Tests/MongoDBTests/MongoDBCollectionTests.cs @@ -1,4 +1,4 @@ -/*using FluentAssertions; +using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; @@ -9,10 +9,12 @@ namespace ManagedCode.Database.Tests.MongoDBTests; +#if MONGO_DB || DEBUG [Collection(nameof(MongoDBTestContainer))] public class MongoDBCollectionTests : BaseCollectionTests { public MongoDBCollectionTests(MongoDBTestContainer container) : base(container) { } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/MongoDBTests/MongoDBQueryableTests.cs b/ManagedCode.Database.Tests/MongoDBTests/MongoDBQueryableTests.cs index 7da9c64..2d6650b 100644 --- a/ManagedCode.Database.Tests/MongoDBTests/MongoDBQueryableTests.cs +++ b/ManagedCode.Database.Tests/MongoDBTests/MongoDBQueryableTests.cs @@ -1,4 +1,4 @@ -/*using System; +using System; using System.Threading.Tasks; using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; @@ -11,6 +11,7 @@ namespace ManagedCode.Database.Tests.MongoDBTests; +#if MONGO_DB || DEBUG [Collection(nameof(MongoDBTestContainer))] public class MongoDBQueryableTests : BaseQueryableTests { @@ -130,4 +131,5 @@ public override async Task Take_NegativeNumber_ReturnZero() await baseMethod.Should().ThrowExactlyAsync(); } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file From 9723435c536fd5e6d277c8d4157f2722704cd05b Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 12:58:49 +0100 Subject: [PATCH 35/43] pipline --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 6169d4c..0aac0b7 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -62,7 +62,7 @@ jobs: - name: Test run: dotnet test --no-build -mongo-db: + mongo-db: needs: build runs-on: ubuntu-latest steps: From ed254b7f4625709c4f1037270e80c0c374293a42 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 13:12:58 +0100 Subject: [PATCH 36/43] tests --- .github/workflows/dotnet.yml | 88 +- .../DynamoDbTests/DynamoDBQueryableTests.cs | 6 +- .../DynamoDbTests/DynamoDbCollectionTests.cs | 6 +- .../InMemoryTests/InMemoryCollectionTests.cs | 6 +- .../InMemoryTests/InMemoryQueryableTests.cs | 6 +- .../LiteDBTests/LiteDBCollectionTests.cs | 94 +- .../LiteDBTests/LiteDBQueryableTests.cs | 1412 +++++++++-------- .../SQLiteTests/SQLiteCollectionTests.cs | 26 +- .../SQLiteTests/SQLiteQueryableTests.cs | 1390 ++++++++-------- .../TestContainers/CosmosTestContainer.cs | 36 +- .../ZoneTreeTests/ZoneTreeCollectionTests.cs | 92 +- .../ZoneTreeTests/ZoneTreeQueryableTests.cs | 108 +- 12 files changed, 1688 insertions(+), 1582 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 0aac0b7..07dedd6 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -27,11 +27,81 @@ jobs: run: dotnet restore - name: build run: dotnet build - + + in-memory: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOT_NET_VERSION }} + + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=IN_MEMORY + - name: Test + run: dotnet test --no-build + + lite-db: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOT_NET_VERSION }} + + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=LITE_DB + - name: Test + run: dotnet test --no-build + + sqlite: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOT_NET_VERSION }} + + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=SQLITE + - name: Test + run: dotnet test --no-build + + zone-tree: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOT_NET_VERSION }} + + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=ZONE_TREE + - name: Test + run: dotnet test --no-build + + cosmos-db: needs: build runs-on: windows-latest steps: + - uses: actions/azurecosmosaction@latest - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 @@ -78,7 +148,23 @@ jobs: run: dotnet build -p:DefineConstants=MONGO_DB - name: Test run: dotnet test --no-build + + dynamo-db: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v3 + with: + dotnet-version: ${{ env.DOT_NET_VERSION }} + - name: Restore dependencies + run: dotnet restore + - name: build + run: dotnet build -p:DefineConstants=DYNAMO_DB + - name: Test + run: dotnet test --no-build diff --git a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs index bec5e53..00a3e56 100644 --- a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs +++ b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDBQueryableTests.cs @@ -1,4 +1,4 @@ -/*using System; +using System; using System.Threading.Tasks; using FluentAssertions; using ManagedCode.Database.Tests.BaseTests; @@ -9,6 +9,7 @@ namespace ManagedCode.Database.Tests.DynamoDbTests; +#if DYNAMO_DB || DEBUG [Collection(nameof(DynamoDBTestContainer))] public class DynamoDBQueryableTests : BaseQueryableTests { @@ -55,4 +56,5 @@ await itemsResult .Should() .ThrowAsync(); } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs index 4fb2a01..d19b35c 100644 --- a/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs +++ b/ManagedCode.Database.Tests/DynamoDbTests/DynamoDbCollectionTests.cs @@ -1,4 +1,4 @@ -/*using FluentAssertions; +using FluentAssertions; using ManagedCode.Database.Core.Exceptions; using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; @@ -10,6 +10,7 @@ namespace ManagedCode.Database.Tests.DynamoDbTests; +#if DYNAMO_DB || DEBUG [Collection(nameof(DynamoDBTestContainer))] public class DynamoDbCollectionTests : BaseCollectionTests { @@ -102,4 +103,5 @@ public override async Task UpdateItem_WhenItemDoesntExists() // Assert updateItem.Should().BeNull(); } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs b/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs index ae6b14d..36b20ea 100644 --- a/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs +++ b/ManagedCode.Database.Tests/InMemoryTests/InMemoryCollectionTests.cs @@ -1,12 +1,14 @@ -/*using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; namespace ManagedCode.Database.Tests.InMemoryTests; +#if IN_MEMORY || DEBUG public class InMemoryCollectionTests : BaseCollectionTests { public InMemoryCollectionTests() : base(new InMemoryTestContainer()) { } -}*/ \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs b/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs index 759816b..019c925 100644 --- a/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs +++ b/ManagedCode.Database.Tests/InMemoryTests/InMemoryQueryableTests.cs @@ -1,12 +1,14 @@ -/*using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.BaseTests; using ManagedCode.Database.Tests.Common; using ManagedCode.Database.Tests.TestContainers; namespace ManagedCode.Database.Tests.InMemoryTests; +#if IN_MEMORY || DEBUG public class InMemoryQueryableTests : BaseQueryableTests { public InMemoryQueryableTests() : base(new InMemoryTestContainer()) { } -}*/ \ No newline at end of file +} +#endif diff --git a/ManagedCode.Database.Tests/LiteDBTests/LiteDBCollectionTests.cs b/ManagedCode.Database.Tests/LiteDBTests/LiteDBCollectionTests.cs index 8bc9537..9304d39 100644 --- a/ManagedCode.Database.Tests/LiteDBTests/LiteDBCollectionTests.cs +++ b/ManagedCode.Database.Tests/LiteDBTests/LiteDBCollectionTests.cs @@ -1,46 +1,48 @@ -// using System; -// using System.Collections.Generic; -// using System.Threading.Tasks; -// using FluentAssertions; -// using ManagedCode.Database.Tests.BaseTests; -// using ManagedCode.Database.Tests.Common; -// using ManagedCode.Database.Tests.TestContainers; -// -// namespace ManagedCode.Database.Tests.LiteDBTests; -// -// public class LiteDBCollectionTests : BaseCollectionTests -// { -// public LiteDBCollectionTests() : base(new LiteDBTestContainer()) -// { -// -// } -// -// public override async Task InsertOrUpdateListOfItems() -// { -// -// // Arrange -// int itemsCount = 5; -// int updatedItemsCount = 0; -// List list = new(); -// -// for (var i = 0; i < itemsCount; i++) -// { -// list.Add(CreateNewItem()); -// } -// -// var itemsInsert = await Collection.InsertOrUpdateAsync(list); -// -// foreach (var item in list) -// { -// item.DateTimeData = DateTime.Now.AddDays(-1); -// } -// -// // Act -// var itemsUpdate = await Collection.InsertOrUpdateAsync(list); -// -// // Assert -// itemsUpdate.Should().Be(updatedItemsCount); -// itemsInsert.Should().Be(itemsCount); -// list.Count.Should().Be(itemsCount); -// } -// } \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using FluentAssertions; +using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.Common; +using ManagedCode.Database.Tests.TestContainers; + +namespace ManagedCode.Database.Tests.LiteDBTests; + +#if LITE_DB || DEBUG +public class LiteDBCollectionTests : BaseCollectionTests +{ + public LiteDBCollectionTests() : base(new LiteDBTestContainer()) + { + + } + + public override async Task InsertOrUpdateListOfItems() + { + + // Arrange + int itemsCount = 5; + int updatedItemsCount = 0; + List list = new(); + + for (var i = 0; i < itemsCount; i++) + { + list.Add(CreateNewItem()); + } + + var itemsInsert = await Collection.InsertOrUpdateAsync(list); + + foreach (var item in list) + { + item.DateTimeData = DateTime.Now.AddDays(-1); + } + + // Act + var itemsUpdate = await Collection.InsertOrUpdateAsync(list); + + // Assert + itemsUpdate.Should().Be(updatedItemsCount); + itemsInsert.Should().Be(itemsCount); + list.Count.Should().Be(itemsCount); + } +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/LiteDBTests/LiteDBQueryableTests.cs b/ManagedCode.Database.Tests/LiteDBTests/LiteDBQueryableTests.cs index e081dc0..a162540 100644 --- a/ManagedCode.Database.Tests/LiteDBTests/LiteDBQueryableTests.cs +++ b/ManagedCode.Database.Tests/LiteDBTests/LiteDBQueryableTests.cs @@ -1,705 +1,707 @@ -// using System; -// using System.Linq; -// using System.Threading.Tasks; -// using FluentAssertions; -// using ManagedCode.Database.Tests.BaseTests; -// using ManagedCode.Database.Tests.Common; -// using ManagedCode.Database.Tests.TestContainers; -// -// namespace ManagedCode.Database.Tests.LiteDBTests; -// -// public class LiteDBQueryableTests : BaseQueryableTests -// { -// public LiteDBQueryableTests() : base(new LiteDBTestContainer()) -// { -// } -// -// public override async Task OrderByDescendingTakeSkip_ReturnOk() -// { -// -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .OrderByDescending(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// -// itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); -// } -// -// public override async Task OrderByTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .OrderBy(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByDescendingSkipWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByDescendingWhereSkip_ReturnOk() -// { -// -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderBySkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderBySkipWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByWhereSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// for (var i = 0; i < itemsCountToInsert; i++) -// { -// await Collection.InsertAsync(CreateNewItem()); -// } -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult.Count.Should().Be(itemsCountToTake); -// } -// -// public override async Task TakeSkipOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipOrderByDescending_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipOrderByDescendingWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipOrderByWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipWhereOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipWhereOrderByDescending_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip).ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereSkipOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereSkipOrderByDescending_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereOrderBySkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task ThenBy_AfterOrderBy_ReturnOk() -// { -// var baseMethod = () => base.ThenBy_AfterOrderBy_ReturnOk(); -// -// await baseMethod.Should().ThrowExactlyAsync("ORDER BY already defined in this query builder"); -// } -// -// public override async Task ThenBy_AfterOrderByDescending_ReturnOk() -// { -// var baseMethod = () => base.ThenBy_AfterOrderBy_ReturnOk(); -// -// await baseMethod.Should().ThrowExactlyAsync("ORDER BY already defined in this query builder"); -// } -// -// public override async Task ThenByDescending_AfterOrderBy_ReturnOk() -// { -// var baseMethod = () => base.ThenBy_AfterOrderBy_ReturnOk(); -// -// await baseMethod.Should().ThrowExactlyAsync("ORDER BY already defined in this query builder"); -// -// } -// -// public override async Task WhereOrderByDescendingTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .OrderByDescending(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// -// itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); -// } -// -// public override async Task WhereOrderByTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .OrderBy(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// -// itemsResult.First().IntData.Should().Be(itemsCountToSkip); -// } -// -// public override async Task WhereTakeOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task WhereTakeOrderBySkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task WhereTakeSkipOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task WhereTakeSkipOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task ThenByDescending_AfterOrderByDescending_ReturnOk() -// { -// string expectedErrorMessage = "ORDER BY already defined in this query builder"; -// -// var baseMethod = async () => await base.ThenByDescending_AfterOrderByDescending_ReturnOk(); -// await baseMethod.Should().ThrowExactlyAsync(expectedErrorMessage); -// } -// } \ No newline at end of file +using System; +using System.Linq; +using System.Threading.Tasks; +using FluentAssertions; +using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.Common; +using ManagedCode.Database.Tests.TestContainers; + +namespace ManagedCode.Database.Tests.LiteDBTests; + +#if LITE_DB || DEBUG +public class LiteDBQueryableTests : BaseQueryableTests +{ + public LiteDBQueryableTests() : base(new LiteDBTestContainer()) + { + } + + public override async Task OrderByDescendingTakeSkip_ReturnOk() + { + + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .OrderByDescending(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + + itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); + } + + public override async Task OrderByTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .OrderBy(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByDescendingSkipWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByDescendingWhereSkip_ReturnOk() + { + + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeOrderBySkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeOrderBySkipWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByWhereSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + for (var i = 0; i < itemsCountToInsert; i++) + { + await Collection.InsertAsync(CreateNewItem()); + } + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult.Count.Should().Be(itemsCountToTake); + } + + public override async Task TakeSkipOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeSkipOrderByDescending_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeSkipOrderByDescendingWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeSkipOrderByWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeSkipWhereOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeSkipWhereOrderByDescending_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeWhereOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip).ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeWhereSkipOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeWhereSkipOrderByDescending_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeWhereOrderBySkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task ThenBy_AfterOrderBy_ReturnOk() + { + var baseMethod = () => base.ThenBy_AfterOrderBy_ReturnOk(); + + await baseMethod.Should().ThrowExactlyAsync("ORDER BY already defined in this query builder"); + } + + public override async Task ThenBy_AfterOrderByDescending_ReturnOk() + { + var baseMethod = () => base.ThenBy_AfterOrderBy_ReturnOk(); + + await baseMethod.Should().ThrowExactlyAsync("ORDER BY already defined in this query builder"); + } + + public override async Task ThenByDescending_AfterOrderBy_ReturnOk() + { + var baseMethod = () => base.ThenBy_AfterOrderBy_ReturnOk(); + + await baseMethod.Should().ThrowExactlyAsync("ORDER BY already defined in this query builder"); + + } + + public override async Task WhereOrderByDescendingTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .OrderByDescending(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + + itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); + } + + public override async Task WhereOrderByTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .OrderBy(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + + itemsResult.First().IntData.Should().Be(itemsCountToSkip); + } + + public override async Task WhereTakeOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task WhereTakeOrderBySkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task WhereTakeSkipOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task WhereTakeSkipOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task ThenByDescending_AfterOrderByDescending_ReturnOk() + { + string expectedErrorMessage = "ORDER BY already defined in this query builder"; + + var baseMethod = async () => await base.ThenByDescending_AfterOrderByDescending_ReturnOk(); + await baseMethod.Should().ThrowExactlyAsync(expectedErrorMessage); + } +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/SQLiteTests/SQLiteCollectionTests.cs b/ManagedCode.Database.Tests/SQLiteTests/SQLiteCollectionTests.cs index 2d4369c..de0d59f 100644 --- a/ManagedCode.Database.Tests/SQLiteTests/SQLiteCollectionTests.cs +++ b/ManagedCode.Database.Tests/SQLiteTests/SQLiteCollectionTests.cs @@ -1,12 +1,14 @@ -// using ManagedCode.Database.Tests.BaseTests; -// using ManagedCode.Database.Tests.Common; -// using ManagedCode.Database.Tests.TestContainers; -// -// namespace ManagedCode.Database.Tests.SQLiteTests; -// -// public class SQLiteCollectionTests : BaseCollectionTests -// { -// public SQLiteCollectionTests() : base(new SQLiteTestContainer()) -// { -// } -// } \ No newline at end of file +using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.Common; +using ManagedCode.Database.Tests.TestContainers; + +namespace ManagedCode.Database.Tests.SQLiteTests; + +#if SQLITE || DEBUG +public class SQLiteCollectionTests : BaseCollectionTests +{ + public SQLiteCollectionTests() : base(new SQLiteTestContainer()) + { + } +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/SQLiteTests/SQLiteQueryableTests.cs b/ManagedCode.Database.Tests/SQLiteTests/SQLiteQueryableTests.cs index f048240..5676a64 100644 --- a/ManagedCode.Database.Tests/SQLiteTests/SQLiteQueryableTests.cs +++ b/ManagedCode.Database.Tests/SQLiteTests/SQLiteQueryableTests.cs @@ -1,694 +1,696 @@ -// using FluentAssertions; -// using ManagedCode.Database.Tests.BaseTests; -// using ManagedCode.Database.Tests.Common; -// using ManagedCode.Database.Tests.TestContainers; -// using System.Threading.Tasks; -// using System; -// using System.Linq; -// -// namespace ManagedCode.Database.Tests.SQLiteTests; -// -// public class SQLiteRepositoryTests : BaseQueryableTests -// { -// public SQLiteRepositoryTests() : base(new SQLiteTestContainer()) -// { -// } -// -// public override async Task OrderByDescendingTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .OrderByDescending(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// -// itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); -// } -// -// public override async Task OrderByTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .OrderBy(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task Take_NegativeNumber_ReturnZero() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = -3; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToInsert); -// } -// -// public override async Task TakeOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByDescendingSkipWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByDescendingWhereSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderBySkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderBySkipWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeOrderByWhereSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// for (var i = 0; i < itemsCountToInsert; i++) -// { -// await Collection.InsertAsync(CreateNewItem()); -// } -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult.Count.Should().Be(itemsCountToTake); -// } -// -// public override async Task TakeSkipOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipOrderByDescending_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipOrderByDescendingWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// -// public override async Task TakeSkipWhereOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// -// public override async Task TakeSkipWhereOrderByDescending_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .Where(w => w.StringData == guid) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeSkipOrderByWhere_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .Where(w => w.StringData == guid) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip).ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereSkipOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereSkipOrderByDescending_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task TakeWhereOrderBySkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Take(itemsCountToTake) -// .Where(w => w.StringData == guid) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task WhereOrderByDescendingTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .OrderByDescending(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// -// itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); -// } -// -// public override async Task WhereOrderByTakeSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .OrderBy(o => o.IntData) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// -// itemsResult.First().IntData.Should().Be(itemsCountToSkip); -// } -// -// public override async Task WhereTakeOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .OrderByDescending(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task WhereTakeSkipOrderBy_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderBy(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// -// public override async Task WhereTakeSkipOrderByDescendingSkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .Skip(itemsCountToSkip) -// .OrderByDescending(o => o.IntData) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInDescendingOrder(o => o.IntData); -// } -// -// public override async Task WhereTakeOrderBySkip_ReturnOk() -// { -// // Arrange -// int itemsCountToInsert = 5; -// int itemsCountToTake = 3; -// int itemsCountToSkip = 2; -// -// var guid = Guid.NewGuid().ToString(); -// -// await CreateAndInsertItemsAsync(itemsCountToInsert, guid); -// -// // Act -// var itemsResult = await Collection.Query -// .Where(w => w.StringData == guid) -// .Take(itemsCountToTake) -// .OrderBy(o => o.IntData) -// .Skip(itemsCountToSkip) -// .ToListAsync(); -// -// // Assert -// itemsResult -// .Should() -// .HaveCount(itemsCountToTake) -// .And -// .BeInAscendingOrder(o => o.IntData); -// } -// } \ No newline at end of file +using FluentAssertions; +using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.Common; +using ManagedCode.Database.Tests.TestContainers; +using System.Threading.Tasks; +using System; +using System.Linq; + +namespace ManagedCode.Database.Tests.SQLiteTests; + +#if SQLITE || DEBUG +public class SQLiteRepositoryTests : BaseQueryableTests +{ + public SQLiteRepositoryTests() : base(new SQLiteTestContainer()) + { + } + + public override async Task OrderByDescendingTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .OrderByDescending(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + + itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); + } + + public override async Task OrderByTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .OrderBy(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task Take_NegativeNumber_ReturnZero() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = -3; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToInsert); + } + + public override async Task TakeOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByDescendingSkipWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByDescendingWhereSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeOrderBySkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeOrderBySkipWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeOrderByWhereSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + for (var i = 0; i < itemsCountToInsert; i++) + { + await Collection.InsertAsync(CreateNewItem()); + } + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult.Count.Should().Be(itemsCountToTake); + } + + public override async Task TakeSkipOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeSkipOrderByDescending_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeSkipOrderByDescendingWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + + public override async Task TakeSkipWhereOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + + public override async Task TakeSkipWhereOrderByDescending_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .Where(w => w.StringData == guid) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeSkipOrderByWhere_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .Where(w => w.StringData == guid) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeWhereOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip).ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeWhereSkipOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task TakeWhereSkipOrderByDescending_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task TakeWhereOrderBySkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Take(itemsCountToTake) + .Where(w => w.StringData == guid) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task WhereOrderByDescendingTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .OrderByDescending(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + + itemsResult.First().IntData.Should().Be(itemsCountToInsert - itemsCountToSkip - 1); + } + + public override async Task WhereOrderByTakeSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .OrderBy(o => o.IntData) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + + itemsResult.First().IntData.Should().Be(itemsCountToSkip); + } + + public override async Task WhereTakeOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .OrderByDescending(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task WhereTakeSkipOrderBy_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderBy(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } + + public override async Task WhereTakeSkipOrderByDescendingSkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .Skip(itemsCountToSkip) + .OrderByDescending(o => o.IntData) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInDescendingOrder(o => o.IntData); + } + + public override async Task WhereTakeOrderBySkip_ReturnOk() + { + // Arrange + int itemsCountToInsert = 5; + int itemsCountToTake = 3; + int itemsCountToSkip = 2; + + var guid = Guid.NewGuid().ToString(); + + await CreateAndInsertItemsAsync(itemsCountToInsert, guid); + + // Act + var itemsResult = await Collection.Query + .Where(w => w.StringData == guid) + .Take(itemsCountToTake) + .OrderBy(o => o.IntData) + .Skip(itemsCountToSkip) + .ToListAsync(); + + // Assert + itemsResult + .Should() + .HaveCount(itemsCountToTake) + .And + .BeInAscendingOrder(o => o.IntData); + } +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index 5628b65..e763b52 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -72,24 +72,24 @@ public async Task InitializeAsync() containerExsist = true; } - if (!containerExsist) - { - publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); - containerId = _cosmosTestContainer.Id; - } - else - { - var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); - - ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); - - if (containerListResponse != null) - { - publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; - - containerId = containerListResponse.ID; - } - } + // if (!containerExsist) + // { + // publicPort = _cosmosTestContainer.GetMappedPublicPort(privatePort); + // containerId = _cosmosTestContainer.Id; + // } + // else + // { + // var listContainers = await _dockerClient.Containers.ListContainersAsync(new ContainersListParameters()); + // + // ContainerListResponse containerListResponse = listContainers.FirstOrDefault(container => container.Names.Contains($"/{containerName}")); + // + // if (containerListResponse != null) + // { + // publicPort = containerListResponse.Ports.Single(port => port.PrivatePort == privatePort).PublicPort; + // + // containerId = containerListResponse.ID; + // } + // } _database = new CosmosDatabase(new CosmosOptions { diff --git a/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeCollectionTests.cs b/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeCollectionTests.cs index df92283..b885163 100644 --- a/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeCollectionTests.cs +++ b/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeCollectionTests.cs @@ -1,45 +1,47 @@ -// using System; -// using System.Collections.Generic; -// using System.Threading.Tasks; -// using FluentAssertions; -// using ManagedCode.Database.Tests.BaseTests; -// using ManagedCode.Database.Tests.Common; -// using ManagedCode.Database.Tests.TestContainers; -// -// namespace ManagedCode.Database.Tests.ZoneTreeTests; -// -// public class ZoneTreeCollectionTests : BaseCollectionTests -// { -// public ZoneTreeCollectionTests() : base(new ZoneTreeTestContainer()) -// { -// } -// -// public override async Task InsertOrUpdateListOfItems() -// { -// // Arrange -// int itemsCount = 5; -// int updatedItemsCount = 0; -// List list = new(); -// -// for (var i = 0; i < itemsCount; i++) -// { -// list.Add(CreateNewItem()); -// } -// -// var itemsInsert = await Collection.InsertOrUpdateAsync(list); -// -// foreach (var item in list) -// { -// item.DateTimeData = DateTime.Now.AddDays(-1); -// } -// -// // Act -// var itemsUpdate = await Collection.InsertOrUpdateAsync(list); -// //TODO: LiteDB must be 100, but result 0 -// -// // Assert -// itemsUpdate.Should().Be(updatedItemsCount); -// itemsInsert.Should().Be(itemsCount); -// list.Count.Should().Be(itemsCount); -// } -// } \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using FluentAssertions; +using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.Common; +using ManagedCode.Database.Tests.TestContainers; + +namespace ManagedCode.Database.Tests.ZoneTreeTests; + +#if ZONE_TREE || DEBUG +public class ZoneTreeCollectionTests : BaseCollectionTests +{ + public ZoneTreeCollectionTests() : base(new ZoneTreeTestContainer()) + { + } + + public override async Task InsertOrUpdateListOfItems() + { + // Arrange + int itemsCount = 5; + int updatedItemsCount = 0; + List list = new(); + + for (var i = 0; i < itemsCount; i++) + { + list.Add(CreateNewItem()); + } + + var itemsInsert = await Collection.InsertOrUpdateAsync(list); + + foreach (var item in list) + { + item.DateTimeData = DateTime.Now.AddDays(-1); + } + + // Act + var itemsUpdate = await Collection.InsertOrUpdateAsync(list); + //TODO: LiteDB must be 100, but result 0 + + // Assert + itemsUpdate.Should().Be(updatedItemsCount); + itemsInsert.Should().Be(itemsCount); + list.Count.Should().Be(itemsCount); + } +} +#endif \ No newline at end of file diff --git a/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeQueryableTests.cs b/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeQueryableTests.cs index f9560a0..fecf53b 100644 --- a/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeQueryableTests.cs +++ b/ManagedCode.Database.Tests/ZoneTreeTests/ZoneTreeQueryableTests.cs @@ -1,53 +1,55 @@ -// using System; -// using System.Threading.Tasks; -// using FluentAssertions; -// using ManagedCode.Database.Tests.BaseTests; -// using ManagedCode.Database.Tests.Common; -// using ManagedCode.Database.Tests.TestContainers; -// -// namespace ManagedCode.Database.Tests.ZoneTreeTests; -// -// public class ZoneTreeQueryableTests : BaseQueryableTests -// { -// public ZoneTreeQueryableTests() : base(new ZoneTreeTestContainer()) -// { -// } -// -// public override async Task ThenByDescending_TakeNull_ReturnException() -// { -// // Arrange -// int itemsCountToInsert = 1; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = () => Collection.Query -// .OrderBy(o => o.StringData) -// .ThenByDescending(null) -// .ToListAsync(); -// -// // Assert -// await itemsResult -// .Should() -// .ThrowAsync(); -// } -// -// public override async Task ThenBy_TakeNull_ReturnException() -// { -// // Arrange -// int itemsCountToInsert = 1; -// -// await CreateAndInsertItemsAsync(itemsCountToInsert); -// -// // Act -// var itemsResult = () => Collection.Query -// .OrderBy(o => o.StringData) -// .ThenBy(null) -// .ToListAsync(); -// -// // Assert -// await itemsResult -// .Should() -// .ThrowAsync(); -// } -// } \ No newline at end of file +using System; +using System.Threading.Tasks; +using FluentAssertions; +using ManagedCode.Database.Tests.BaseTests; +using ManagedCode.Database.Tests.Common; +using ManagedCode.Database.Tests.TestContainers; + +namespace ManagedCode.Database.Tests.ZoneTreeTests; + +#if ZONE_TREE || DEBUG +public class ZoneTreeQueryableTests : BaseQueryableTests +{ + public ZoneTreeQueryableTests() : base(new ZoneTreeTestContainer()) + { + } + + public override async Task ThenByDescending_TakeNull_ReturnException() + { + // Arrange + int itemsCountToInsert = 1; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = () => Collection.Query + .OrderBy(o => o.StringData) + .ThenByDescending(null) + .ToListAsync(); + + // Assert + await itemsResult + .Should() + .ThrowAsync(); + } + + public override async Task ThenBy_TakeNull_ReturnException() + { + // Arrange + int itemsCountToInsert = 1; + + await CreateAndInsertItemsAsync(itemsCountToInsert); + + // Act + var itemsResult = () => Collection.Query + .OrderBy(o => o.StringData) + .ThenBy(null) + .ToListAsync(); + + // Assert + await itemsResult + .Should() + .ThrowAsync(); + } +} +#endif \ No newline at end of file From 7ed2ad21fcd6ca593425ec34ce8d13f8e738b72f Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 13:15:12 +0100 Subject: [PATCH 37/43] cosmos --- .github/workflows/dotnet.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 07dedd6..e47e636 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -101,7 +101,7 @@ jobs: needs: build runs-on: windows-latest steps: - - uses: actions/azurecosmosaction@latest + - uses: southpolesteve/cosmos-emulator-github-action@v1 - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 From 73e06a4ba2901e46012e5e3c39562fc3abe91886 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 13:26:17 +0100 Subject: [PATCH 38/43] cosmos --- .github/workflows/dotnet.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index e47e636..724cb9d 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -101,7 +101,11 @@ jobs: needs: build runs-on: windows-latest steps: - - uses: southpolesteve/cosmos-emulator-github-action@v1 + - uses: janpio/cosmos-emulator-github-action@main + - name: 'npm ci' + run: npm ci + - name: 'npm test' + run: npm test - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 From 42d15615bc0f6627fdcb49a757e70a65e855fbc9 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 13:33:26 +0100 Subject: [PATCH 39/43] cosmos --- .github/workflows/dotnet.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 724cb9d..e9139eb 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -102,10 +102,6 @@ jobs: runs-on: windows-latest steps: - uses: janpio/cosmos-emulator-github-action@main - - name: 'npm ci' - run: npm ci - - name: 'npm test' - run: npm test - uses: actions/checkout@v3 - name: Setup .NET uses: actions/setup-dotnet@v3 From dd47c78881be281272ed25030880e2c37b75e106 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 14:31:25 +0100 Subject: [PATCH 40/43] cosmos tests --- .../BaseTests/BaseCollectionTests.cs | 2 + .../TestContainers/CosmosTestContainer.cs | 64 +++++++++---------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs b/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs index ea0afe5..4ed99c6 100644 --- a/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs +++ b/ManagedCode.Database.Tests/BaseTests/BaseCollectionTests.cs @@ -7,11 +7,13 @@ using System.Threading.Tasks; using ManagedCode.Database.Tests.TestContainers; using Xunit; +using Xunit.Abstractions; namespace ManagedCode.Database.Tests.BaseTests; public abstract class BaseCollectionTests : BaseTests where TItem : IBaseItem, new() { + protected BaseCollectionTests(ITestContainer testContainer) : base(testContainer) { } diff --git a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs index e763b52..9340e8e 100644 --- a/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/CosmosTestContainer.cs @@ -28,25 +28,25 @@ public class CosmosTestContainer : ITestContainer, public CosmosTestContainer() { - _cosmosTestContainer = new ContainerBuilder() - .WithImage("mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator") -// .WithName(containerName) - .WithExposedPort(8081) - .WithExposedPort(10251) - .WithExposedPort(10252) - .WithExposedPort(10253) - .WithExposedPort(10254) - .WithExposedPort(10255) - .WithPortBinding(8081, 8081) - .WithEnvironment("ACCEPT_EULA", "Y") - .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") - .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") - .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") - .WithWaitStrategy(Wait.ForWindowsContainer() - .UntilPortIsAvailable(8081)) - .Build(); - - _dockerClient = new DockerClientConfiguration().CreateClient(); +// _cosmosTestContainer = new ContainerBuilder() +// .WithImage("mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator") +// // .WithName(containerName) +// .WithExposedPort(8081) +// .WithExposedPort(10251) +// .WithExposedPort(10252) +// .WithExposedPort(10253) +// .WithExposedPort(10254) +// .WithExposedPort(10255) +// .WithPortBinding(8081, 8081) +// .WithEnvironment("ACCEPT_EULA", "Y") +// .WithEnvironment("AZURE_COSMOS_EMULATOR_PARTITION_COUNT", "1") +// .WithEnvironment("AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE", "127.0.0.1") +// .WithEnvironment("AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE", "false") +// .WithWaitStrategy(Wait.ForWindowsContainer() +// .UntilPortIsAvailable(8081)) +// .Build(); +// +// _dockerClient = new DockerClientConfiguration().CreateClient(); } public IDatabaseCollection Collection => @@ -61,16 +61,16 @@ public async Task InitializeAsync() { ushort publicPort = privatePort; - try - { - await _cosmosTestContainer.StartAsync(); - - containerExsist = false; - } - catch (Exception ex) //TODO catch name already using exception - { - containerExsist = true; - } + // try + // { + // await _cosmosTestContainer.StartAsync(); + // + // containerExsist = false; + // } + // catch (Exception ex) //TODO catch name already using exception + // { + // containerExsist = true; + // } // if (!containerExsist) // { @@ -111,7 +111,6 @@ public async Task InitializeAsync() return new HttpClient(httpMessageHandler); }, ConnectionMode = ConnectionMode.Gateway, - RequestTimeout = TimeSpan.FromMinutes(3) }, }); @@ -121,8 +120,8 @@ public async Task InitializeAsync() public async Task DisposeAsync() { - // await _database.DeleteAsync(); - await _database.DisposeAsync(); + await _database.DeleteAsync(); + //await _database.DisposeAsync(); /* _testOutputHelper.WriteLine($"Cosmos container State:{_cosmosContainer.State}"); _testOutputHelper.WriteLine("=STOP=");*/ @@ -131,6 +130,7 @@ public async Task DisposeAsync() public async void Dispose() { + await _database.DeleteAsync(); // await _dockerClient.Containers.RemoveContainerAsync(containerId, // new ContainerRemoveParameters // { From cef101d84dbf25e2cf13cb478e5376e7ac254613 Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 14:49:48 +0100 Subject: [PATCH 41/43] litedb --- .../TestContainers/LiteDBTestContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs index bbd2ae7..9d9e119 100644 --- a/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs @@ -14,7 +14,7 @@ public class LiteDBTestContainer : ITestContainer public LiteDBTestContainer() { - _databasePath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid():N}.db"); + _databasePath = $"{Guid.NewGuid():N}.db";// Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid():N}.db"); _database = new LiteDBDatabase(new LiteDBOptions { From b122354a9de7727114003260f8a649b604206f9d Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 14:50:37 +0100 Subject: [PATCH 42/43] litedb --- .../TestContainers/LiteDBTestContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs index 9d9e119..dd5c56b 100644 --- a/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/LiteDBTestContainer.cs @@ -14,7 +14,7 @@ public class LiteDBTestContainer : ITestContainer public LiteDBTestContainer() { - _databasePath = $"{Guid.NewGuid():N}.db";// Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid():N}.db"); + _databasePath = Path.Combine(Environment.CurrentDirectory, $"{Guid.NewGuid():N}.db"); _database = new LiteDBDatabase(new LiteDBOptions { From a2f892ee47ac7396035946eee8a6b5e1555bbc8e Mon Sep 17 00:00:00 2001 From: Konstantin Semenenko Date: Sun, 19 Mar 2023 15:09:48 +0100 Subject: [PATCH 43/43] zone tree --- .../TestContainers/ZoneTreeTestContainer.cs | 2 +- ManagedCode.Database.ZoneTree/ZoneTreeWrapper.cs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ManagedCode.Database.Tests/TestContainers/ZoneTreeTestContainer.cs b/ManagedCode.Database.Tests/TestContainers/ZoneTreeTestContainer.cs index d21b5b7..e571be6 100644 --- a/ManagedCode.Database.Tests/TestContainers/ZoneTreeTestContainer.cs +++ b/ManagedCode.Database.Tests/TestContainers/ZoneTreeTestContainer.cs @@ -13,7 +13,7 @@ public class ZoneTreeTestContainer : ITestContainer public ZoneTreeTestContainer() { - var databasePath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid():N}"); + var databasePath = Path.Combine(Environment.CurrentDirectory, $"zone{Guid.NewGuid():N}"); _database = new ZoneTreeDatabase(new ZoneTreeOptions() { diff --git a/ManagedCode.Database.ZoneTree/ZoneTreeWrapper.cs b/ManagedCode.Database.ZoneTree/ZoneTreeWrapper.cs index 5ae0c8f..46f2c1b 100644 --- a/ManagedCode.Database.ZoneTree/ZoneTreeWrapper.cs +++ b/ManagedCode.Database.ZoneTree/ZoneTreeWrapper.cs @@ -102,7 +102,9 @@ public bool Delete(TKey key) public void DeleteAll() { - _zoneTree.Maintenance.DestroyTree(); + using var iterator = _zoneTree.CreateIterator(); + while (iterator.Next()) + _zoneTree.TryDelete(iterator.CurrentKey); } public long Count() @@ -114,7 +116,8 @@ public long Count() public IEnumerable Enumerate() { using var iterator = _zoneTree.CreateIterator(); - while (iterator.Next()) yield return iterator.CurrentValue; + while (iterator.Next()) + yield return iterator.CurrentValue; } public IEnumerable EnumerateReverse()