public static void Build_GivenDefaultProvider_ReturnsNonEmptyRuleSet()
        {
            var dbConnection = Mock.Of <IDbConnectionFactory>();
            var dialect      = Mock.Of <IDatabaseDialect>();
            var connection   = new SchematicConnection(dbConnection, dialect);

            var defaultProvider = new DefaultRuleProvider();
            var ruleProvider    = new RuleProviderBuilder()
                                  .AddRuleProvider(defaultProvider)
                                  .Build();
            var rules = ruleProvider.GetRules(connection, RuleLevel.Error);

            Assert.That(rules, Is.Not.Empty);
        }
예제 #2
0
        public static void GetRules_GivenMultipleProviders_ReturnsExpectedRuleCount()
        {
            var dbConnection = Mock.Of <IDbConnectionFactory>();
            var dialect      = Mock.Of <IDatabaseDialect>();
            var connection   = new SchematicConnection(dbConnection, dialect);

            var defaultProvider = new DefaultRuleProvider();

            var ruleProvider  = new CompositeRuleProvider(new[] { defaultProvider, defaultProvider });
            var defaultRules  = defaultProvider.GetRules(connection, RuleLevel.Error).ToList();
            var expectedCount = defaultRules.Count * 2;

            var compositeRules = ruleProvider.GetRules(connection, RuleLevel.Error);

            Assert.That(compositeRules, Has.Exactly(expectedCount).Items);
        }
예제 #3
0
        public async Task <int> HandleCommandAsync(IConsole console, CancellationToken cancellationToken)
        {
            var connection = GetSchematicConnection();
            var database   = await connection.Dialect.GetRelationalDatabaseAsync(connection, cancellationToken).ConfigureAwait(false);

            var ruleProvider = new DefaultRuleProvider();
            var rules        = ruleProvider.GetRules(connection, RuleLevel.Information);

            var tables = await database.GetAllTables(cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var views = await database.GetAllViews(cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var sequences = await database.GetAllSequences(cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var synonyms = await database.GetAllSynonyms(cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var routines = await database.GetAllRoutines(cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var linter = new RelationalDatabaseLinter(rules);

            var tableResults = await linter.AnalyseTables(tables, cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var viewResults = await linter.AnalyseViews(views, cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var sequenceResults = await linter.AnalyseSequences(sequences, cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var synonymResults = await linter.AnalyseSynonyms(synonyms, cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var routineResults = await linter.AnalyseRoutines(routines, cancellationToken).ToListAsync(cancellationToken).ConfigureAwait(false);

            var groupedResults = tableResults
                                 .Append(viewResults)
                                 .Append(sequenceResults)
                                 .Append(synonymResults)
                                 .Append(routineResults)
                                 .GroupBy(r => r.RuleId)
                                 .ToList();

            var hasDisplayedResults = false;

            foreach (var group in groupedResults)
            {
                var ruleTitle = "Rule: " + group.First().Title;
                var underline = new string('-', ruleTitle.Length);

                if (hasDisplayedResults)
                {
                    console.Out.WriteLine();
                    console.Out.WriteLine();
                }
                hasDisplayedResults = true;

                console.Out.WriteLine(underline);
                console.Out.WriteLine(ruleTitle);
                console.Out.WriteLine(underline);
                console.Out.WriteLine();

                foreach (var message in group)
                {
                    console.Out.WriteLine(" * " + message.Message);
                }
            }

            return(ErrorCode.Success);
        }