private static IEnumerable <T> GetResourcesHelper <T>(
            IReadOnlyList <CosmosElement> cosmosArray,
            CosmosSerializerCore serializerCore)
        {
            List <T> result = new List <T>();

            foreach (CosmosElement element in cosmosArray)
            {
                MemoryStream memory = CosmosElementSerializer.ElementToMemoryStream(element, null);
                result.Add(serializerCore.FromStream <T>(memory));
            }

            return(result);
        }
        private void TestProperty <T>(
            CosmosSerializerCore serializerCore,
            string id,
            string defaultJson)
        {
            dynamic property = serializerCore.FromStream <T>(new MemoryStream(Encoding.UTF8.GetBytes(defaultJson)));

            Assert.AreEqual(id, property.Id);
            using (Stream stream = serializerCore.ToStream <T>(property))
            {
                using (StreamReader sr = new StreamReader(stream))
                {
                    string propertyJson = sr.ReadToEnd();
                    Assert.AreEqual(defaultJson, propertyJson);
                }
            }
        }
        public void ValidateSqlQuerySpecSerialization()
        {
            int toCount   = 0;
            int fromCount = 0;

            CosmosSerializerHelper serializerHelper = new CosmosSerializerHelper(
                null,
                (input) => fromCount++,
                (input) => toCount++);

            CosmosSerializerCore serializerCore = new CosmosSerializerCore(serializerHelper);
            SqlQuerySpec         querySpec      = new SqlQuerySpec("select * from T where T.id = @id");

            querySpec.Parameters = new SqlParameterCollection()
            {
                new SqlParameter("@id", "testValue")
            };

            try
            {
                serializerCore.ToStream <SqlQuerySpec>(querySpec);
                Assert.Fail("ToStream should throw exception");
            }
            catch (ArgumentException e)
            {
                Assert.IsNotNull(e);
            }

            try
            {
                serializerCore.FromStream <SqlQuerySpec>(new MemoryStream());
                Assert.Fail("FromStream should throw exception");
            }
            catch (ArgumentException e)
            {
                Assert.IsNotNull(e);
            }

            Assert.AreEqual(0, toCount);
            Assert.AreEqual(0, fromCount);

            using (Stream stream = serializerCore.ToStreamSqlQuerySpec(querySpec, ResourceType.Offer)) { }

            Assert.AreEqual(0, toCount);
            Assert.AreEqual(0, fromCount);

            List <ResourceType> publicQuerySupportedTypes = new List <ResourceType>()
            {
                ResourceType.Database,
                ResourceType.Collection,
                ResourceType.Document,
                ResourceType.Trigger,
                ResourceType.UserDefinedFunction,
                ResourceType.StoredProcedure,
                ResourceType.Permission,
                ResourceType.User,
                ResourceType.Conflict
            };

            foreach (ResourceType resourceType in publicQuerySupportedTypes)
            {
                toCount = 0;

                using (Stream stream = serializerCore.ToStreamSqlQuerySpec(querySpec, resourceType))
                {
                    Assert.AreEqual(1, toCount);
                    Assert.AreEqual(0, fromCount);
                }
            }
        }