public void ThenItShouldAppendIsNotNullConditionsToQuery(string field)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddCondition(field, DataOperator.IsNotNull, null);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ARRAY_LENGTH(re.{field}) > 0", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
        public void ThenItShouldAppendLessThanOrEqualToConditionsToQuery(string field, string value)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddCondition(field, DataOperator.LessThanOrEqualTo, value);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE EXISTS (SELECT VALUE v FROM v IN re.{field} WHERE v <= '{value}T00:00:00')", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
        public void ThenItShouldAppendEqualsConditionsToQuery(string field, string value)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddCondition(field, DataOperator.Equals, value);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ARRAY_CONTAINS(re.{field}, '{value}T00:00:00')", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
        public void ThenItShouldAppendBetweenConditionsToQuery(string field, string lowerBound, string upperBound)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddCondition(field, DataOperator.Between, $"{lowerBound} to {upperBound}");

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE EXISTS (SELECT VALUE v FROM v IN re.{field} WHERE v >= '{lowerBound}T00:00:00' AND v <= '{upperBound}T00:00:00')",
                            CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
        public void ThenItShouldAppendContainsConditionsToQuery(string field, string value)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddCondition(field, DataOperator.Contains, value);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE EXISTS (SELECT VALUE v FROM v IN re.{field} WHERE CONTAINS(v, '{value}'))",
                            CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
        public void ThenItShouldAppendInConditionsToQuery(string field, params string[] values)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddCondition(field, DataOperator.In, values.Select(v => v.ToString()).Aggregate((x, y) => $"{x}, {y}"));

            var expectedGroupConditions = new StringBuilder();

            foreach (var value in values)
            {
                if (expectedGroupConditions.Length > 0)
                {
                    expectedGroupConditions.Append(" OR ");
                }

                expectedGroupConditions.Append($"ARRAY_CONTAINS(re.{field}, '{value}')");
            }
            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ({expectedGroupConditions})", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }