Ejemplo n.º 1
0
        public async Task TestGenerateFromScript_NullArgument()
        {
            // Arrange
            IDataGenStrategy strategy = CreateSqlServerDataGenStrategy();
            // Act
            TableInfo tableInfo = await strategy.GetTableInfoAsync(null);

            // Assert
            Assert.IsNull(tableInfo);
        }
Ejemplo n.º 2
0
        public async Task TestGenerateFromScript()
        {
            // Arrange
            const string     tableName = "TestDB.dbo.Test01";
            IDataGenStrategy strategy  = CreateSqlServerDataGenStrategy();
            // Act
            TableInfo tableInfo = await strategy.GetTableInfoAsync(
                $"create table {tableName} (" +
                "Id int IDENTITY(55,2) NOT NULL, " +
                "[Name] [varchar](128) NOT NULL, " +
                "NVarCharName nvarchar(256) null" +
                ") ON [PRIMARY]");

            // Assert
            Assert.AreEqual(tableName, tableInfo.Name);
            var columnList = tableInfo.Columns.ToList();

            Assert.AreEqual(3, columnList.Count);

            int        columnIndex = 0;
            ColumnInfo columnInfo  = columnList[0];

            Assert.AreEqual("Id", columnInfo.Name);
            Assert.IsTrue(columnInfo is AutoincColumnInfo);
            Assert.AreEqual(true, columnInfo.IsIdentity);
            Assert.AreEqual(55, columnInfo.IdentitySeed);
            Assert.AreEqual(2, columnInfo.IdentityIncrement);
            Assert.AreEqual(0, columnInfo.MaxLength);
            Assert.AreEqual(0, columnInfo.Precision);
            Assert.AreEqual(0, columnInfo.Scale);
            Assert.IsTrue(columnInfo.IsIdentity);
            Assert.IsFalse(columnInfo.IsComputed);
            Assert.IsFalse(columnInfo.IsNullable);
            columnIndex++;
            columnInfo = columnList[columnIndex];
            Assert.AreEqual("[Name]", columnInfo.Name);
            Assert.IsTrue(columnInfo is RandomTextColumnInfo);
            Assert.AreEqual(128, columnInfo.MaxLength);
            Assert.AreEqual(0, columnInfo.Precision);
            Assert.AreEqual(0, columnInfo.Scale);
            Assert.IsFalse(columnInfo.IsIdentity);
            Assert.IsFalse(columnInfo.IsComputed);
            Assert.IsFalse(columnInfo.IsNullable);
            columnIndex++;
            columnInfo = columnList[columnIndex];
            Assert.AreEqual("NVarCharName", columnInfo.Name);
            Assert.IsTrue(columnInfo is RandomTextColumnInfo);
            Assert.AreEqual(256, columnInfo.MaxLength);
            Assert.AreEqual(0, columnInfo.Precision);
            Assert.AreEqual(0, columnInfo.Scale);
            Assert.IsFalse(columnInfo.IsIdentity);
            Assert.IsFalse(columnInfo.IsComputed);
            Assert.IsTrue(columnInfo.IsNullable);
        }
Ejemplo n.º 3
0
        private static void GenerateScript(IDataGenStrategy strategy, TableInfo tableInfo,
                                           InsertScriptGenerationOptions generationOptions)
        {
            Stopwatch     stopwatch = Stopwatch.StartNew();
            Task <string> task      = strategy.GenerateInsertScriptAsync(tableInfo, generationOptions);

            task.Wait();
            stopwatch.Stop();
            Console.WriteLine(task.Result);
            Console.WriteLine("Elapsed time: {0}", stopwatch.Elapsed);
            Console.WriteLine();
        }
Ejemplo n.º 4
0
        public async Task <HttpResponseMessage> GetTableInfo(HttpRequestMessage request, [FromBody] CreateTableScriptViewModel vm)
        {
            IDataGenStrategy dataGenStrategy = DataGenStrategies[vm.SqlType];
            TableInfo        tableInfo       = await dataGenStrategy.GetTableInfoAsync(vm.CreateTableScript);

            TableInfoViewModel tableInfoViewModel = new TableInfoViewModel {
                TableInfo = tableInfo
            };
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, tableInfoViewModel);

            return(response);
        }
Ejemplo n.º 5
0
        public async Task TestGenerateInsertScript()
        {
            // Arrange
            const string tableName = "dbo.Test01";

            tableToDrop = tableName;
            string createTableScript =
                $"create table {tableName} (" +
                "Id int identity(1,1) NOT NULL, " +
                "[Name] [varchar](128) NOT NULL," +
                "IntColumn int null" +
                ") ON [PRIMARY]";
            InsertScriptGenerationOptions generationOptions = new InsertScriptGenerationOptions {
                RowCount = 8
            };
            IDataGenStrategy strategy = CreateSqlServerDataGenStrategy();
            // Act
            TableInfo tableInfo = await strategy.GetTableInfoAsync(createTableScript);

            string insertScript = await strategy.GenerateInsertScriptAsync(tableInfo, generationOptions);

            // Assert
            Log(createTableScript);
            Log(insertScript);
            Assert.IsTrue(tableInfo.Columns.Count > 0);
            string createInsertScript = createTableScript + Environment.NewLine + insertScript;

            ExecuteNonQuery(createInsertScript);

            using (SqlCommand cmd = new SqlCommand($"select * from {tableName}", Connection))
            {
                cmd.CommandType = CommandType.Text;
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    const int colId   = 0;
                    const int colName = 1;
                    Assert.AreEqual(3, reader.FieldCount);
                    Assert.AreEqual("int", reader.GetDataTypeName(colId));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colName));
                    int rowCount = 0;
                    while (reader.Read())
                    {
                        rowCount++;
                        Assert.IsFalse(reader.IsDBNull(colId));
                        Assert.AreEqual(rowCount, reader.GetInt32(colId));
                        Assert.IsFalse(reader.IsDBNull(colName));
                    }
                    Assert.AreEqual(generationOptions.RowCount, rowCount);
                }
            }
        }
Ejemplo n.º 6
0
        public async Task <IHttpActionResult> GetTableInfo([FromBody] CreateTableScriptViewModel vm)
        {
            IDataGenStrategy dataGenStrategy = DataGenStrategies[vm.SqlType];
            TableInfo        tableInfo       = await dataGenStrategy.GetTableInfoAsync(vm.CreateTableScript);

            TableInfoViewModel tableInfoViewModel = new TableInfoViewModel
            {
                SqlType = vm.SqlType,
                Name    = tableInfo?.Name,
                Columns = tableInfo?.Columns
            };

            return(Ok(tableInfoViewModel));
        }
Ejemplo n.º 7
0
        public async Task <HttpResponseMessage> GetGeneratedData(HttpRequestMessage request, [FromBody] TableInfoViewModel vm)
        {
            IDataGenStrategy dataGenStrategy = DataGenStrategies[vm.SqlType];
            var generationOptions            = new InsertScriptGenerationOptions {
                RowCount = vm.EntityCount
            };
            string generatedData = await dataGenStrategy.GenerateInsertScriptAsync(vm.TableInfo, generationOptions);

            GeneratedDataViewModel generatedDataViewModel = new GeneratedDataViewModel
            {
                GeneratedData = generatedData
            };
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, generatedDataViewModel);

            return(response);
        }
Ejemplo n.º 8
0
        static void Main(string[] args)
        {
            /*RunAsync().Wait();
             * Console.ReadLine();*/

            Container.Initialize();
            using (var scope = Container.InternalContainer.BeginLifetimeScope())
            {
                IDataGenStrategy strategy      = scope.ResolveKeyed <IDataGenStrategy>(SqlType.SqlServer);
                Task <TableInfo> tableInfoTask = strategy.GetTableInfoAsync(
                    "create table dbo.Test01 (" +
                    "Id int identity(1,1) not null, " +
                    //"[FirstName] [varchar](128) not null, " +
                    //"[LastName] [varchar](128) not null, " +
                    "Country varchar(128) not null, " +
                    "City varchar(128) not null, " +
                    "RegionName varchar(128) not null, " +
                    //"AddressLine1 varchar(128) not null, " +
                    //"IntColumn int not null" +
                    ") on [primary]");

                tableInfoTask.Wait();
                TableInfo tableInfo = tableInfoTask.Result;
                Console.WriteLine("Table name = {0}", tableInfo.Name);
                Console.WriteLine("-----");
                Console.WriteLine("Columns:");
                foreach (ColumnInfo columnInfo in tableInfo.Columns)
                {
                    Console.WriteLine(
                        "Name = {0}; Precision = {1}; Scale = {2}; IsNullable = {3}; IsIdentity = {4}; IsComputed = {5}",
                        columnInfo.Name, columnInfo.Precision, columnInfo.Scale,
                        columnInfo.IsNullable, columnInfo.IsIdentity, columnInfo.IsComputed);
                    Console.WriteLine();
                }
                Console.WriteLine("--------------------------------------");

                AppDomain.CurrentDomain.SetData("DataDirectory", @"..\..\..\APaers.DataGen.Api\App_Data");
                InsertScriptGenerationOptions generationOptions = new InsertScriptGenerationOptions {
                    RowCount = 3
                };
                GenerateScript(strategy, tableInfo, generationOptions);
                GenerateScript(strategy, tableInfo, generationOptions);
            }
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
Ejemplo n.º 9
0
        public async Task <IHttpActionResult> GetGeneratedData([FromBody] TableInfoViewModel vm)
        {
            IDataGenStrategy dataGenStrategy = DataGenStrategies[vm.SqlType];
            var generationOptions            = new InsertScriptGenerationOptions {
                RowCount = vm.EntityCount
            };
            var tableInfo = new TableInfo {
                Name = vm.Name, Columns = vm.Columns
            };
            string generatedData = await dataGenStrategy.GenerateInsertScriptAsync(tableInfo, generationOptions);

            GeneratedDataViewModel generatedDataViewModel = new GeneratedDataViewModel
            {
                GeneratedData = generatedData
            };

            return(Ok(generatedDataViewModel));
        }
Ejemplo n.º 10
0
        public async Task TestGenerateInsertScript_DifferentColumnTypes_DefaultFormats()
        {
            // Arrange
            const string tableName = "dbo.Test01";

            tableToDrop = tableName;
            string createTableScript =
                $"create table {tableName} (" +
                "Id int identity(1,1) not null, " +
                "SomeUniqueId uniqueidentifier not null, " +
                "SomeGuid varchar(64) not null, " +
                "Country varchar(128) not null, " +
                "RegionName nvarchar(128) not null, " +
                "City nvarchar(128) not null, " +
                "AddressLine1 varchar(256) not null, " +
                "AddressLine2 varchar(256) not null, " +
                "LatitudeLongitude varchar(32) not null, " +
                "SomeTextColumn varchar(128) not null, " +
                "PersonFullName varchar(16) not null, " +
                "Email varchar(64) not null, " +
                "Telephone varchar(16) not null, " +
                "PassportNo varchar(16) not null, " +
                "PostalCode varchar(12) not null, " +
                "WholeValue int not null, " +
                "DecimalValue decimal not null, " +
                "FloatValue float not null, " +
                "BoolValue bit not null, " +
                "DateTimeValue datetime not null, " +
                ") on [primary];";
            InsertScriptGenerationOptions generationOptions = new InsertScriptGenerationOptions {
                RowCount = 10
            };
            IDataGenStrategy strategy = CreateSqlServerDataGenStrategy();
            // Act
            TableInfo tableInfo = await strategy.GetTableInfoAsync(createTableScript);

            string insertScript = await strategy.GenerateInsertScriptAsync(tableInfo, generationOptions);

            // Assert
            Log(createTableScript);
            Log(insertScript);
            Assert.IsTrue(tableInfo.Columns.Count > 0);
            string createInsertScript = createTableScript + Environment.NewLine + insertScript;

            ExecuteNonQuery(createInsertScript);

            using (SqlCommand cmd = new SqlCommand($"select * from {tableName}", Connection))
            {
                cmd.CommandType = CommandType.Text;
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    int col                  = 0;
                    int colId                = col++;
                    int colGuid              = col++;
                    int colGuidString        = col++;
                    int colCountry           = col++;
                    int colRegion            = col++;
                    int colCity              = col++;
                    int colAddressLine1      = col++;
                    int colAddressLine2      = col++;
                    int colLatitudeLongitude = col++;
                    int colRandomText        = col++;
                    int colFullName          = col++;
                    int colEmail             = col++;
                    int colPhone             = col++;
                    int colPassport          = col++;
                    int colPostalCode        = col++;
                    int colInt               = col++;
                    int colDecimal           = col++;
                    int colFloat             = col++;
                    int colBoolean           = col++;
                    int colDateTime          = col++;

                    Assert.AreEqual(col, reader.FieldCount);

                    Assert.AreEqual("int", reader.GetDataTypeName(colId));
                    Assert.AreEqual("uniqueidentifier", reader.GetDataTypeName(colGuid));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colGuidString));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colCountry));
                    Assert.AreEqual("nvarchar", reader.GetDataTypeName(colRegion));
                    Assert.AreEqual("nvarchar", reader.GetDataTypeName(colCity));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colAddressLine1));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colAddressLine2));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colLatitudeLongitude));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colRandomText));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colFullName));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colEmail));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colPhone));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colPassport));
                    Assert.AreEqual("varchar", reader.GetDataTypeName(colPostalCode));
                    Assert.AreEqual("int", reader.GetDataTypeName(colInt));
                    Assert.AreEqual("decimal", reader.GetDataTypeName(colDecimal));
                    Assert.AreEqual("float", reader.GetDataTypeName(colFloat));
                    Assert.AreEqual("bit", reader.GetDataTypeName(colBoolean));
                    Assert.AreEqual("datetime", reader.GetDataTypeName(colDateTime));
                    int rowCount = 0;
                    while (reader.Read())
                    {
                        for (int i = 0; i < col; i++)
                        {
                            Assert.IsFalse(reader.IsDBNull(i));
                        }

                        rowCount++;
                        Assert.AreEqual(rowCount, reader.GetInt32(colId));

                        Guid guid = reader.GetGuid(colGuid);
                        Assert.AreNotEqual(Guid.Empty, guid);

                        string guidString     = reader.GetString(colGuidString);
                        Guid   guidFromString = Guid.Parse(guidString);
                        Assert.AreNotEqual(Guid.Empty, guidFromString);
                        Assert.AreNotEqual(guid, guidFromString);

                        string country = reader.GetString(colCountry);
                        Assert.IsTrue(Countries.ContainsKey(country), $"Country not found: {country}");

                        string region = reader.GetString(colRegion);
                        Assert.IsTrue(Regions.ContainsKey(region), $"Region not found: {region}. (Country: {country})");

                        string city = reader.GetString(colCity);
                        Assert.IsTrue(Cities.ContainsKey(city), $"City not found: {city}. (Country: {country}, Region: {region})");

                        string addressLine1 = reader.GetString(colAddressLine1);
                        Assert.IsFalse(string.IsNullOrWhiteSpace(addressLine1));

                        string addressLine2 = reader.GetString(colAddressLine2);
                        Assert.IsFalse(string.IsNullOrWhiteSpace(addressLine2));

                        string latitudeLongitude = reader.GetString(colLatitudeLongitude);
                        Assert.IsFalse(string.IsNullOrWhiteSpace(latitudeLongitude));

                        string randomText = reader.GetString(colRandomText);
                        Assert.IsFalse(string.IsNullOrWhiteSpace(randomText));

                        string fullName = reader.GetString(colFullName);
                        Assert.AreEqual(1, fullName.Count(c => c == ' '), $"Generated Full name: {fullName}");

                        string email = reader.GetString(colEmail);
                        Assert.IsTrue(IsValidEmail(email), $"Generated Email: {email}");

                        string phone = reader.GetString(colPhone);
                        Regex  regex = new Regex(@"[\d\s]+");
                        Assert.IsTrue(regex.IsMatch(phone), $"Generated Phone: {phone}");

                        string passport = reader.GetString(colPassport);
                        regex = new Regex(@"[\d\s]+");
                        Assert.IsTrue(regex.IsMatch(passport), $"Generated Passport: {passport}");

                        string postalCode = reader.GetString(colPostalCode);
                        regex = new Regex(@"[\d]+");
                        Assert.IsTrue(regex.IsMatch(postalCode), $"Generated Postal code: {postalCode}");

                        int intValue = reader.GetInt32(colInt);
                        Assert.IsTrue(intValue >= 0);

                        decimal decimalNumber = reader.GetDecimal(colDecimal);
                        Assert.IsTrue(decimalNumber >= 0);

                        double floatNumber = reader.GetDouble(colFloat);
                        Assert.IsTrue(floatNumber >= 0);

                        bool boolValue = reader.GetBoolean(colBoolean);
                        Assert.IsTrue(boolValue || !boolValue);

                        DateTime dateTime = reader.GetDateTime(colDateTime);
                        Assert.IsTrue(dateTime > DateTime.Now.AddYears(-10));
                        Assert.IsTrue(dateTime < DateTime.Now.AddYears(10));
                    }
                    Assert.AreEqual(generationOptions.RowCount, rowCount);
                }
            }
        }