diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index bfae44077..7ecf4e309 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -143,10 +143,17 @@ jobs: include: - name: mysql compose: docker-compose-mysql.yml + optional: false - name: postgres compose: docker-compose-postgres.yml + optional: false - name: sqlserver compose: docker-compose-sqlserver.yml + optional: false + - name: ferretdb + compose: docker-compose-ferretdb.yml + optional: true + continue-on-error: ${{ matrix.optional == true }} steps: - name: Prepare - Checkout diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6f995ddc5..3cd5272ae 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -138,10 +138,17 @@ jobs: include: - name: mysql compose: docker-compose-mysql.yml + optional: false - name: postgres compose: docker-compose-postgres.yml + optional: false - name: sqlserver compose: docker-compose-sqlserver.yml + optional: false + - name: ferretdb + compose: docker-compose-ferretdb.yml + optional: true + continue-on-error: ${{ matrix.optional == true }} steps: - name: Prepare - Checkout diff --git a/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj b/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj index 2ae19039c..a94855a6f 100644 --- a/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj +++ b/backend/src/Squidex.Data.EntityFramework/Squidex.Data.EntityFramework.csproj @@ -40,13 +40,13 @@ - - - - - - - + + + + + + + diff --git a/backend/src/Squidex.Data.MongoDb/Domain/Apps/Entities/Contents/Text/MongoTextIndexBase.cs b/backend/src/Squidex.Data.MongoDb/Domain/Apps/Entities/Contents/Text/MongoTextIndexBase.cs index 76ecfe2ea..a7efe54d5 100644 --- a/backend/src/Squidex.Data.MongoDb/Domain/Apps/Entities/Contents/Text/MongoTextIndexBase.cs +++ b/backend/src/Squidex.Data.MongoDb/Domain/Apps/Entities/Contents/Text/MongoTextIndexBase.cs @@ -31,23 +31,48 @@ public abstract class MongoTextIndexBase(IMongoDatabase database, string shar public double Score { get; set; } } - protected override Task SetupCollectionAsync(IMongoCollection> collection, + protected override async Task SetupCollectionAsync(IMongoCollection> collection, CancellationToken ct) { - return collection.Indexes.CreateManyAsync( - [ - new CreateIndexModel>( - Index - .Ascending(x => x.AppId) - .Ascending(x => x.ContentId)), - - new CreateIndexModel>( - Index - .Ascending(x => x.AppId) - .Ascending(x => x.SchemaId) - .Ascending(x => x.GeoField) - .Geo2DSphere(x => x.GeoObject)), - ], ct); + var isFerreDb = await Database.IsFerretDbAsync(ct); + + if (isFerreDb) + { + await collection.Indexes.CreateManyAsync( + [ + new CreateIndexModel>( + Index + .Ascending(x => x.AppId) + .Ascending(x => x.ContentId)), + + new CreateIndexModel>( + Index + .Ascending(x => x.AppId) + .Ascending(x => x.SchemaId) + .Ascending(x => x.GeoField)), + + new CreateIndexModel>( + Index + .Geo2DSphere(x => x.GeoObject)), + ], ct); + } + else + { + await collection.Indexes.CreateManyAsync( + [ + new CreateIndexModel>( + Index + .Ascending(x => x.AppId) + .Ascending(x => x.ContentId)), + + new CreateIndexModel>( + Index + .Ascending(x => x.AppId) + .Ascending(x => x.SchemaId) + .Ascending(x => x.GeoField) + .Geo2DSphere(x => x.GeoObject)), + ], ct); + } } protected override string CollectionName() diff --git a/backend/src/Squidex.Data.MongoDb/Infrastructure/MongoExtensions.cs b/backend/src/Squidex.Data.MongoDb/Infrastructure/MongoExtensions.cs index 4c5689519..8627e6a1a 100644 --- a/backend/src/Squidex.Data.MongoDb/Infrastructure/MongoExtensions.cs +++ b/backend/src/Squidex.Data.MongoDb/Infrastructure/MongoExtensions.cs @@ -218,10 +218,24 @@ public static class MongoExtensions var versionMajor = versionString.Split('.')[0]; int.TryParse(versionMajor, NumberStyles.Integer, CultureInfo.InvariantCulture, out int result); - return result; } + public static async Task IsFerretDbAsync(this IMongoDatabase database, + CancellationToken ct = default) + { + var command = + new BsonDocumentCommand(new BsonDocument + { + { "buildInfo", 1 }, + }); + + var document = await database.RunCommandAsync(command, cancellationToken: ct); + + var isFerretDB = document.Any(x => x.Name.Contains("ferret", StringComparison.OrdinalIgnoreCase)); + return isFerretDB; + } + public static async Task> ToListRandomAsync(this IFindFluent find, IMongoCollection collection, long take, CancellationToken ct = default) { diff --git a/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj b/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj index a923f3bca..336a5660b 100644 --- a/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj +++ b/backend/src/Squidex.Data.MongoDb/Squidex.Data.MongoDb.csproj @@ -25,12 +25,12 @@ - - - - - - + + + + + + diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj b/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj index 6086d7a8c..d736cf86f 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj +++ b/backend/src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj @@ -20,7 +20,7 @@ - + diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj b/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj index 5a6330efa..453718dc8 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj @@ -29,8 +29,8 @@ - - + + diff --git a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index d58081b81..695035cb2 100644 --- a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -24,13 +24,13 @@ - - - - - - - + + + + + + + diff --git a/backend/src/Squidex/Squidex.csproj b/backend/src/Squidex/Squidex.csproj index f7c3e3039..873134afe 100644 --- a/backend/src/Squidex/Squidex.csproj +++ b/backend/src/Squidex/Squidex.csproj @@ -60,17 +60,17 @@ - - - - - - + + + + + + - - - - + + + + @@ -84,11 +84,11 @@ - + - + diff --git a/tools/TestSuite/TestSuite.ApiTests/ContentCollationTests.cs b/tools/TestSuite/TestSuite.ApiTests/ContentCollationTests.cs index 422b830ad..daf48648d 100644 --- a/tools/TestSuite/TestSuite.ApiTests/ContentCollationTests.cs +++ b/tools/TestSuite/TestSuite.ApiTests/ContentCollationTests.cs @@ -80,15 +80,15 @@ public class ContentCollationTests(CreatedAppFixture fixture) : IClassFixture x.Data.String).ToList(); + var sortedContent_1 = await contents.GetAsync(new ContentQuery { OrderBy = $"data/{TestEntityData.StringField}/iv asc" }); + var sortedNames_1 = sortedContent_1.Items.Select(x => x.Data.String).ToList(); Assert.Equal(new string[] { "Lüleburgaz", "Mersin", "İstanbul" }, sortedNames_1); // STEP 3: Get with collation. - var sorted_2 = await contents.GetAsync(new ContentQuery { OrderBy = $"data/{TestEntityData.StringField}/iv asc", Collation = "tr" }); - var sortedNames_2 = sorted_2.Items.Select(x => x.Data.String).ToList(); + var sortedContent_2 = await contents.GetAsync(new ContentQuery { OrderBy = $"data/{TestEntityData.StringField}/iv asc", Collation = "tr" }); + var sortedNames_2 = sortedContent_2.Items.Select(x => x.Data.String).ToList(); Assert.Equal(new string[] { "İstanbul", "Lüleburgaz", "Mersin" }, sortedNames_2); } diff --git a/tools/TestSuite/TestSuite.Shared/AssetStrategies.cs b/tools/TestSuite/TestSuite.Shared/AssetStrategies.cs index b5b719df5..8003be29c 100644 --- a/tools/TestSuite/TestSuite.Shared/AssetStrategies.cs +++ b/tools/TestSuite/TestSuite.Shared/AssetStrategies.cs @@ -32,7 +32,7 @@ public static partial class ContentStrategies Id = asset.Id, Permanent = false, }, - ] + ], }); case Deletion.BulkPermanent: return client.BulkUpdateAssetsAsync(new BulkUpdateAssetsDto @@ -45,7 +45,7 @@ public static partial class ContentStrategies Id = asset.Id, Permanent = true, }, - ] + ], }); default: return Task.CompletedTask; @@ -55,7 +55,7 @@ public static partial class ContentStrategies public enum Move { Single, - Bulk + Bulk, } public static Task MoveAsync(this IAssetsClient client, AssetDto asset, AssetFolderDto folder, Move strategy) @@ -65,7 +65,7 @@ public static partial class ContentStrategies case Move.Single: return client.PutAssetParentAsync(asset.Id, new MoveAssetDto { - ParentId = folder.Id + ParentId = folder.Id, }); case Move.Bulk: return client.BulkUpdateAssetsAsync(new BulkUpdateAssetsDto @@ -76,9 +76,9 @@ public static partial class ContentStrategies { Type = BulkUpdateAssetType.Move, Id = asset.Id, - ParentId = folder.Id + ParentId = folder.Id, }, - ] + ], }); default: return Task.CompletedTask; @@ -88,7 +88,7 @@ public static partial class ContentStrategies public enum Annotate { Single, - Bulk + Bulk, } public static Task AnnotateAsync(this IAssetsClient client, AssetDto asset, AnnotateAssetDto request, Annotate strategy) @@ -110,9 +110,9 @@ public static partial class ContentStrategies IsProtected = request.IsProtected, Metadata = request.Metadata, Slug = request.Slug, - Tags = request.Tags + Tags = request.Tags, }, - ] + ], }); default: return Task.CompletedTask; diff --git a/tools/TestSuite/TestSuite.Shared/ClientExtensions.cs b/tools/TestSuite/TestSuite.Shared/ClientExtensions.cs index 8a12131a7..b9d61ca90 100644 --- a/tools/TestSuite/TestSuite.Shared/ClientExtensions.cs +++ b/tools/TestSuite/TestSuite.Shared/ClientExtensions.cs @@ -370,7 +370,7 @@ public static class ClientExtensions var pausingStream = new PauseStream(fileParameter.Data, 0.25); var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType) { - ContentLength = fileParameter.Data.Length + ContentLength = fileParameter.Data.Length, }; await using (pausingFile.Data) diff --git a/tools/TestSuite/TestSuite.Shared/ClientWrapper.cs b/tools/TestSuite/TestSuite.Shared/ClientWrapper.cs index 064c86ed1..180d88164 100644 --- a/tools/TestSuite/TestSuite.Shared/ClientWrapper.cs +++ b/tools/TestSuite/TestSuite.Shared/ClientWrapper.cs @@ -33,7 +33,7 @@ public sealed class ClientWrapper { return new HttpClientHandler { - ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }; }).Services .BuildServiceProvider(); diff --git a/tools/TestSuite/TestSuite.Shared/ContentStrategies.cs b/tools/TestSuite/TestSuite.Shared/ContentStrategies.cs index f2dce7af6..04c3197c1 100644 --- a/tools/TestSuite/TestSuite.Shared/ContentStrategies.cs +++ b/tools/TestSuite/TestSuite.Shared/ContentStrategies.cs @@ -18,7 +18,7 @@ public static partial class ContentStrategies SingleSoft, SinglePermanent, BulkSoft, - BulkPermanent + BulkPermanent, } public static Task DeleteAsync(this ISquidexClient client, ContentBase content, @@ -46,7 +46,7 @@ public static partial class ContentStrategies Id = content.Id, Permanent = false, }, - ] + ], }); case Deletion.BulkPermanent: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -59,7 +59,7 @@ public static partial class ContentStrategies Id = content.Id, Permanent = true, }, - ] + ], }); default: return Task.CompletedTask; @@ -73,7 +73,7 @@ public static partial class ContentStrategies UpsertBulk, Bulk, BulkWithSchema, - BulkShared + BulkShared, } public static Task UpdateAsync(this ISquidexClient client, ContentBase content, object data, @@ -99,9 +99,9 @@ public static partial class ContentStrategies { Type = BulkUpdateType.Update, Id = content.Id, - Data = data + Data = data, }, - ] + ], }); case Update.UpsertBulk: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -112,9 +112,9 @@ public static partial class ContentStrategies { Type = BulkUpdateType.Upsert, Id = content.Id, - Data = data + Data = data, }, - ] + ], }); case Update.BulkWithSchema: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -126,9 +126,9 @@ public static partial class ContentStrategies Type = BulkUpdateType.Update, Id = content.Id, Data = data, - Schema = content.SchemaName + Schema = content.SchemaName, }, - ] + ], }); case Update.BulkShared: return GetSharedClient(client).BulkUpdateAsync(new BulkUpdate @@ -140,9 +140,9 @@ public static partial class ContentStrategies Type = BulkUpdateType.Update, Id = content.Id, Data = data, - Schema = content.SchemaName + Schema = content.SchemaName, }, - ] + ], }); default: return Task.CompletedTask; @@ -156,7 +156,7 @@ public static partial class ContentStrategies UpsertBulk, Bulk, BulkWithSchema, - BulkShared + BulkShared, } public static Task PatchAsync(this ISquidexClient client, ContentBase content, object data, @@ -183,9 +183,9 @@ public static partial class ContentStrategies Type = BulkUpdateType.Upsert, Id = content.Id, Data = data, - Patch = true + Patch = true, }, - ] + ], }); case Patch.Bulk: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -198,7 +198,7 @@ public static partial class ContentStrategies Id = content.Id, Data = data, }, - ] + ], }); case Patch.BulkWithSchema: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -210,9 +210,9 @@ public static partial class ContentStrategies Type = BulkUpdateType.Patch, Id = content.Id, Data = data, - Schema = content.SchemaName + Schema = content.SchemaName, }, - ] + ], }); case Patch.BulkShared: return GetSharedClient(client).BulkUpdateAsync(new BulkUpdate @@ -224,9 +224,9 @@ public static partial class ContentStrategies Type = BulkUpdateType.Patch, Id = content.Id, Data = data, - Schema = content.SchemaName + Schema = content.SchemaName, }, - ] + ], }); default: return Task.CompletedTask; @@ -242,7 +242,7 @@ public static partial class ContentStrategies BulkWithSchema, BulkShared, UpsertBulk, - UpdateBulk + UpdateBulk, } public static Task EnrichDefaultsAsync(this ISquidexClient client, ContentBase content, object data, @@ -258,14 +258,14 @@ public static partial class ContentStrategies case EnrichDefaults.Normal: var createOptions = new ContentEnrichDefaultsOptions { - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }; return GetClient().EnrichDefaultsAsync(content.Id, createOptions); case EnrichDefaults.Update: var updateOptions = new ContentUpdateOptions { - EnrichDefaults = true + EnrichDefaults = true, }; return GetClient().UpdateAsync(content.Id, data, updateOptions); @@ -273,7 +273,7 @@ public static partial class ContentStrategies var upsertOptions = new ContentUpsertOptions { EnrichDefaults = true, - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }; return GetClient().UpsertAsync(content.Id, data, upsertOptions); @@ -285,10 +285,10 @@ public static partial class ContentStrategies new BulkUpdateJob { Type = BulkUpdateType.EnrichDefaults, - Id = content.Id + Id = content.Id, }, ], - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }); case EnrichDefaults.UpdateBulk: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -303,7 +303,7 @@ public static partial class ContentStrategies EnrichDefaults = true, }, ], - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }); case EnrichDefaults.UpsertBulk: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -318,7 +318,7 @@ public static partial class ContentStrategies EnrichDefaults = true, }, ], - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }); case EnrichDefaults.BulkWithSchema: return GetClient().BulkUpdateAsync(new BulkUpdate @@ -329,10 +329,10 @@ public static partial class ContentStrategies { Type = BulkUpdateType.EnrichDefaults, Id = content.Id, - Schema = content.SchemaName + Schema = content.SchemaName, }, ], - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }); case EnrichDefaults.BulkShared: return GetSharedClient(client).BulkUpdateAsync(new BulkUpdate @@ -343,10 +343,10 @@ public static partial class ContentStrategies { Type = BulkUpdateType.EnrichDefaults, Id = content.Id, - Schema = content.SchemaName + Schema = content.SchemaName, }, ], - EnrichRequiredFields = requiredFields + EnrichRequiredFields = requiredFields, }); default: return Task.CompletedTask; diff --git a/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs b/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs index c3bafe451..2b5e12cf0 100644 --- a/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs +++ b/tools/TestSuite/TestSuite.Shared/Fixtures/ClientFixture.cs @@ -45,7 +45,7 @@ public class ClientFixture : IAsyncLifetime var createRequest = new CreateAppDto { - Name = name + Name = name, }; return PostAppAsync(createRequest); @@ -57,7 +57,7 @@ public class ClientFixture : IAsyncLifetime var request = new CreateTeamDto { - Name = name + Name = name, }; return Client.Teams.PostTeamAsync(request); @@ -80,7 +80,7 @@ public class ClientFixture : IAsyncLifetime { return new HttpClientHandler { - ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator + ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, }; }).Services .BuildServiceProvider(); diff --git a/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedAppFixture.cs b/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedAppFixture.cs index 27a0642f7..09961b067 100644 --- a/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedAppFixture.cs +++ b/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedAppFixture.cs @@ -21,7 +21,7 @@ public class CreatedAppFixture : ClientFixture { var createRequest = new AddLanguageDto { - Language = name + Language = name, }; await Client.Apps.PostLanguageAsync(createRequest); @@ -41,7 +41,7 @@ public class CreatedAppFixture : ClientFixture { var createRequest = new CreateAppDto { - Name = AppName + Name = AppName, }; await Client.Apps.PostAppAsync(createRequest); diff --git a/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedTeamFixture.cs b/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedTeamFixture.cs index 3d2e6644d..8cf0ff332 100644 --- a/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedTeamFixture.cs +++ b/tools/TestSuite/TestSuite.Shared/Fixtures/CreatedTeamFixture.cs @@ -27,7 +27,7 @@ public class CreatedTeamFixture : ClientFixture { var request = new CreateTeamDto { - Name = TeamName + Name = TeamName, }; Team = await Client.Teams.PostTeamAsync(request); diff --git a/tools/TestSuite/TestSuite.Shared/Fixtures/WebhookCatcherClient.cs b/tools/TestSuite/TestSuite.Shared/Fixtures/WebhookCatcherClient.cs index 96f427dd3..d96742e24 100644 --- a/tools/TestSuite/TestSuite.Shared/Fixtures/WebhookCatcherClient.cs +++ b/tools/TestSuite/TestSuite.Shared/Fixtures/WebhookCatcherClient.cs @@ -73,7 +73,7 @@ public sealed class WebhookCatcherClient httpClient = new HttpClient { - BaseAddress = new Uri($"http://{apiHost}:{apiPort}") + BaseAddress = new Uri($"http://{apiHost}:{apiPort}"), }; } diff --git a/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs b/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs index 46a99fae2..8f5ad1a29 100644 --- a/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs +++ b/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs @@ -30,40 +30,40 @@ public sealed class TestEntity : Content Name = TestEntityData.NumberField, Properties = new NumberFieldPropertiesDto { - IsRequired = true - } + IsRequired = true, + }, }, new UpsertSchemaFieldDto { Name = TestEntityData.StringField, Properties = new StringFieldPropertiesDto { - IsRequired = false - } + IsRequired = false, + }, }, new UpsertSchemaFieldDto { Name = TestEntityData.SearchableField, Properties = new StringFieldPropertiesDto { - IsRequired = false - } + IsRequired = false, + }, }, new UpsertSchemaFieldDto { Name = TestEntityData.GeoField, Properties = new GeolocationFieldPropertiesDto { - IsRequired = false - } + IsRequired = false, + }, }, new UpsertSchemaFieldDto { Name = TestEntityData.JsonField, Properties = new JsonFieldPropertiesDto { - IsRequired = false - } + IsRequired = false, + }, }, new UpsertSchemaFieldDto { @@ -71,28 +71,28 @@ public sealed class TestEntity : Content Partitioning = "language", Properties = new StringFieldPropertiesDto { - DefaultValue = "default" - } + DefaultValue = "default", + }, }, new UpsertSchemaFieldDto { Name = TestEntityData.IdField, Properties = new StringFieldPropertiesDto { - IsRequired = false - } + IsRequired = false, + }, }, new UpsertSchemaFieldDto { Name = TestEntityData.ImmutableField, Properties = new StringFieldPropertiesDto { - IsCreateOnly = true - } + IsCreateOnly = true, + }, }, ], Scripts = scripts, - IsPublished = true + IsPublished = true, }); return schema; @@ -108,10 +108,10 @@ public sealed class TestEntity : Content nested0 = index, nested1 = new { - nested2 = index - } + nested2 = index, + }, }), - String = index.ToString(CultureInfo.InvariantCulture) + String = index.ToString(CultureInfo.InvariantCulture), }; if (index % 2 == 0) @@ -122,8 +122,8 @@ public sealed class TestEntity : Content coordinates = new[] { index, - index - } + index, + }, }; } else diff --git a/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs b/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs index cd01740d9..f06eaa483 100644 --- a/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs +++ b/tools/TestSuite/TestSuite.Shared/Model/TestEntityWithReferences.cs @@ -26,11 +26,11 @@ public sealed class TestEntityWithReferences : Content