Beispiel #1
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);
        }
        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);
        }