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); }
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); }