public void CanGetCategoryHierarchy()
        {
            var cat1     = new DataQualityCategory("1", "1");
            var cat2     = new DataQualityCategory("2", "2");
            var cat1_1   = new DataQualityCategory("1", "1.1");
            var cat1_2   = new DataQualityCategory("2", "1.2");
            var cat1_1_1 = new DataQualityCategory("1", "1.1.1");

            cat1.AddSubCategory(cat1_1);
            cat1.AddSubCategory(cat1_2);
            cat1_1.AddSubCategory(cat1_1_1);

            var qspecA = new QualitySpecification("qspec A")
            {
                Category = cat1_1
            };
            var qspecB = new QualitySpecification("qspec B")
            {
                Category = cat1_1
            };
            var qspecC = new QualitySpecification("qspec C")
            {
                Category = cat1_1_1
            };
            var qspec1 = new QualitySpecification("qspec X");
            var qspec2 = new QualitySpecification("qspec Y");

            CreateSchema(cat1, cat2, cat1_1, cat1_2, cat1_1_1,
                         qspecA, qspecB, qspecC, qspec1, qspec2);

            UnitOfWork.NewTransaction(
                delegate
            {
                IList <DataQualityCategory> categories =
                    Repository.GetTopLevelCategories();
                var qspecRepository = Resolve <IQualitySpecificationRepository>();
                Assert.AreEqual(2, categories.Count);

                Assert.IsTrue(categories.Contains(cat1));
                Assert.IsTrue(categories.Contains(cat2));

                string hierarchy = FormatHierarchy(qspecRepository, categories);

                const string expected = @"* qspec X
* qspec Y
> 1
  > 1
    * qspec A
    * qspec B
    > 1
      * qspec C
  > 2
> 2
";
                Console.WriteLine(hierarchy);

                Assert.AreEqual(expected, hierarchy);
            });
        }
        public void CanGroupQualityConditionsWithCompleteExclusion()
        {
            var catA   = new DataQualityCategory("A");
            var catA1  = new DataQualityCategory("A1");
            var catA11 = new DataQualityCategory("A11");

            catA.AddSubCategory(catA1);
            catA1.AddSubCategory(catA11);

            var test = new TestDescriptor("test", new ClassDescriptor(typeof(QaMinSegAngle)));

            var qc1 = new QualityCondition("qc1", test)
            {
                Category = catA11
            };
            var qc2 = new QualityCondition("qc2", test)
            {
                Category = catA11
            };
            var qc3 = new QualityCondition("qc3", test)
            {
                Category = catA11
            };

            var issueGroups = new List <IssueGroup>
            {
                CreateIssueGroup(qc1, "ic1", 3),
                CreateIssueGroup(qc2, "ic2", 4),
                CreateIssueGroup(qc3, "ic3", 5),
                CreateIssueGroup(qc3, "ic4", 6)
            };

            var reportDefinition = new HtmlReportDefinition(
                "templatepath", "fileName",
                new List <HtmlDataQualityCategoryOptions>
            {
                new HtmlDataQualityCategoryOptions(catA.Uuid, ignoreCategoryLevel: true),
                new HtmlDataQualityCategoryOptions(catA1.Uuid, ignoreCategoryLevel: true),
                new HtmlDataQualityCategoryOptions(catA11.Uuid, ignoreCategoryLevel: true),
            });

            List <HtmlReportIssueGroup>          reportIssueGroups;
            List <HtmlReportDataQualityCategory> reportCategories =
                GroupByCategories(issueGroups, reportDefinition,
                                  out reportIssueGroups);

            Assert.AreEqual(4, reportIssueGroups.Count);
            Assert.AreEqual(18, reportIssueGroups.Sum(ig => ig.IssueCount));

            Assert.AreEqual(1, reportCategories.Count);
            Assert.AreEqual(18, reportCategories.Sum(qc => qc.IssueCount));

            List <HtmlReportDataQualityCategory> rootCategories =
                reportCategories.Where(qc => qc.IsRoot)
                .ToList();

            Assert.AreEqual(1, rootCategories.Count);
            Assert.AreEqual(18, rootCategories.Sum(qc => qc.IssueCountWithChildren));
        }
        public void CanGroupQualityConditionsWithoutExclusion()
        {
            var catA    = new DataQualityCategory("A");
            var catA1   = new DataQualityCategory("A1");
            var catA11  = new DataQualityCategory("A11");
            var catB    = new DataQualityCategory("B");
            var catB1   = new DataQualityCategory("B1");
            var catB11  = new DataQualityCategory("B11");
            var catB111 = new DataQualityCategory("B111");

            catA.AddSubCategory(catA1);
            catA1.AddSubCategory(catA11);
            catB.AddSubCategory(catB1);
            catB1.AddSubCategory(catB11);
            catB11.AddSubCategory(catB111);

            var test = new TestDescriptor("test", new ClassDescriptor(typeof(QaMinSegAngle)));

            var qc1 = new QualityCondition("qc1", test)
            {
                Category = catA11
            };
            var qc2 = new QualityCondition("qc2", test)
            {
                Category = catB11
            };
            var qc3 = new QualityCondition("qc3", test)
            {
                Category = catB11
            };

            var issueGroups = new List <IssueGroup>
            {
                CreateIssueGroup(qc1, "ic1", 3),
                CreateIssueGroup(qc2, "ic2", 4),
                CreateIssueGroup(qc3, "ic3", 5),
                CreateIssueGroup(qc3, "ic4", 6)
            };

            List <HtmlReportIssueGroup>          reportIssueGroups;
            List <HtmlReportDataQualityCategory> reportCategories =
                GroupByCategories(issueGroups, null, out reportIssueGroups);

            Assert.AreEqual(18, reportIssueGroups.Sum(ig => ig.IssueCount));

            Assert.AreEqual(6, reportCategories.Count);
            Assert.AreEqual(18, reportCategories.Sum(qc => qc.IssueCount));

            List <HtmlReportDataQualityCategory> rootCategories =
                reportCategories.Where(qc => qc.IsRoot)
                .ToList();

            Assert.AreEqual(2, rootCategories.Count);
            Assert.AreEqual(18, rootCategories.Sum(qc => qc.IssueCountWithChildren));
        }
        public void CanGetQualifiedNames()
        {
            var cat1     = new DataQualityCategory("1", "1");
            var cat2     = new DataQualityCategory("2", "2");
            var cat1_1   = new DataQualityCategory("1", "1.1");
            var cat1_2   = new DataQualityCategory("2", "1.2");
            var cat1_1_1 = new DataQualityCategory("1", "1.1.1");

            cat1.AddSubCategory(cat1_1);
            cat1.AddSubCategory(cat1_2);
            cat1_1.AddSubCategory(cat1_1_1);

            var qspecA = new QualitySpecification("A")
            {
                Category = cat1_1
            };
            var qspecB = new QualitySpecification("B")
            {
                Category = cat1_1
            };
            var qspecC = new QualitySpecification("C")
            {
                Category = cat1_1_1
            };
            var qspec1 = new QualitySpecification("X");
            var qspec2 = new QualitySpecification("Y");

            CreateSchema(cat1, cat2, cat1_1, cat1_2, cat1_1_1,
                         qspecA, qspecB, qspecC, qspec1, qspec2);

            UnitOfWork.NewTransaction(
                delegate
            {
                var qspecs = Resolve <IQualitySpecificationRepository>();

                Assert.AreEqual("1/1/A", GetQualifiedName(qspecs.Get("A")));
                Assert.AreEqual("1/1/B", GetQualifiedName(qspecs.Get("B")));
                Assert.AreEqual("1/1/1/C", GetQualifiedName(qspecs.Get("C")));
                Assert.AreEqual("X", GetQualifiedName(qspecs.Get("X")));
                Assert.AreEqual("Y", GetQualifiedName(qspecs.Get("Y")));
            });
        }