diff --git a/Microsoft.Azure.Cosmos/src/Fluent/Settings/ContainerBuilder.cs b/Microsoft.Azure.Cosmos/src/Fluent/Settings/ContainerBuilder.cs index 397aab9566..3ba0168265 100644 --- a/Microsoft.Azure.Cosmos/src/Fluent/Settings/ContainerBuilder.cs +++ b/Microsoft.Azure.Cosmos/src/Fluent/Settings/ContainerBuilder.cs @@ -28,15 +28,22 @@ protected ContainerBuilder() { } - internal ContainerBuilder( - Database cosmosContainers, - CosmosClientContext clientContext, + /// + /// Creates an instance of ContainerBuilder . + /// + /// The Microsoft.Azure.Cosmos.Database object. + /// Azure Cosmos container name to create. + /// The path to the partition key. Example: /partitionKey + public ContainerBuilder( + Database database, string name, - string partitionKeyPath = null) - : base(name, partitionKeyPath) + string partitionKeyPath) + : base( + string.IsNullOrEmpty(name) ? throw new ArgumentNullException(nameof(name)) : name, + string.IsNullOrEmpty(partitionKeyPath) ? throw new ArgumentNullException(nameof(partitionKeyPath)) : partitionKeyPath) { - this.database = cosmosContainers; - this.clientContext = clientContext; + this.database = database ?? throw new ArgumentNullException(nameof(database)); + this.clientContext = database.Client.ClientContext; this.containerUri = UriFactory.CreateDocumentCollectionUri(this.database.Id, name); } diff --git a/Microsoft.Azure.Cosmos/src/Resource/Database/DatabaseCore.cs b/Microsoft.Azure.Cosmos/src/Resource/Database/DatabaseCore.cs index ab0cc9f918..faab570dda 100644 --- a/Microsoft.Azure.Cosmos/src/Resource/Database/DatabaseCore.cs +++ b/Microsoft.Azure.Cosmos/src/Resource/Database/DatabaseCore.cs @@ -681,17 +681,7 @@ public override ContainerBuilder DefineContainer( string name, string partitionKeyPath) { - if (string.IsNullOrEmpty(name)) - { - throw new ArgumentNullException(nameof(name)); - } - - if (string.IsNullOrEmpty(partitionKeyPath)) - { - throw new ArgumentNullException(nameof(partitionKeyPath)); - } - - return new ContainerBuilder(this, this.ClientContext, name, partitionKeyPath); + return new ContainerBuilder(this, name, partitionKeyPath); } #if PREVIEW diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Contracts/DotNetSDKAPI.json b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Contracts/DotNetSDKAPI.json index 31507703ae..edf73ebdfd 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Contracts/DotNetSDKAPI.json +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Contracts/DotNetSDKAPI.json @@ -2910,6 +2910,11 @@ "AsyncStateMachineAttribute" ], "MethodInfo": "System.Threading.Tasks.Task`1[Microsoft.Azure.Cosmos.ContainerResponse] CreateIfNotExistsAsync(System.Nullable`1[System.Int32], System.Threading.CancellationToken);IsAbstract:False;IsStatic:False;IsVirtual:False;IsGenericMethod:False;IsConstructor:False;IsFinal:False;" + }, + "Void .ctor(Microsoft.Azure.Cosmos.Database, System.String, System.String)": { + "Type": "Constructor", + "Attributes": [], + "MethodInfo": "[Void .ctor(Microsoft.Azure.Cosmos.Database, System.String, System.String), Void .ctor(Microsoft.Azure.Cosmos.Database, System.String, System.String)]" } }, "NestedTypes": {} diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Fluent/ContainerDefinitionForCreateTests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Fluent/ContainerDefinitionForCreateTests.cs index e47d300421..58361f89bb 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Fluent/ContainerDefinitionForCreateTests.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.Tests/Fluent/ContainerDefinitionForCreateTests.cs @@ -28,10 +28,10 @@ public class ContainerDefinitionForCreateTests public async Task MissingPKForCreateThrows() { Mock mockContainers = new Mock(); - + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, null); @@ -53,6 +53,8 @@ public async Task MissingPKForReplace_CallsReadAsync() .ReturnsAsync(mockContainerResponse.Object); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( It.Is((settings) => settings.PartitionKeyPath.Equals(partitionKey)), @@ -65,7 +67,6 @@ public async Task MissingPKForReplace_CallsReadAsync() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, null); @@ -79,6 +80,8 @@ public async Task WithThroughput() { Mock mockContainerResponse = new Mock(); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( It.IsAny(), @@ -92,7 +95,6 @@ public async Task WithThroughput() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, partitionKey); @@ -111,6 +113,8 @@ public async Task WithTimeToLivePropertyPath() { Mock mockContainerResponse = new Mock(); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( #pragma warning disable CS0612 // Type or member is obsolete @@ -126,7 +130,6 @@ public async Task WithTimeToLivePropertyPath() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, partitionKey); @@ -148,6 +151,8 @@ public async Task WithDefaultTimeToLiveTimeSpan() { Mock mockContainerResponse = new Mock(); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( It.Is((settings) => settings.DefaultTimeToLive.Equals((int)timeToLive.TotalSeconds)), @@ -161,7 +166,6 @@ public async Task WithDefaultTimeToLiveTimeSpan() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, partitionKey); @@ -181,6 +185,8 @@ public async Task WithDefaultTimeToLiveInt() { Mock mockContainerResponse = new Mock(); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( It.Is((settings) => settings.DefaultTimeToLive.Equals((int)timeToLive.TotalSeconds)), @@ -194,7 +200,6 @@ public async Task WithDefaultTimeToLiveInt() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, partitionKey); @@ -214,6 +219,8 @@ public async Task WithIndexingPolicy() { Mock mockContainerResponse = new Mock(); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( It.Is((settings) => IndexingMode.None.Equals(settings.IndexingPolicy.IndexingMode) && !settings.IndexingPolicy.Automatic), @@ -227,7 +234,6 @@ public async Task WithIndexingPolicy() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, partitionKey); @@ -250,6 +256,8 @@ public async Task WithUniqueKey() { Mock mockContainerResponse = new Mock(); Mock mockContainers = new Mock(); + Mock mockClient = new Mock(); + mockContainers.Setup(m => m.Client).Returns(mockClient.Object); mockContainers .Setup(c => c.CreateContainerAsync( It.Is((settings) => settings.UniqueKeyPolicy.UniqueKeys.Count == 1 && path.Equals(settings.UniqueKeyPolicy.UniqueKeys[0].Paths[0])), @@ -263,7 +271,6 @@ public async Task WithUniqueKey() ContainerBuilder containerFluentDefinitionForCreate = new ContainerBuilder( mockContainers.Object, - GetContext(), containerName, partitionKey);