public void Should_Write_Metadata_File() { using (var tempFile = new TempFile(".xml")) { var writer = new DbModelMetadataWriter(new OutputWriter()); var document = writer.Write(_model); document.Save(tempFile.Filename); var lines = File.ReadAllLines(tempFile.Filename); lines[0].Should().Be("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); lines[1].Should().Be("<mdr:metadataroot metadataprovider=\"GenX.Cli.Infrastructure.DbModelMetadataWriter\" freeform=\"true\" xmlns:mdr=\"http://genx.com/metadataroot\">"); lines[2].Should().Be(" <md:dataStructure name=\"dbname\" xmlns:md=\"http://genx.com/metadata\">"); lines[3].Should().Be(" <md:entities>"); lines[4].Should().Be(" <md:entity name=\"Category\" originalname=\"Category\" camelcase=\"category\">"); lines[5].Should().Be(" <md:entitycolumns>"); lines[6].Should().Be(" <md:column name=\"CategoryId\" originalname=\"CategoryId\" label=\"CategoryId\" camelcase=\"categoryId\" datatype=\"integer\" maxlength=\"4\" allownulls=\"false\" isprimarykey=\"false\" />"); lines[7].Should().Be(" <md:column name=\"CategoryName\" originalname=\"CategoryName\" label=\"CategoryName\" camelcase=\"categoryName\" datatype=\"nvarchar\" maxlength=\"255\" allownulls=\"false\" isprimarykey=\"false\" />"); lines[8].Should().Be(" </md:entitycolumns>"); lines[9].Should().Be(" <md:relationships>"); lines[10].Should().Be(" <md:relationship name=\"Product.CategoryId_Category.CategoryId\" foreignkeyentity=\"Product\" foreignkeyentitycamelcase=\"product\" foreignkeycolumn=\"CategoryId\" foreignkeycolumncamelcase=\"categoryId\" />"); lines[11].Should().Be(" </md:relationships>"); lines[12].Should().Be(" </md:entity>"); lines[13].Should().Be(" <md:entity name=\"Product\" originalname=\"Product\" camelcase=\"product\">"); lines[14].Should().Be(" <md:entitycolumns>"); lines[15].Should().Be(" <md:column name=\"ProductId\" originalname=\"ProductId\" label=\"ProductId\" camelcase=\"productId\" datatype=\"integer\" maxlength=\"4\" allownulls=\"false\" isprimarykey=\"false\" />"); lines[16].Should().Be(" <md:column name=\"ProductName\" originalname=\"ProductName\" label=\"ProductName\" camelcase=\"productName\" datatype=\"nvarchar\" maxlength=\"255\" allownulls=\"false\" isprimarykey=\"false\" />"); lines[17].Should().Be(" <md:column name=\"CategoryId\" originalname=\"CategoryId\" label=\"CategoryId\" camelcase=\"categoryId\" datatype=\"integer\" maxlength=\"4\" allownulls=\"false\" isprimarykey=\"false\">"); lines[18].Should().Be(" <md:foreignkeys>"); lines[19].Should().Be(" <md:foreignkey name=\"CategoryId\" primarykeyentity=\"Category\" primarykeycolumn=\"CategoryId\" />"); lines[20].Should().Be(" </md:foreignkeys>"); lines[21].Should().Be(" </md:column>"); lines[22].Should().Be(" </md:entitycolumns>"); lines[23].Should().Be(" <md:relationships />"); lines[24].Should().Be(" </md:entity>"); lines[25].Should().Be(" </md:entities>"); lines[26].Should().Be(" </md:dataStructure>"); lines[27].Should().Be("</mdr:metadataroot>"); } }
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()); }