public void IndicateInvalidColumnSetupsAsInvalid(string[] goodColumns, string[] checkedFields, bool isInvalid)
        {
            var sut = new ValidColumns(goodColumns);

            Assert.Equal(isInvalid, sut.ContainsInvalidColumns(checkedFields));
            Assert.Equal(!isInvalid, sut.ContainsOnlyValidColumns(checkedFields));
        }
        public void GetNonSafeNameAsEmpty()
        {
            IValidColumns sut = new ValidColumns(new [] { "Good_Column" });

            var result = sut.GetColumn("Bad_Column");

            Assert.Equal(string.Empty, result);
        }
        public void GetSafeName()
        {
            IValidColumns sut = new ValidColumns(new [] { "Good_Column" });

            var result = sut.GetColumn("Good_Column");

            Assert.Equal("Good_Column", result);
        }
        public void ReturnQueryBuilder()
        {
            var validColumns = new ValidColumns(new []
            {
                "ProductId",
                "Name",
                "ProductNumber",
                "MakeFlag",
                "FinishedGoodsFlag",
                "Color",
                "SafetyStockLevel",
                "ReorderPoint",
                "StandardCost",
                "ProductLine",
            });

            var query = new Query
            {
                Fields = new[]
                {
                    "ProductId",
                    "Color",
                    "Name",
                    "ProductNumber",
                    "ProductLine",
                    "StandardCost",
                },
                Distinct = true,
                Filters  = new[]
                {
                    new Filter {
                        Property = "ProductLine", Values = new object[] { "Canceled" }
                    },
                    new Filter {
                        Property = "Name", Values = new object[] { "Joe's Car" }
                    },
                },
                Sort      = "ProductNumber",
                Direction = "asc"
            };

            var builder = new QueryOrchestrator();

            var(sqlQueryGenerator, _) = builder.BuildQuery(query, validColumns, AdventureWorksTableName);
            var actual = PoorMansTSqlFormatterLib.SqlFormattingManager.DefaultFormat(sqlQueryGenerator);

            Approvals.Verify(actual);
        }
        public void ReturnParameters()
        {
            var validColumns = new ValidColumns(new []
            {
                "ProductId",
                "Name",
                "ProductNumber",
                "MakeFlag",
                "FinishedGoodsFlag",
                "Color",
                "SafetyStockLevel",
                "ReorderPoint",
                "StandardCost",
                "ProductLine",
            });

            var query = new Query
            {
                Fields = new[]
                {
                    "ProductId",
                    "Color",
                    "Name",
                    "ProductNumber",
                    "ProductLine",
                    "StandardCost",
                },
                Filters = new[]
                {
                    new Filter {
                        Property = "ProductLine", Values = new object[] { "Canceled" }
                    },
                    new Filter {
                        Property = "StandardCost", Values = new object[] { 50 }
                    },
                },
                Sort      = "Name",
                Direction = "asc"
            };

            var builder = new QueryOrchestrator();

            var(_, parameters) = builder.BuildQuery(query, validColumns, AdventureWorksTableName);
            Approvals.VerifyAll(parameters, "parameter");
        }
Пример #6
0
        /// <summary>
        /// Determines the version of the currently installed database.
        /// </summary>
        /// <returns>
        /// A <see cref="Version"/> with Major and Minor values for
        /// non-empty database, otherwise "0.0.0" for empty databases.
        /// </returns>
        public Version DetermineInstalledVersion()
        {
            //If (ValidTables.Count == 0) database is empty and we return -> new Version(0, 0, 0);
            if (ValidTables.Count == 0)
            {
                return(new Version(0, 0, 0));
            }

            //If Errors is empty or if TableDefinitions tables + columns correspond to valid tables + columns then we're at current version
            if (!Errors.Any() ||
                (TableDefinitions.All(x => ValidTables.Contains(x.Name)) &&
                 TableDefinitions.SelectMany(definition => definition.Columns).All(x => ValidColumns.Contains(x.Name))))
            {
                return(UmbracoVersion.Current);
            }

            //If Errors contains umbracoApp or umbracoAppTree its pre-6.0.0 -> new Version(4, 10, 0);
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.Equals("umbracoApp") || x.Item2.Equals("umbracoAppTree"))))
            {
                //If Errors contains umbracoUser2app or umbracoAppTree foreignkey to umbracoApp exists its pre-4.8.0 -> new Version(4, 7, 0);
                if (Errors.Any(x =>
                               x.Item1.Equals("Constraint") &&
                               (x.Item2.Contains("umbracoUser2app_umbracoApp") ||
                                x.Item2.Contains("umbracoAppTree_umbracoApp"))))
                {
                    return(new Version(4, 7, 0));
                }

                return(new Version(4, 9, 0));
            }

            //if the error is for umbracoServer
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.Equals("umbracoServer"))))
            {
                return(new Version(6, 0, 0));
            }

            return(UmbracoVersion.Current);
        }
        public void ShouldReturnAllValidColumns()
        {
            IValidColumns sut = new ValidColumns(new[] { "A_Correct_Column", "A_Great_Column" });

            Approvals.VerifyAll(sut.GetColumns(), "Column");
        }
        public void ShouldDetectAnyFieldIsValid()
        {
            IValidColumns sut = new ValidColumns(new[] { "A_Correct_Column", "A_Great_Column" });

            Assert.False(sut.IsInvalidColumn("A_Great_Column"));
        }
        public void ShouldDetectSecondValidField()
        {
            IValidColumns sut = new ValidColumns(new[] { "A_Correct_Column" });

            Assert.True(sut.IsInvalidColumn("A_Good_Column"));
        }
        public void ShouldDetectValidField()
        {
            IValidColumns sut = new ValidColumns(new[] { "A_Good_Column" });

            Assert.False(sut.IsInvalidColumn("A_Good_Column"));
        }
        public void ShouldGetValidColumnsFromInstancePropertyNames()
        {
            var sut = ValidColumns.From <ModelForColumnNames>();

            Approvals.VerifyAll(sut.GetColumns(), "Column");
        }
        /// <summary>
        /// Determines the version of the currently installed database by detecting the current database structure
        /// </summary>
        /// <returns>
        /// A <see cref="Version"/> with Major and Minor values for
        /// non-empty database, otherwise "0.0.0" for empty databases.
        /// </returns>
        public Version DetermineInstalledVersion()
        {
            //If (ValidTables.Count == 0) database is empty and we return -> new Version(0, 0, 0);
            if (ValidTables.Count == 0)
            {
                return(new Version(0, 0, 0));
            }

            //If Errors is empty or if TableDefinitions tables + columns correspond to valid tables + columns then we're at current version
            if (Errors.Any() == false ||
                (TableDefinitions.All(x => ValidTables.Contains(x.Name)) &&
                 TableDefinitions.SelectMany(definition => definition.Columns).All(x => ValidColumns.Contains(x.Name))))
            {
                return(UmbracoVersion.Current);
            }

            //If Errors contains umbracoApp or umbracoAppTree its pre-6.0.0 -> new Version(4, 10, 0);
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoApp") || x.Item2.InvariantEquals("umbracoAppTree"))))
            {
                //If Errors contains umbracoUser2app or umbracoAppTree foreignkey to umbracoApp exists its pre-4.8.0 -> new Version(4, 7, 0);
                if (Errors.Any(x =>
                               x.Item1.Equals("Constraint") &&
                               (x.Item2.InvariantContains("umbracoUser2app_umbracoApp") ||
                                x.Item2.InvariantContains("umbracoAppTree_umbracoApp"))))
                {
                    return(new Version(4, 7, 0));
                }

                return(new Version(4, 8, 0));
            }

            //if the error is for umbracoServer
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoServer"))))
            {
                return(new Version(6, 0, 0));
            }

            //if the error indicates a problem with the column cmsMacroProperty.macroPropertyType then it is not version 7
            // since these columns get removed in v7
            if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cmsMacroProperty,macroPropertyType"))))
            {
                //if the error is for this IX_umbracoNodeTrashed which is added in 6.2 AND in 7.1 but we do not have the above columns
                // then it must mean that we aren't on 6.2 so must be 6.1
                if (Errors.Any(x => x.Item1.Equals("Index") && (x.Item2.InvariantEquals("IX_umbracoNodeTrashed"))))
                {
                    return(new Version(6, 1, 0));
                }
                else
                {
                    //if there are no errors for that index, then the person must have 6.2 installed
                    return(new Version(6, 2, 0));
                }
            }

            //if the error indicates a problem with the constraint FK_cmsContent_cmsContentType_nodeId then it is not version 7.2
            // since this gets added in 7.2.0 so it must be the previous version
            if (Errors.Any(x => x.Item1.Equals("Constraint") && (x.Item2.InvariantEquals("FK_cmsContent_cmsContentType_nodeId"))))
            {
                return(new Version(7, 0, 0));
            }

            //if the error is for umbracoAccess it must be the previous version to 7.3 since that is when it is added
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoAccess"))))
            {
                return(new Version(7, 2, 0));
            }

            //if the error is for umbracoDeployChecksum it must be the previous version to 7.4 since that is when it is added
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoDeployChecksum"))))
            {
                return(new Version(7, 3, 0));
            }

            //if the error is for umbracoRedirectUrl it must be the previous version to 7.5 since that is when it is added
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoRedirectUrl"))))
            {
                return(new Version(7, 4, 0));
            }

            //if the error indicates a problem with the column cmsMacroProperty.uniquePropertyId then it is not version 7.6 since that is when it is added
            if (Errors.Any(x => x.Item1.Equals("Column") && (x.Item2.InvariantEquals("cmsMacroProperty,uniquePropertyId"))))
            {
                return(new Version(7, 5, 0));
            }

            //if the error is for umbracoUserGroup it must be the previous version to 7.7 since that is when it is added
            if (Errors.Any(x => x.Item1.Equals("Table") && (x.Item2.InvariantEquals("umbracoUserStartNode"))))
            {
                return(new Version(7, 6, 0));
            }

            return(UmbracoVersion.Current);
        }
Пример #13
0
        /// <summary>
        /// Determines the version of the currently installed database.
        /// </summary>
        /// <returns>
        /// A <see cref="Version"/> with Major and Minor values for
        /// non-empty database, otherwise "0.0.0" for empty databases.
        /// </returns>
        public new Version DetermineInstalledVersion()
        {
            //If (ValidTables.Count == 0) database is empty and we return -> new Version(0, 0, 0);
            if (ValidTables.Count == 0)
            {
                return(new Version(0, 0, 0));
            }

            //If Errors is empty or if TableDefinitions tables + columns correspond to valid tables + columns then we're at current version
            if (!Errors.Any() ||
                (TableDefinitions.All(x => ValidTables.Contains(x.Name)) &&
                 TableDefinitions.SelectMany(definition => definition.Columns).All(x => ValidColumns.Contains(x.Name))))
            {
                return(MerchelloVersion.Current);
            }


            return(MerchelloVersion.Current);
        }
        public void ReturnMoreComplexParameters()
        {
            var validColumns = new ValidColumns(new []
            {
                "ProductId",
                "Name",
                "ProductNumber",
                "MakeFlag",
                "FinishedGoodsFlag",
                "Color",
                "SafetyStockLevel",
                "ReorderPoint",
                "StandardCost",
                "ProductLine",
            });

            var query = new Query
            {
                Fields = new[]
                {
                    "ProductId",
                    "Name",
                    "ProductNumber",
                    "ProductLine",
                    "ReorderPoint",
                    "StandardCost",
                    "MakeFlag",
                    "Color",
                },
                Filters = new[]
                {
                    new Filter
                    {
                        Property = "Name",
                        Values   = new object[] { "Widget-D", "Enameled Widget" }
                    },
                    new Filter
                    {
                        Property = "ProductLine",
                        Values   = new object[]
                        {
                            "(Blanks)",
                            "Books",
                            "Widgets",
                            "Tools",
                            "Food",
                        }
                    },
                    new Filter
                    {
                        Property = "Color",
                        Values   = new object[] { "#AB558A" },
                    },
                },
                Sort      = "ProductNumber",
                Direction = "asc",
            };

            var builder = new QueryOrchestrator();

            var(_, parameters) = builder.BuildQuery(query, validColumns, AdventureWorksTableName);

            Approvals.VerifyAll(parameters, "parameter", parameter =>
            {
                var(name, value) = parameter;
                var valueString  =
                    value is IEnumerable <object> objects
                        ? string.Join(", ", objects)
                        : value.ToString();

                return($"(\"{name}\", {valueString})");
            });
        }
        public void ReturnMoreComplexQueryBuilder()
        {
            var validColumns = new ValidColumns(new []
            {
                "ProductId",
                "Name",
                "ProductNumber",
                "MakeFlag",
                "FinishedGoodsFlag",
                "Color",
                "SafetyStockLevel",
                "ReorderPoint",
                "StandardCost",
                "ProductLine",
            });

            var query = new Query
            {
                Fields = new[]
                {
                    "ProductId",
                    "Name",
                    "ProductNumber",
                    "ProductLine",
                    "ReorderPoint",
                    "StandardCost",
                    "MakeFlag",
                    "Color",
                },
                Filters = new[]
                {
                    new Filter
                    {
                        Property = "Name",
                        Values   = new object[] { "Widget-D", "Enameled Widget" }
                    },
                    new Filter
                    {
                        Property = "ProductLine",
                        Values   = new object[]
                        {
                            "(Blanks)",
                            "Books",
                            "Widgets",
                            "Tools",
                            "Food",
                        }
                    },
                    new Filter
                    {
                        Property = "Color",
                        Values   = new object[] { "#AB558A" }
                    },
                },
                Sort      = "ProductNumber",
                Direction = "asc"
            };

            var builder = new QueryOrchestrator();

            var(sqlQueryGenerator, _) = builder.BuildQuery(query, validColumns, AdventureWorksTableName);
            var sql = sqlQueryGenerator;

            var actual = PoorMansTSqlFormatterLib.SqlFormattingManager.DefaultFormat(sql);

            Approvals.Verify(actual);
        }