public void VerifyItemQueryResponseResult() { string contianerRid = "mockContainerRid"; (QueryResponseCore response, IList <ToDoItem> items)factoryResponse = QueryResponseMessageFactory.Create( itemIdPrefix: $"TestPage", continuationToken: "SomeContinuationToken", collectionRid: contianerRid, itemCount: 100); QueryResponseCore responseCore = factoryResponse.response; List <CosmosElement> cosmosElements = new List <CosmosElement>(responseCore.CosmosElements); QueryResponse queryResponse = QueryResponse.CreateSuccess( result: cosmosElements, count: cosmosElements.Count, responseLengthBytes: responseCore.ResponseLengthBytes, serializationOptions: null, responseHeaders: new CosmosQueryResponseMessageHeaders( responseCore.ContinuationToken, responseCore.DisallowContinuationTokenMessage, ResourceType.Document, contianerRid) { RequestCharge = responseCore.RequestCharge, ActivityId = responseCore.ActivityId }, diagnostics: new CosmosDiagnosticsContextCore()); QueryResponse <ToDoItem> itemQueryResponse = QueryResponseMessageFactory.CreateQueryResponse <ToDoItem>(queryResponse); List <ToDoItem> resultItems = new List <ToDoItem>(itemQueryResponse.Resource); ToDoItemComparer comparer = new ToDoItemComparer(); Assert.AreEqual(factoryResponse.items.Count, resultItems.Count); for (int i = 0; i < factoryResponse.items.Count; i++) { Assert.AreNotSame(factoryResponse.items[i], resultItems[i]); Assert.AreEqual(0, comparer.Compare(factoryResponse.items[i], resultItems[i])); } }
private static IList <ToDoItem> GenerateAndMockResponseHelper( Mock <CosmosQueryClient> mockQueryClient, Mock <IRoutingMapProvider> mockRoutingMap, IList <ToDoItem> allItemsOrdered, bool isOrderByQuery, SqlQuerySpec sqlQuerySpec, string containerRid, string initContinuationToken, int maxPageSize, MockPartitionResponse[] mockResponseForSinglePartition, CancellationToken cancellationTokenForMocks) { if (mockResponseForSinglePartition == null) { throw new ArgumentNullException(nameof(mockResponseForSinglePartition)); } // Loop through all the partitions foreach (MockPartitionResponse partitionAndMessages in mockResponseForSinglePartition) { PartitionKeyRange partitionKeyRange = partitionAndMessages.PartitionKeyRange; string previousContinuationToken = initContinuationToken; // Loop through each message inside the partition List <int[]> messages = partitionAndMessages.MessagesWithItemIndex; int messagesCount = messages == null ? 0 : messages.Count; int lastMessageIndex = messagesCount - 1; for (int i = 0; i < messagesCount; i++) { int[] message = partitionAndMessages.MessagesWithItemIndex[i]; string newContinuationToken = null; List <ToDoItem> currentPageItems = new List <ToDoItem>(); // Null represents an empty page if (message != null) { foreach (int itemPosition in message) { currentPageItems.Add(allItemsOrdered[itemPosition]); } } // Last message should have null continuation token // Split means it's not the last message for this PK range if (i != lastMessageIndex || partitionAndMessages.HasSplit) { newContinuationToken = Guid.NewGuid().ToString(); } QueryResponse queryResponse = QueryResponseMessageFactory.CreateQueryResponse( currentPageItems, isOrderByQuery, newContinuationToken, containerRid); mockQueryClient.Setup(x => x.ExecuteItemQueryAsync( It.IsAny <Uri>(), ResourceType.Document, OperationType.Query, containerRid, It.IsAny <QueryRequestOptions>(), It.Is <SqlQuerySpec>(specInput => MockItemProducerFactory.IsSqlQuerySpecEqual(sqlQuerySpec, specInput)), previousContinuationToken, It.Is <PartitionKeyRangeIdentity>(rangeId => string.Equals(rangeId.PartitionKeyRangeId, partitionKeyRange.Id) && string.Equals(rangeId.CollectionRid, containerRid)), It.IsAny <bool>(), maxPageSize, cancellationTokenForMocks)) .Returns(Task.FromResult(queryResponse)); previousContinuationToken = newContinuationToken; } if (partitionAndMessages.HasSplit) { QueryResponse querySplitResponse = QueryResponseMessageFactory.CreateSplitResponse(containerRid); mockRoutingMap.Setup(x => x.TryGetOverlappingRangesAsync( containerRid, It.Is <Documents.Routing.Range <string> >(inputRange => inputRange.Equals(partitionKeyRange.ToRange())), true)).Returns(Task.FromResult(partitionAndMessages.GetPartitionKeyRangeOfSplit())); mockQueryClient.Setup(x => x.ExecuteItemQueryAsync( It.IsAny <Uri>(), ResourceType.Document, OperationType.Query, containerRid, It.IsAny <QueryRequestOptions>(), It.Is <SqlQuerySpec>(specInput => MockItemProducerFactory.IsSqlQuerySpecEqual(sqlQuerySpec, specInput)), previousContinuationToken, It.Is <PartitionKeyRangeIdentity>(rangeId => string.Equals(rangeId.PartitionKeyRangeId, partitionKeyRange.Id) && string.Equals(rangeId.CollectionRid, containerRid)), It.IsAny <bool>(), maxPageSize, cancellationTokenForMocks)) .Returns(Task.FromResult(querySplitResponse)); GenerateAndMockResponseHelper( mockQueryClient: mockQueryClient, mockRoutingMap: mockRoutingMap, allItemsOrdered: allItemsOrdered, isOrderByQuery: isOrderByQuery, sqlQuerySpec: sqlQuerySpec, containerRid: containerRid, initContinuationToken: previousContinuationToken, maxPageSize: maxPageSize, mockResponseForSinglePartition: partitionAndMessages.Split, cancellationTokenForMocks: cancellationTokenForMocks); } } return(allItemsOrdered); }