public void Should_Read_Sql_Schema() { var dataReaderMock = SetupNoForeignKeysDataReader(); var commandMock = new Mock<IDbCommand>(); commandMock.Setup(command => command.ExecuteReader()).Returns(dataReaderMock.Object); var (columnsDataTable, indexesDataTable) = SetupSchemaTables(); var connectionMock = new Mock<ISqlClientConnection>(); connectionMock.Setup(conn => conn.GetSchema(It.Is<string>(str => str == "Columns"))).Returns(columnsDataTable); connectionMock.Setup(conn => conn.GetSchema(It.Is<string>(str => str == "IndexColumns"), It.IsAny<string[]>())).Returns(indexesDataTable); connectionMock.Setup(conn => conn.CreateCommand()).Returns(commandMock.Object); var connectionFactoryMock = new Mock<ISqlClientConnectionFactory>(); connectionFactoryMock.Setup(factory => factory.Create(It.IsAny<string>())).Returns(connectionMock.Object); var schemaReader = new SqlClientSchemaReader(connectionFactoryMock.Object, new OutputWriter()); var model = schemaReader.Read("Integrated Security=true;Initial Catalog=NorthWind;Server=Localhost;Persist Security Info=False"); model.Entities.Count.Should().Be(1); var entity = model.Entities[0]; entity.Name.Should().Be("Categories"); entity.Schema.Should().Be("dbo"); entity.Columns.Count.Should().Be(2); var categoryId = entity.Columns[0]; categoryId.Name.Should().Be("CategoryId"); categoryId.DataType.Should().Be("int"); categoryId.Size.Should().Be(-1); categoryId.IsNullable.Should().Be(false); var categoryName = entity.Columns[1]; categoryName.Name.Should().Be("CategoryName"); categoryName.DataType.Should().Be("nvarchar"); categoryName.Size.Should().Be(255); categoryName.IsNullable.Should().Be(false); entity.PrimaryKeys.Count.Should().Be(1); var primaryKey = entity.PrimaryKeys[0]; primaryKey.Entity.Should().Be("Categories"); primaryKey.Name.Should().Be("CategoryId"); }
private static ExitCode ProcessCommandLineArgs(string[] args) { var commandContext = new CommandContext(); var outputWriter = new OutputWriter(); var sqlClientConnectionFactory = new SqlClientConnectionFactory(); var sqlClientSchemaReader = new SqlClientSchemaReader(sqlClientConnectionFactory, outputWriter); var assemblyReader = new DotnetAssemblyReader(outputWriter); var assemblyMetadataWriter = new DotnetAssemblyMetadataWriter(outputWriter); var dbModelMetadataReader = new ModelMetadataReader(); var dbModelMetadataWriter = new DbModelMetadataWriter(outputWriter); var transformer = new Transformer(outputWriter); var directoryWrapper = new DirectoryWrapper(); var fileWrapper = new FileWrapper(); var factory = new CommandFactory( sqlClientSchemaReader, assemblyReader, dbModelMetadataWriter, assemblyMetadataWriter, dbModelMetadataReader, transformer, outputWriter, directoryWrapper, fileWrapper, commandContext); ICommand command = null; int argIndex = 0; for (; argIndex < args.Length; argIndex++) { if (IsValidArgument("h", "help", args[argIndex]) || IsValidArgument("?", args[argIndex]) || args[argIndex] == "?") { return(factory.Create("help") .Execute()); } else if (IsValidArgument("nologo", args[argIndex])) { commandContext.NoLogo = true; } else if (IsValidArgument("verbose", args[argIndex])) { commandContext.VerboseLogging = true; outputWriter.IsVerbose = true; } else if (IsValidArgument("v", "version", args[argIndex])) { return(factory.Create("version") .Execute()); } else if (args[argIndex].StartsWith("-", StringComparison.CurrentCultureIgnoreCase)) { outputWriter.Error.WriteLine($"Unknown startup option: {args[argIndex]}"); return(ExitCode.Error); } else { string lastArg = args[argIndex]; if (string.IsNullOrEmpty(lastArg)) { return(factory.Create("help") .Execute()); } List <string> commandArgs = (argIndex + 1) >= args.Length ? new List <string>() : args.Skip(argIndex + 1).ToList(); commandContext.CommandArgs = commandArgs; PrintBanner(commandContext, outputWriter); command = factory.Create(lastArg); break; } } if (command == null) { command = factory.Create("help"); } return(command.Execute()); }