public async Task ItemIterator()
        {
            IList <ToDoActivity> deleteList = null;
            HashSet <string>     itemIds    = null;

            try
            {
                deleteList = await CreateRandomItems(3, randomPartitionKey : true);

                itemIds = deleteList.Select(x => x.id).ToHashSet <string>();
                CosmosResultSetIterator <ToDoActivity> setIterator =
                    this.Container.Items.GetItemIterator <ToDoActivity>();
                while (setIterator.HasMoreResults)
                {
                    foreach (ToDoActivity toDoActivity in await setIterator.FetchNextSetAsync(this.cancellationToken))
                    {
                        if (itemIds.Contains(toDoActivity.id))
                        {
                            itemIds.Remove(toDoActivity.id);
                        }
                    }
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }

            Assert.AreEqual(itemIds.Count, 0);
        }
        public async Task ItemMultiplePartitionOrderByQueryStream()
        {
            IList <ToDoActivity> deleteList = new List <ToDoActivity>();

            try
            {
                deleteList = await CreateRandomItems(300, randomPartitionKey : true);

                CosmosSqlQueryDefinition sql = new CosmosSqlQueryDefinition("SELECT * FROM toDoActivity t ORDER BY t.taskNum ");

                CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
                {
                    MaxBufferedItemCount = 10,
                    ResponseContinuationTokenLimitInKb = 500
                };

                List <ToDoActivity> resultList      = new List <ToDoActivity>();
                double totalRequstCharge            = 0;
                CosmosResultSetIterator setIterator =
                    this.Container.Items.CreateItemQueryAsStream(sql, maxConcurrency: 5, maxItemCount: 1, requestOptions: requestOptions);
                while (setIterator.HasMoreResults)
                {
                    using (CosmosQueryResponse iter = await setIterator.FetchNextSetAsync())
                    {
                        Assert.IsTrue(iter.IsSuccess);
                        Assert.IsNull(iter.ErrorMessage);
                        Assert.IsTrue(iter.Count <= 5);
                        totalRequstCharge += iter.RequestCharge;

                        ToDoActivity response = this.jsonSerializer.FromStream <ToDoActivity[]>(iter.Content).First();
                        resultList.Add(response);
                    }
                }

                Assert.AreEqual(deleteList.Count, resultList.Count);
                Assert.IsTrue(totalRequstCharge > 0);

                List <ToDoActivity> verifiedOrderBy = deleteList.OrderBy(x => x.taskNum).ToList();
                for (int i = 0; i < verifiedOrderBy.Count(); i++)
                {
                    Assert.AreEqual(verifiedOrderBy[i].taskNum, resultList[i].taskNum);
                    Assert.AreEqual(verifiedOrderBy[i].id, resultList[i].id);
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }
        }
        public async Task ValidateMaxItemCountOnItemQuery()
        {
            IList <ToDoActivity> deleteList = new List <ToDoActivity>();
            HashSet <string>     itemIds    = new HashSet <string>();

            try
            {
                deleteList = await CreateRandomItems(6, randomPartitionKey : false);

                CosmosSqlQueryDefinition sql = new CosmosSqlQueryDefinition("select * from toDoActivity t where t.taskNum = @task").UseParameter("@task", deleteList.First().taskNum);

                // Test max size at 1
                CosmosResultSetIterator <ToDoActivity> setIterator =
                    this.Container.Items.CreateItemQuery <ToDoActivity>(sql, "TBD", maxItemCount: 1);
                while (setIterator.HasMoreResults)
                {
                    CosmosQueryResponse <ToDoActivity> iter = await setIterator.FetchNextSetAsync();

                    Assert.AreEqual(1, iter.Count());
                }

                // Test max size at 2
                CosmosResultSetIterator <ToDoActivity> setIteratorMax2 =
                    this.Container.Items.CreateItemQuery <ToDoActivity>(sql, "TBD", maxItemCount: 2);
                while (setIteratorMax2.HasMoreResults)
                {
                    CosmosQueryResponse <ToDoActivity> iter = await setIteratorMax2.FetchNextSetAsync();

                    Assert.AreEqual(2, iter.Count());
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }
        }
        public async Task ItemMultiplePartitionQuery()
        {
            IList <ToDoActivity> deleteList = new List <ToDoActivity>();

            try
            {
                deleteList = await CreateRandomItems(3, randomPartitionKey : true);

                ToDoActivity             find = deleteList.First();
                CosmosSqlQueryDefinition sql  = new CosmosSqlQueryDefinition("select * from toDoActivity t where t.id = '" + find.id + "'");

                CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
                {
                    MaxBufferedItemCount = 10,
                    ResponseContinuationTokenLimitInKb = 500
                };

                CosmosResultSetIterator <ToDoActivity> setIterator =
                    this.Container.Items.CreateItemQuery <ToDoActivity>(sql, maxConcurrency: 1, maxItemCount: 1, requestOptions: requestOptions);
                while (setIterator.HasMoreResults)
                {
                    CosmosQueryResponse <ToDoActivity> iter = await setIterator.FetchNextSetAsync();

                    Assert.AreEqual(1, iter.Count());
                    ToDoActivity response = iter.First();
                    Assert.AreEqual(find.id, response.id);
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }
        }
        public async Task ItemQueryStreamSerializationSetting()
        {
            IList <ToDoActivity> deleteList = new List <ToDoActivity>();

            try
            {
                deleteList = await CreateRandomItems(101, randomPartitionKey : true);

                CosmosSqlQueryDefinition   sql     = new CosmosSqlQueryDefinition("SELECT * FROM toDoActivity t ORDER BY t.taskNum");
                CosmosSerializationOptions options = new CosmosSerializationOptions(
                    ContentSerializationFormat.CosmosBinary.ToString(),
                    (content) => JsonNavigator.Create(content),
                    () => JsonWriter.Create(JsonSerializationFormat.Binary));

                CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
                {
                    CosmosSerializationOptions = options
                };

                List <ToDoActivity> resultList      = new List <ToDoActivity>();
                double totalRequstCharge            = 0;
                CosmosResultSetIterator setIterator =
                    this.Container.Items.CreateItemQueryAsStream(sql, maxConcurrency: 5, maxItemCount: 5, requestOptions: requestOptions);
                while (setIterator.HasMoreResults)
                {
                    using (CosmosQueryResponse iter = await setIterator.FetchNextSetAsync())
                    {
                        Assert.IsTrue(iter.IsSuccess);
                        Assert.IsNull(iter.ErrorMessage);
                        Assert.IsTrue(iter.Count <= 5);
                        totalRequstCharge += iter.RequestCharge;
                        IJsonReader reader     = JsonReader.Create(iter.Content);
                        IJsonWriter textWriter = JsonWriter.Create(JsonSerializationFormat.Text);
                        textWriter.WriteAll(reader);
                        string json = Encoding.UTF8.GetString(textWriter.GetResult());
                        Assert.IsNotNull(json);
                        ToDoActivity[] responseActivities = JsonConvert.DeserializeObject <ToDoActivity[]>(json);
                        resultList.AddRange(responseActivities);
                    }
                }

                Assert.AreEqual(deleteList.Count, resultList.Count);
                Assert.IsTrue(totalRequstCharge > 0);

                List <ToDoActivity> verifiedOrderBy = deleteList.OrderBy(x => x.taskNum).ToList();
                for (int i = 0; i < verifiedOrderBy.Count(); i++)
                {
                    Assert.AreEqual(verifiedOrderBy[i].taskNum, resultList[i].taskNum);
                    Assert.AreEqual(verifiedOrderBy[i].id, resultList[i].id);
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }
        }