diff --git a/src/Workleap.Extensions.Mongo.Tests/UniqueIndexNameTests.cs b/src/Workleap.Extensions.Mongo.Tests/UniqueIndexNameTests.cs index faf68ba..afa301d 100644 --- a/src/Workleap.Extensions.Mongo.Tests/UniqueIndexNameTests.cs +++ b/src/Workleap.Extensions.Mongo.Tests/UniqueIndexNameTests.cs @@ -1,4 +1,4 @@ -using Workleap.Extensions.Xunit; +using Workleap.Extensions.Xunit; using MongoDB.Driver; using Workleap.Extensions.Mongo.Indexing; @@ -39,6 +39,19 @@ public void UniqueIndex_NotCreated_When_Invalid_IndexName_Specified(string index Assert.Null(uxIndexName); } + [Fact] + public void UniqueIndex_ComputeDefaultName_When_IndexName_NotSpecified() + { + var index = new CreateIndexModel( + Builders.IndexKeys.Ascending(x => x.SampleField), + options: null); + + var result = UniqueIndexName.TryCreate(index, out var uxIndexName); + + Assert.True(result); + Assert.Equal("SampleField_1", uxIndexName!.Prefix); + } + private static CreateIndexModel CreateIndex(string indexName) { return new CreateIndexModel( diff --git a/src/Workleap.Extensions.Mongo/Indexing/UniqueIndexName.cs b/src/Workleap.Extensions.Mongo/Indexing/UniqueIndexName.cs index b726b01..a8858f9 100644 --- a/src/Workleap.Extensions.Mongo/Indexing/UniqueIndexName.cs +++ b/src/Workleap.Extensions.Mongo/Indexing/UniqueIndexName.cs @@ -1,10 +1,11 @@ -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Driver; +using MongoDB.Driver.Core.Operations; namespace Workleap.Extensions.Mongo.Indexing; @@ -37,8 +38,7 @@ private UniqueIndexName() public static bool TryCreate(CreateIndexModel indexModel, [MaybeNullWhen(false)] out UniqueIndexName indexName) { var options = indexModel.Options; - - var prefix = options.Name?.Trim() ?? string.Empty; + var prefix = options?.Name?.Trim() ?? IndexNameHelper.GetIndexName(indexModel.Keys.Render(BsonSerializer.LookupSerializer(), BsonSerializer.SerializerRegistry)); if (prefix.Length == 0) { indexName = null; @@ -50,10 +50,10 @@ public static bool TryCreate(CreateIndexModel indexModel, var bsonIndexFields = indexModel.Keys.Render(bsonSerializer, serializerRegistry).ToString(); var indexDescription = new StringBuilder(bsonIndexFields) - .Append(options.Unique.HasValue && options.Unique.Value ? "unique" : string.Empty) - .Append(options.Sparse.HasValue && options.Sparse.Value ? "sparse" : string.Empty) - .Append(options.WildcardProjection is { } projection ? projection.Render(bsonSerializer, serializerRegistry) : string.Empty) - .Append(options.PartialFilterExpression is { } filter ? filter.Render(bsonSerializer, serializerRegistry) : string.Empty) + .Append(options?.Unique is true ? "unique" : string.Empty) + .Append(options?.Sparse is true ? "sparse" : string.Empty) + .Append(options?.WildcardProjection is { } projection ? projection.Render(bsonSerializer, serializerRegistry) : string.Empty) + .Append(options?.PartialFilterExpression is { } filter ? filter.Render(bsonSerializer, serializerRegistry) : string.Empty) .ToString(); string hashHex;