Example #1
0
        public void ThenItShouldPrefixCountQueryWithSelectCount()
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition("Name", DataOperator.Equals, "some-thing");

            Assert.AreEqual(CosmosQueryTestConstants.CountQueryPrefix, query.ToString(true).Substring(0, CosmosQueryTestConstants.CountQueryPrefix.Length));
        }
Example #2
0
        public void ThenItShouldAppendEqualsConditionsToQuery(string type)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddTypeCondition(type);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE re.type = '{type.ToLower()}'", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
Example #3
0
        internal static string QueryWhereClause(CosmosQuery query)
        {
            var queryText = QueryWithoutOrderByOrSkip(query);

            var whereIndex = queryText.IndexOf("WHERE", StringComparison.InvariantCultureIgnoreCase);

            return(queryText.Substring(whereIndex + 5).Trim());
        }
        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 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 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));
        }
Example #7
0
        public void ThenItShouldNotOrderByForCountQuery()
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition("Name", DataOperator.Equals, "some-thing");

            var orderByIndex = query.ToString(true).IndexOf(CosmosQueryTestConstants.OrderBy, StringComparison.InvariantCultureIgnoreCase);

            Assert.AreEqual(-1, orderByIndex);
        }
Example #8
0
        public void ThenItShouldHaveAConsistentOrder()
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition("Name", DataOperator.Equals, "some-thing");

            var queryOrderBy = query.ToString().Substring(query.ToString().Length - CosmosQueryTestConstants.OrderBy.Length);

            Assert.AreEqual(CosmosQueryTestConstants.OrderBy, queryOrderBy);
        }
        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));
        }
Example #10
0
        public void ThenItShouldAppendEqualsConditionsToQuery(string sourceSystemName, string sourceSystemId)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And);

            query.AddSourceSystemIdCondition(sourceSystemName, sourceSystemId);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ARRAY_CONTAINS(re.searchableSourceSystemIdentifiers, '{sourceSystemName.ToLower()}:{sourceSystemId.ToLower()}')",
                            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));
        }
Example #12
0
        public void ThenItShouldCombineMultipleConditions(CosmosCombinationOperator @operator, string expectedStringOperator)
        {
            var query = new CosmosQuery(@operator)
                        .AddCondition("Name", DataOperator.Equals, "some-thing")
                        .AddCondition("Status", DataOperator.Equals, "Open");

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ARRAY_CONTAINS(re.searchableName, 'some-thing') {expectedStringOperator} ARRAY_CONTAINS(re.searchableStatus, 'open')",
                            CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
Example #13
0
        public void ThenItShouldNotOffsetLimitForCountQuery()
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition("Name", DataOperator.Equals, "some-thing")
                        .TakeResultsBetween(10, 50);

            var offsetLimitIndex = query.ToString(true).IndexOf("OFFSET 10 LIMIT 50", StringComparison.InvariantCultureIgnoreCase);

            Assert.AreEqual(-1, offsetLimitIndex);
        }
Example #14
0
        public void ThenItShouldAddOffsetAndLimitToQuery()
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition("Name", DataOperator.Equals, "some-thing")
                        .TakeResultsBetween(10, 50);

            var expectedOffsetLimit = $"OFFSET 10 LIMIT 50";

            Assert.AreEqual(expectedOffsetLimit, query.ToString().Substring(query.ToString().Length - expectedOffsetLimit.Length));
        }
Example #15
0
        public void ThenItShouldAddGroupConditionsInParentheses()
        {
            var group = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition("Name", DataOperator.Equals, "some-thing")
                        .AddCondition("Status", DataOperator.Equals, "Open");

            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddGroup(group);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ({CosmosQueryTestConstants.QueryWhereClause(group)})", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
Example #16
0
        public void ThenItShouldAppendEqualsConditionsToQuery()
        {
            var pointInTime = DateTime.SpecifyKind(new DateTime(2020, 8, 21), DateTimeKind.Utc);

            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddPointInTimeCondition(pointInTime);

            var expectedPointInTime = "2020-08-21T00:00:00Z";

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE (re.validFrom <= '{expectedPointInTime}' AND (ISNULL(re.validTo) OR re.validTo >= '{expectedPointInTime}'))", CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
Example #17
0
        public void ThenItShouldMapEntityPropertyNamesToSearchableNames(string field, string searchableField, string value, bool expectValueQuoted, bool expectValueLowercased)
        {
            var query = new CosmosQuery(CosmosCombinationOperator.And)
                        .AddCondition(field, DataOperator.Equals, value);

            var expectedValue = expectValueQuoted
                ? (expectValueLowercased ? $"'{value.ToLower()}'" : $"'{value}'")
                : value;

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ARRAY_CONTAINS(re.{searchableField}, {expectedValue})",
                            CosmosQueryTestConstants.QueryWithoutOrderByOrSkip(query));
        }
Example #18
0
        internal static string QueryWithoutOrderByOrSkip(CosmosQuery query)
        {
            var queryText = query.ToString();

            var orderByIndex = queryText.IndexOf(OrderBy, StringComparison.InvariantCultureIgnoreCase);

            if (orderByIndex > -1)
            {
                queryText = queryText.Substring(0, orderByIndex).Trim();
            }

            return(queryText);
        }
Example #19
0
        public void ThenItShouldCombineMultipleGroups(CosmosCombinationOperator @operator, string expectedStringOperator)
        {
            var group1 = new CosmosQuery(CosmosCombinationOperator.Or)
                         .AddCondition("Name", DataOperator.Equals, "some-thing")
                         .AddCondition("Status", DataOperator.Equals, "Open");
            var group2 = new CosmosQuery(CosmosCombinationOperator.And)
                         .AddCondition("Name", DataOperator.Equals, "another-thing")
                         .AddCondition("Status", DataOperator.Equals, "Closed");

            var query = new CosmosQuery(@operator)
                        .AddGroup(group1)
                        .AddGroup(group2);

            Assert.AreEqual($"{CosmosQueryTestConstants.QueryPrefix} WHERE ({CosmosQueryTestConstants.QueryWhereClause(group1)}) {expectedStringOperator} ({CosmosQueryTestConstants.QueryWhereClause(group2)})",
                            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));
        }
Example #21
0
        static LargeDataController()
        {
            _cached = new CosmosQuery <MyItem>();
            var items = new List <MyItem>();

            for (int i = 0; i < 4600; i++)
            {
                items.Add(new MyItem
                {
                    id            = CreateRandomString(7, 8),
                    Name          = CreateRandomString(7, 8),
                    FullName      = CreateRandomString(18, 8),
                    PrefVendorRef = new Ref
                    {
                        FullName = CreateRandomString(7, 8),
                        ListID   = CreateRandomString(3, 2)
                    },
                });
            }
            _cached.Documents = items;
        }