Exemple #1
0
        public void BuildInsert_JsonItemsHasSingleQuote_ReturnCorrectSqlStatementWithDoubleSingleQuotes()
        {
            // Arrange
            var jsonItems           = FakeJson.CreateMultiple(2).AsJsonString().FixSingleQuotes();
            var correctSqlStatement =
                $@"insert into ""{_schema}"".""{_tableName}"" (
    ""{_tableColumns[0].Name}""
    , ""{_tableColumns[1].Name}""
    , ""{_tableColumns[2].Name}""
    , ""{_tableColumns[3].Name}""
)
select
    ""{_tableColumns[0].Name}""
    , ""{_tableColumns[1].Name}""
    , ""{_tableColumns[2].Name}""
    , ""{_tableColumns[3].Name}""
from json_to_recordset('
{jsonItems.Replace("'", "''")}
') as x(
    ""{_tableColumns[0].Name}"" {_tableColumns[0].Type}
    , ""{_tableColumns[1].Name}"" {_tableColumns[1].Type}
    , ""{_tableColumns[2].Name}"" {_tableColumns[2].Type}
    , ""{_tableColumns[3].Name}"" {_tableColumns[3].Type}
);"
                .Replace("\r\n", "\n");
            // Act
            var sqlStatement = _testModule.BuildInsert(jsonItems);

            // Assert
            Assert.Equal(correctSqlStatement, sqlStatement);
        }
Exemple #2
0
        public void BuildInsert_SkipAndLimitIsNotNull_ReturnCorrectCountOfJsonItemsInSqlStatement(int total, int skip,
                                                                                                  int limit)
        {
            // Arrange
            var jsonItemWithNestedObject1 = FakeJson.Create().WithNestedObject();
            var jsonItemWithNestedObject2 = FakeJson.Create().WithNestedObject();
            var jsonItemWithNestedObject3 = FakeJson.Create().WithNestedObject();
            var jsonItems = new List <string>(FakeJson.CreateMultiple(total - 3))
            {
                jsonItemWithNestedObject1, jsonItemWithNestedObject2, jsonItemWithNestedObject3
            };

            var filteredJsonItems = jsonItems.Skip(skip).Take(limit).ToList();

            var stringBuilder = new StringBuilder();

            stringBuilder.Append($@"insert into ""{_schema}"".""{_tableName}"" (
    ""{_tableColumns[0].Name}""
    , ""{_tableColumns[1].Name}""
    , ""{_tableColumns[2].Name}""
    , ""{_tableColumns[3].Name}""
)
select
    ""{_tableColumns[0].Name}""
    , ""{_tableColumns[1].Name}""
    , ""{_tableColumns[2].Name}""
    , ""{_tableColumns[3].Name}""
from json_to_recordset('
[
");
            for (int i = 0; i < filteredJsonItems.Count; i++)
            {
                stringBuilder.Append($"{filteredJsonItems[i].Replace("'", "''")}");
                if (i < filteredJsonItems.Count - 1)
                {
                    stringBuilder.Append(",\n");
                }
            }

            stringBuilder.Append($@"
]
') as x(
    ""{_tableColumns[0].Name}"" {_tableColumns[0].Type}
    , ""{_tableColumns[1].Name}"" {_tableColumns[1].Type}
    , ""{_tableColumns[2].Name}"" {_tableColumns[2].Type}
    , ""{_tableColumns[3].Name}"" {_tableColumns[3].Type}
);");
            var correctSqlStatement = stringBuilder.ToString().Replace("\r\n", "\n");
            var jsonItemsAsString   = jsonItems.AsJsonString();
            // Act
            var sqlStatement = _testModule.BuildInsert(jsonItemsAsString, skip, limit);

            // Assert
            Assert.Equal(correctSqlStatement, sqlStatement);
        }
        ExecuteAsync_SetMaxLinesPer1InsertValuesSqlFile_SqlStatementOfInsertValuesWasCreatedCorrectTimes()
        {
            // Arrange
            var maxLinesPer1InsertValuesSqlFile = 2;
            var jsonItemsCount = 7;
            var jsonContent    = FakeJson.CreateMultiple(jsonItemsCount).AsJsonString();

            _fileReader.ReadAllTextAsync(_transformOptions.SourceJsonFilePath).Returns(jsonContent);

            _transformOptions.MaxLinesPer1InsertValuesSqlFile = maxLinesPer1InsertValuesSqlFile;
            // Act
            await _testModule.ExecuteAsync(_transformOptions);

            // Assert
            _sqlBuilder.Received(1).BuildInsert(jsonContent, skip: 0, limit: maxLinesPer1InsertValuesSqlFile);
            _sqlBuilder.Received(1).BuildInsert(jsonContent, skip: 2, limit: maxLinesPer1InsertValuesSqlFile);
            _sqlBuilder.Received(1).BuildInsert(jsonContent, skip: 4, limit: maxLinesPer1InsertValuesSqlFile);
            _sqlBuilder.Received(1).BuildInsert(jsonContent, skip: 6, limit: maxLinesPer1InsertValuesSqlFile);
        }
        ExecuteAsync_SetMaxLinesPer1InsertValuesSqlFile_FileWithSqlStatementOfInsertValuesWasCreatedCorrectTimes(
            int maxLinesPer1InsertValuesSqlFile, int jsonItemsCount, int correctInsertValuesSqlFilesCount)
        {
            // Arrange
            var jsonContent = FakeJson.CreateMultiple(jsonItemsCount).AsJsonString();

            _fileReader.ReadAllTextAsync(_transformOptions.SourceJsonFilePath).Returns(jsonContent);
            var correctInsertSqlStatement = "some insert values";

            _sqlBuilder.BuildInsert(jsonContent, Arg.Any <int>(), Arg.Any <int>())
            .Returns(correctInsertSqlStatement);

            _transformOptions.MaxLinesPer1InsertValuesSqlFile = maxLinesPer1InsertValuesSqlFile;
            // Act
            await _testModule.ExecuteAsync(_transformOptions);

            // Assert
            await _fileWriter.Received(correctInsertValuesSqlFilesCount)
            .WriteAllTextAsync(Arg.Any <string>(), correctInsertSqlStatement);
        }
        public async Task ExecuteAsync_JsonContentHasItemsWithNestedObjects_SqlStatementOfInsertValuesWasCreatedCorrectTimes()
        {
            // Arrange
            var maxLinesPer1InsertValuesSqlFile = 2;
            var jsonItem1   = FakeJson.Create();
            var jsonItem2   = FakeJson.Create();
            var jsonItem3   = $@"{{
	""firstName"": ""{_faker.Person.FirstName}"",
    ""lastName"": ""{_faker.Person.LastName}"",
    ""isClient"": {_faker.Random.Bool()},
    ""emails"": [{{ ""item"": ""{_faker.Person.Email}"" }},{{ ""item"": ""{_faker.Person.Email}"" }}]
}}";
            var jsonItem4   = $@"{{
	""firstName"": ""{_faker.Person.FirstName}"",
    ""lastName"": ""{_faker.Person.LastName}"",
    ""isClient"": {_faker.Random.Bool()},
    ""emails"": [{{ ""item"": ""{_faker.Person.Email}"" }},{{ ""item"": ""{_faker.Person.Email}"" }}]
}}";
            var jsonItem5   = $@"{{
	""firstName"": ""{_faker.Person.FirstName}"",
    ""lastName"": ""{_faker.Person.LastName}"",
    ""isClient"": {_faker.Random.Bool()},
    ""emails"": [{{ ""item"": ""{_faker.Person.Email}"" }},{{ ""item"": ""{_faker.Person.Email}"" }}]
}}";
            var jsonContent = new List <string>()
            {
                jsonItem1, jsonItem2, jsonItem3, jsonItem4, jsonItem5
            }.AsJsonString();

            _fileReader.ReadAllTextAsync(_transformOptions.SourceJsonFilePath).Returns(jsonContent);

            _transformOptions.MaxLinesPer1InsertValuesSqlFile = maxLinesPer1InsertValuesSqlFile;
            // Act
            await _testModule.ExecuteAsync(_transformOptions);

            // Assert
            _sqlBuilder.Received(3).BuildInsert(jsonContent, skip: Arg.Any <int>(), limit: maxLinesPer1InsertValuesSqlFile);
        }