예제 #1
0
        public void RandomPatternModel_PatternNotFound_Throws()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new RandomPatternModel(_customPatternProviderMock.Object)
            {
                Name = "testColumn", Template = "{abc}"
            });
            _customPatternProviderMock.Setup(p => p.GetDefaultPatterns()).Returns(default(IDictionary <string, string>));
            _serviceLocatorMock.Setup(l => l.GetService(It.IsAny <Type>()))
            .Returns(new GeneratorRandomPattern(_customPatternProviderMock.Object));

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #2
0
        public void TemplateModel_Inline_Generates()
        {
            // Given
            var content = new List <object> {
                "red", "green", "blue"
            };
            var sources = new List <ItemSourceModel>
            {
                new InlineSourceModel {
                    Name = "color", Content = content
                }
            };
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10,
                Sources        = sources
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{color}"
            });

            SetupServiceLocator();

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            var expectedList = content.Select(c => c.ToString()).ToList();

            UtilAssert.AssertStringsInList(result.Tables[0], "testColumn", expectedList);
        }
예제 #3
0
        public void RandomPatternModel_UsesDefaultPatterns()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new RandomPatternModel(_customPatternProviderMock.Object)
            {
                Name = "testColumn", Template = "{uc}{d}{lc}"
            });
            _customPatternProviderMock
            .Setup(p => p.GetDefaultPatterns())
            .Returns(new Dictionary <string, string>
            {
                { "uc", "ABCDEFGHIJKLMNOPQRSTUVWXYZ" },
                { "lc", "abcdefghijklmnopqrstuvwxyz" },
                { "d", "0123456789" }
            });
            _serviceLocatorMock.Setup(l => l.GetService(It.IsAny <Type>()))
            .Returns(new GeneratorRandomPattern(_customPatternProviderMock.Object));

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertStringLength(result.Tables[0], "testColumn", 3, 3);
            UtilAssert.AssertIndexContains(result.Tables[0], "testColumn", 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
            UtilAssert.AssertIndexContains(result.Tables[0], "testColumn", 1, "0123456789");
            UtilAssert.AssertIndexContains(result.Tables[0], "testColumn", 2, "abcdefghijklmnopqrstuvwxyz");
        }
예제 #4
0
        public void TemplateModel_FileWithFileNotFound_Throws()
        {
            // Given
            var sources = new List <ItemSourceModel>
            {
                new FileSourceModel {
                    Name = "color", Path = "C:\\file-not-found.txt"
                }
            };
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10,
                Sources        = sources
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{color}"
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #5
0
        public void TemplateModel_QueryWithNoProviderType_Throws()
        {
            // Given
            var sources = new List <ItemSourceModel>
            {
                new QuerySourceModel
                {
                    Name = "color",
                    // Missing providerType
                    ConnectionString = "asd",
                    Query            = "SELECT someColumn FROM someTable"
                }
            };
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10,
                Sources        = sources
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{color}"
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #6
0
        public void DateTimeRangeModel_CorrectLimits_Generates()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };
            DateTime minDate = new(1980, 1, 1);
            DateTime maxDate = new(1989, 12, 31);
            var      minTime = DateTime.Today.AddHours(4);
            var      maxTime = DateTime.Today.AddHours(5);

            info.Columns.Add(new DateTimeRangeModel
            {
                Name = "testColumn", MinDate = minDate, MaxDate = maxDate, MinTime = minTime, MaxTime = maxTime
            });

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertDateInRange(result.Tables[0], "testColumn", minDate, maxDate);
        }
예제 #7
0
        public void TemplateModel_InlineWithEmptyContent_Throws()
        {
            // Given
            var sources = new List <ItemSourceModel>
            {
                new InlineSourceModel {
                    Name = "color", Content = null
                }
            };
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10,
                Sources        = sources
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{color}"
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #8
0
        public void RandomPatternModel_UsesProvidedPatterns()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };
            var patterns = new Dictionary <string, string> {
                { "odd", "13579" }, { "even", "02468" }, { "vowel", "aeiou" }
            };

            info.Columns.Add(new RandomPatternModel(_customPatternProviderMock.Object)
            {
                Name = "testColumn", Template = "{odd}{vowel}{even}", Patterns = patterns
            });
            _customPatternProviderMock.Setup(p => p.GetDefaultPatterns()).Returns(default(IDictionary <string, string>));
            _serviceLocatorMock.Setup(l => l.GetService(It.IsAny <Type>()))
            .Returns(new GeneratorRandomPattern(_customPatternProviderMock.Object));

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertStringLength(result.Tables[0], "testColumn", 3, 3);
            UtilAssert.AssertIndexContains(result.Tables[0], "testColumn", 0, "13579");
            UtilAssert.AssertIndexContains(result.Tables[0], "testColumn", 1, "aeiou");
            UtilAssert.AssertIndexContains(result.Tables[0], "testColumn", 2, "02468");
        }
예제 #9
0
        public void DateTimeRangeModel_InvalidDateLimits_Throws()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };
            DateTime minDate = new(1990, 1, 1);
            DateTime maxDate = new(1989, 12, 31);
            var      minTime = DateTime.Today.AddHours(4);
            var      maxTime = DateTime.Today.AddHours(5);

            info.Columns.Add(new DateTimeRangeModel
            {
                Name = "testColumn", MinDate = minDate, MaxDate = maxDate, MinTime = minTime, MaxTime = maxTime
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #10
0
        public void GuidModel()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new GuidModel {
                Name = "testColumn"
            });

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
        }
예제 #11
0
        public void TemplateModel_FileWithJsonArrayOfObjects_Generates()
        {
            // Given
            var filePath = Path.Combine(Environment.CurrentDirectory, "Resources", "Content",
                                        "Animals_ArrayOfObjects.txt");
            var sources = new List <ItemSourceModel>
            {
                new FileSourceModel
                {
                    Name  = "animal", Path = filePath, Format = ItemSourceFormat.JsonArrayOfObjects,
                    Props = new Dictionary <string, string> {
                        { "propertyName", "name" }
                    }
                }
            };
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10,
                Sources        = sources
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{animal}"
            });

            SetupServiceLocator();

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            var content = new List <string> {
                "Dog", "Cat", "Horse", "Elephant", "Giraffe", "Mouse", "Rabbit"
            };

            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            var expectedList = content.Select(c => c.ToString()).ToList();

            UtilAssert.AssertStringsInList(result.Tables[0], "testColumn", expectedList);
        }
예제 #12
0
        public void TemplateModel_Query_Generates()
        {
            // Given
            var sqliteFilePath =
                Path.Combine(Environment.CurrentDirectory, "Resources", "Content", "LeftwareToolsTest.db");
            var sources = new List <ItemSourceModel>
            {
                new QuerySourceModel
                {
                    Name             = "animal",
                    ProviderType     = DatabaseEngine.Sqlite,
                    ConnectionString = $"Data Source={sqliteFilePath};Version=3;",
                    Query            = "SELECT name FROM animal"
                }
            };
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10,
                Sources        = sources
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{animal}"
            });

            SetupServiceLocator();

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            var content = new List <string> {
                "Dog", "Cat", "Horse", "Elephant", "Giraffe", "Mouse", "Rabbit"
            };

            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            var expectedList = content.Select(c => c.ToString()).ToList();

            UtilAssert.AssertStringsInList(result.Tables[0], "testColumn", expectedList);
        }
예제 #13
0
        public void IntegerRangeModel_CorrectLimits_Generates()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new IntegerRangeModel {
                Name = "testColumn", Min = 5, Max = 15
            });

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertIntegerInRange(result.Tables[0], "testColumn", 5, 15);
        }
예제 #14
0
        public void DoubleRangeModel_CorrectLimits_Generates()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new DoubleRangeModel {
                Name = "testColumn", Min = 1.0, Max = 99.9
            });

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertDoubleInRange(result.Tables[0], "testColumn", 1.0, 99.9);
        }
예제 #15
0
        public void IntegerRangeModel_InvalidLimits_Throws()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new IntegerRangeModel {
                Name = "testColumn"
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #16
0
        public void RandomCharsModel_Correct_Generates()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new RandomCharsModel
            {
                Name = "testColumn", AllowedChars = "abcde", MinLength = 5, MaxLength = 10
            });

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertChars(result.Tables[0], "testColumn", "abcde", "ABCqwr123");
        }
예제 #17
0
        public void Model_WithoutName_Fails()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new GuidModel {
                Name = null
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #18
0
        public void RandomCharsModel_NoLengths_Throws()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new RandomCharsModel {
                Name = "testColumn", AllowedChars = "abcde"
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #19
0
        public override void Execute(IDictionary <string, object> input)
        {
            var columnList = input["columns"] as List <ColumnModel>;
            var sourceList = input["sources"] as List <ItemSourceModel>;
            var file       = input.Get <string>(FILE);

            var obj = new DataGenerationInfo {
                Columns = columnList, Sources = sourceList, RowsToGenerate = 1000
            };
            var jss = new JsonSerializerSettings
            {
                Formatting       = Formatting.Indented,
                ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                }
            };
            var json = JsonConvert.SerializeObject(obj, jss);

            File.WriteAllText(file, json);
        }
예제 #20
0
        public void TemplateModel_NoInput_Throws()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn"
            });

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }
예제 #21
0
        public void TemplateModel_MultipleDefaultSources_Generates()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new TemplateModel(_defaultSourceProvider)
            {
                Name = "testColumn", Template = "{names-male|names-female} {surnames}"
            });

            SetupServiceLocator();

            // When
            var result = _dataGeneratorDataSet.Generate(info);

            // Then
            Assert.AreEqual(1, result.Tables.Count);
            Assert.AreEqual(10, result.Tables[0].Rows.Count);
            UtilAssert.AssertStringsNotInList(result.Tables[0], "testColumn", new[] { "--ND--" });
        }
예제 #22
0
        public void RandomPatternModel_NoInput_Throws()
        {
            // Given
            var info = new DataGenerationInfo
            {
                RowsToGenerate = 10
            };

            info.Columns.Add(new RandomPatternModel(_customPatternProviderMock.Object)
            {
                Name = "testColumn"
            });
            _customPatternProviderMock.Setup(p => p.GetDefaultPatterns()).Returns(default(IDictionary <string, string>));

            // When
            void whenDelegate()
            {
                _dataGeneratorDataSet.Generate(info);
            }

            // Then
            Assert.ThrowsException <InvalidOperationException>(whenDelegate);
        }