示例#1
0
        /// <summary>
        /// Returns true if the <paramref name="filter"/> has a proper description, name etc.  This helps prevent poorly documented master filters.
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="reason"></param>
        /// <returns></returns>
        public static bool IsProperlyDocumented(IFilter filter, out string reason)
        {
            reason = null;

            if (String.IsNullOrWhiteSpace(filter.Description))
            {
                reason = "There is no description";
            }
            else
            if (filter.Description.Length <= 20)
            {
                reason = "Description is not long enough (minimum length is 20 characters)";
            }
            else if (String.IsNullOrWhiteSpace(filter.WhereSQL))
            {
                reason = "WhereSQL is not populated";
            }

            //if we have not yet found a reason to complain, look at parameters for a reason to complain
            if (reason == null)
            {
                //check to see if theres a problem with the parameters
                foreach (ISqlParameter filterParameter in filter.GetAllParameters())
                {
                    string reasonParameterRejected;
                    if (!ExtractionFilterParameter.IsProperlyDocumented(filterParameter, out reasonParameterRejected))
                    {
                        reason = "Parameter '" + filterParameter.ParameterName + "' was rejected :" + reasonParameterRejected;
                        break;
                    }
                }
            }

            return(reason == null);
        }
        public void test_creating_ExtractionFilter()
        {
            ExtractionInformation     extractInfo      = null;
            ExtractionFilter          filterFastThings = null;
            ExtractionFilterParameter parameter        = null;

            try
            {
                //define extraction information
                extractInfo = new ExtractionInformation(CatalogueRepository, cataItem, columnInfo, "ROUND(VelocityOfMatter,2) VelocityOfMatterRounded");

                //define filter and parameter
                filterFastThings = new ExtractionFilter(CatalogueRepository, "FastThings", extractInfo)
                {
                    WhereSQL    = "VelocityOfMatter > @X",
                    Description = "Query to identify things that travel faster than X miles per hour!"
                };
                filterFastThings.SaveToDatabase();
                Assert.AreEqual(filterFastThings.Name, "FastThings");

                parameter = new ExtractionFilterParameter(CatalogueRepository, "DECLARE @X INT", filterFastThings);

                Assert.IsNotNull(parameter);
                Assert.AreEqual(parameter.ParameterName, "@X");

                parameter.Value = "500";
                parameter.SaveToDatabase();

                ExtractionFilterParameter afterSave = CatalogueRepository.GetObjectByID <ExtractionFilterParameter>(parameter.ID);
                Assert.AreEqual(afterSave.Value, "500");


                ExtractionFilter filterFastThings_NewCopyFromDB = CatalogueRepository.GetObjectByID <ExtractionFilter>(filterFastThings.ID);

                Assert.AreEqual(filterFastThings.ID, filterFastThings_NewCopyFromDB.ID);
                Assert.AreEqual(filterFastThings.Description, filterFastThings_NewCopyFromDB.Description);
                Assert.AreEqual(filterFastThings.Name, filterFastThings_NewCopyFromDB.Name);
                Assert.AreEqual(filterFastThings.WhereSQL, filterFastThings_NewCopyFromDB.WhereSQL);
            }
            finally
            {
                if (parameter != null)
                {
                    parameter.DeleteInDatabase();
                }

                //filters are children of extraction info with CASCADE DELETE so have to delete this one first if we want to test it programatically (although we could just skip deleting it since SQL will handle it anyway)
                if (filterFastThings != null)
                {
                    filterFastThings.DeleteInDatabase();
                }

                if (extractInfo != null)
                {
                    extractInfo.DeleteInDatabase();
                }
            }
        }