Skip to content

Commit 2d037df

Browse files
committed
Force nonhierachical property: tests
Added unit and integration tests for new functionality. Issue #542
1 parent 8a32830 commit 2d037df

File tree

3 files changed

+152
-4
lines changed

3 files changed

+152
-4
lines changed

test/Serilog.Sinks.MSSqlServer.Tests/Configuration/Implementations/System.Configuration/SystemConfigurationColumnOptionsProviderTests.cs

+46-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Data;
2-
using Moq;
2+
using System.Linq;
3+
using FluentAssertions;
34
using Serilog.Configuration;
45
using Serilog.Sinks.MSSqlServer.Configuration;
56
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
@@ -28,7 +29,7 @@ public void ConfigureColumnOptionsReadsTraceIdColumnOptions()
2829
_configurationSection.TraceId.AllowNull = "false";
2930
_configurationSection.TraceId.DataType = "22"; // VarChar
3031
var columnOptions = new MSSqlServer.ColumnOptions();
31-
32+
3233
// Act
3334
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);
3435

@@ -56,5 +57,48 @@ public void ConfigureColumnOptionsReadsSpanIdColumnOptions()
5657
Assert.False(columnOptions.SpanId.AllowNull);
5758
Assert.Equal(SqlDbType.VarChar, columnOptions.SpanId.DataType);
5859
}
60+
61+
[Fact]
62+
public void ConfigureColumnOptionsReadsAdditionalColumnsResolveHierarchicalPropertyName()
63+
{
64+
// Arrange
65+
const string columnName = "AdditionalColumn1";
66+
var columnConfig = new ColumnConfig
67+
{
68+
ColumnName = columnName,
69+
ResolveHierarchicalPropertyName = "false"
70+
};
71+
_configurationSection.Columns.Add(columnConfig);
72+
var columnOptions = new MSSqlServer.ColumnOptions();
73+
74+
// Act
75+
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);
76+
77+
// Assert
78+
var additionalColumn1 = columnOptions.AdditionalColumns.SingleOrDefault(c => c.ColumnName == columnName);
79+
additionalColumn1.Should().NotBeNull();
80+
additionalColumn1.ResolveHierarchicalPropertyName.Should().Be(false);
81+
}
82+
83+
[Fact]
84+
public void ConfigureColumnOptionsDefaultsAdditionalColumnsResolveHierarchicalPropertyName()
85+
{
86+
// Arrange
87+
const string columnName = "AdditionalColumn1";
88+
var columnConfig = new ColumnConfig
89+
{
90+
ColumnName = columnName
91+
};
92+
_configurationSection.Columns.Add(columnConfig);
93+
var columnOptions = new MSSqlServer.ColumnOptions();
94+
95+
// Act
96+
_sut.ConfigureColumnOptions(_configurationSection, columnOptions);
97+
98+
// Assert
99+
var additionalColumn1 = columnOptions.AdditionalColumns.SingleOrDefault(c => c.ColumnName == columnName);
100+
additionalColumn1.Should().NotBeNull();
101+
additionalColumn1.ResolveHierarchicalPropertyName.Should().Be(true);
102+
}
59103
}
60104
}

test/Serilog.Sinks.MSSqlServer.Tests/Misc/AdditionalPropertiesTests.cs

+58
Original file line numberDiff line numberDiff line change
@@ -239,5 +239,63 @@ public void WritesLogEventWithColumnsFromHierarchicalNamedProperties()
239239
VerifyStringColumnWritten(additionalColumn1Name, property1Value);
240240
VerifyIntegerColumnWritten(additionalColumn2Name, property2Value);
241241
}
242+
243+
[Fact]
244+
public void WritesLogEventIgnoringHierarchicalNamedPropertiesWhenResolveHierarchicalPropertyNameIsFalse()
245+
{
246+
// Arrange
247+
const string additionalColumn1Name = "AdditionalColumn1";
248+
const string additionalProperty1Name = "AdditionalProperty1.SubProperty1";
249+
const string additionalColumn2Name = "AdditionalColumn2";
250+
const string additionalProperty2Name = "AdditionalProperty2.SubProperty2.SubSubProperty1";
251+
var columnOptions = new MSSqlServer.ColumnOptions
252+
{
253+
AdditionalColumns = new List<SqlColumn>
254+
{
255+
new SqlColumn
256+
{
257+
ColumnName = additionalColumn1Name,
258+
PropertyName = additionalProperty1Name,
259+
ResolveHierarchicalPropertyName = false,
260+
DataType = SqlDbType.NVarChar,
261+
AllowNull = true,
262+
DataLength = 100
263+
},
264+
new SqlColumn
265+
{
266+
ColumnName = additionalColumn2Name,
267+
PropertyName = additionalProperty2Name,
268+
ResolveHierarchicalPropertyName = false,
269+
DataType = SqlDbType.Int,
270+
AllowNull = true
271+
}
272+
}
273+
};
274+
var property1Value = "PropertyValue1";
275+
var property2Value = 2;
276+
277+
// Act
278+
Log.Logger = new LoggerConfiguration()
279+
.WriteTo.MSSqlServer(
280+
DatabaseFixture.LogEventsConnectionString,
281+
sinkOptions: new MSSqlServerSinkOptions
282+
{
283+
TableName = DatabaseFixture.LogTableName,
284+
AutoCreateSqlTable = true
285+
},
286+
columnOptions: columnOptions,
287+
formatProvider: CultureInfo.InvariantCulture)
288+
.CreateLogger();
289+
// Log event properties with names containing dots can be created using ForContext()
290+
Log.ForContext(additionalProperty1Name, property1Value)
291+
.ForContext(additionalProperty2Name, property2Value)
292+
.Information("Hello {@AdditionalProperty1.SubProperty1} from thread {@AdditionalProperty2.SubProperty2.SubSubProperty1}");
293+
Log.CloseAndFlush();
294+
295+
// Assert
296+
VerifyDatabaseColumnsWereCreated(columnOptions.AdditionalColumns);
297+
VerifyStringColumnWritten(additionalColumn1Name, property1Value);
298+
VerifyIntegerColumnWritten(additionalColumn2Name, property2Value);
299+
}
242300
}
243301
}

test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/SqlServerColumnTests.cs renamed to test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/SqlColumnTests.cs

+48-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Serilog.Sinks.MSSqlServer.Tests
77
{
88
[Trait(TestCategory.TraitName, TestCategory.Unit)]
9-
public class SqlServerColumnTests
9+
public class SqlColumnTests
1010
{
1111
[Fact]
1212
public void DefaultsPropertyNameToColumnName()
@@ -39,7 +39,7 @@ public void StoresPropertyName()
3939
}
4040

4141
[Fact]
42-
public void StoresHierachicalPropertyName()
42+
public void StoresHierarchicalPropertyName()
4343
{
4444
// Arrange
4545
const string propertyName1 = "TestPropertyName";
@@ -61,5 +61,51 @@ public void StoresHierachicalPropertyName()
6161
Assert.Equal(propertyName3, sut.PropertyNameHierarchy[2]);
6262
Assert.True(sut.HasHierarchicalPropertyName);
6363
}
64+
65+
[Fact]
66+
public void WhenResolveHierarchicalPropertyNameSetFalseDoesNotStoreHierarchicalPropertyName()
67+
{
68+
// Arrange
69+
const string propertyName1 = "TestPropertyName";
70+
const string propertyName2 = "SubPropertyName";
71+
const string propertyName3 = "SubSubPropertyName";
72+
var propertyName = Invariant($"{propertyName1}.{propertyName2}.{propertyName3}");
73+
74+
// Act
75+
var sut = new SqlColumn("TestColumnName", SqlDbType.Int)
76+
{
77+
PropertyName = propertyName,
78+
ResolveHierarchicalPropertyName = false
79+
};
80+
81+
// Assert
82+
Assert.Equal(propertyName, sut.PropertyName);
83+
Assert.Single(sut.PropertyNameHierarchy);
84+
Assert.Equal(propertyName, sut.PropertyNameHierarchy[0]);
85+
Assert.False(sut.HasHierarchicalPropertyName);
86+
}
87+
88+
[Fact]
89+
public void WhenResolveHierarchicalPropertyNameSetFalseAfterPropertyNameDoesNotStoreHierarchicalPropertyName()
90+
{
91+
// Arrange
92+
const string propertyName1 = "TestPropertyName";
93+
const string propertyName2 = "SubPropertyName";
94+
const string propertyName3 = "SubSubPropertyName";
95+
var propertyName = Invariant($"{propertyName1}.{propertyName2}.{propertyName3}");
96+
97+
// Act
98+
var sut = new SqlColumn("TestColumnName", SqlDbType.Int)
99+
{
100+
PropertyName = propertyName,
101+
};
102+
sut.ResolveHierarchicalPropertyName = false;
103+
104+
// Assert
105+
Assert.Equal(propertyName, sut.PropertyName);
106+
Assert.Single(sut.PropertyNameHierarchy);
107+
Assert.Equal(propertyName, sut.PropertyNameHierarchy[0]);
108+
Assert.False(sut.HasHierarchicalPropertyName);
109+
}
64110
}
65111
}

0 commit comments

Comments
 (0)