Skip to content

Commit 102f660

Browse files
committed
Added all unit tests for DataTableCreator.
1 parent 90fafa6 commit 102f660

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Data;
4+
using System.Linq;
5+
using Serilog.Sinks.MSSqlServer.Platform;
6+
using Serilog.Sinks.MSSqlServer.Tests.TestUtils;
7+
using Xunit;
8+
9+
namespace Serilog.Sinks.MSSqlServer.Tests.Sinks.MSSqlServer.Platform
10+
{
11+
[Trait(TestCategory.TraitName, TestCategory.Unit)]
12+
public class DataTableCreatorTests
13+
{
14+
private const string _tableName = "TestTableName";
15+
private readonly Serilog.Sinks.MSSqlServer.ColumnOptions _columnOptions;
16+
private DataTableCreator _sut;
17+
18+
public DataTableCreatorTests()
19+
{
20+
_columnOptions = new Serilog.Sinks.MSSqlServer.ColumnOptions();
21+
}
22+
23+
[Fact]
24+
public void InitializeThrowsIfTableNameIsNull()
25+
{
26+
Assert.Throws<ArgumentNullException>(() => new DataTableCreator(null, _columnOptions));
27+
}
28+
29+
[Fact]
30+
public void InitializeThrowsIfColumnOptionsIsNull()
31+
{
32+
Assert.Throws<ArgumentNullException>(() => new DataTableCreator(_tableName, null));
33+
}
34+
35+
[Fact]
36+
public void CreateDataTableAddsStandardColumns()
37+
{
38+
// Arrange
39+
_columnOptions.Store.Add(StandardColumn.LogEvent);
40+
SetupSut();
41+
42+
// Act
43+
var result = _sut.CreateDataTable();
44+
45+
// Assert
46+
Assert.Equal(_columnOptions.Store.Count, result.Columns.Count);
47+
CompareStandardColumn(result, StandardColumn.Id, nameof(StandardColumn.Id));
48+
CompareStandardColumn(result, StandardColumn.Message, nameof(StandardColumn.Message));
49+
CompareStandardColumn(result, StandardColumn.MessageTemplate, nameof(StandardColumn.MessageTemplate));
50+
CompareStandardColumn(result, StandardColumn.Level, nameof(StandardColumn.Level));
51+
CompareStandardColumn(result, StandardColumn.TimeStamp, nameof(StandardColumn.TimeStamp));
52+
CompareStandardColumn(result, StandardColumn.Exception, nameof(StandardColumn.Exception));
53+
CompareStandardColumn(result, StandardColumn.Properties, nameof(StandardColumn.Properties));
54+
CompareStandardColumn(result, StandardColumn.LogEvent, nameof(StandardColumn.LogEvent));
55+
}
56+
57+
[Fact]
58+
public void CreateDataTableSetsCustomStandardColumnAsPrimaryKey()
59+
{
60+
// Arrange
61+
var messageColumn = _columnOptions.GetStandardColumnOptions(StandardColumn.Message);
62+
_columnOptions.PrimaryKey = messageColumn;
63+
SetupSut();
64+
65+
// Act
66+
var result = _sut.CreateDataTable();
67+
68+
// Assert
69+
messageColumn.AllowNull = false; // If column was made PK, AllowNulls was set to false.
70+
var messageDataColumn = messageColumn.AsDataColumn();
71+
AssertColumnsEqual(messageDataColumn, result.PrimaryKey.Single());
72+
}
73+
74+
[Fact]
75+
public void CreateDataTableAddsAdditionalColumns()
76+
{
77+
// Arrange
78+
_columnOptions.Store.Remove(StandardColumn.Id);
79+
_columnOptions.Store.Remove(StandardColumn.Message);
80+
_columnOptions.Store.Remove(StandardColumn.MessageTemplate);
81+
_columnOptions.Store.Remove(StandardColumn.Level);
82+
_columnOptions.Store.Remove(StandardColumn.TimeStamp);
83+
_columnOptions.Store.Remove(StandardColumn.Exception);
84+
_columnOptions.Store.Remove(StandardColumn.Properties);
85+
var additionalColumn1 = new SqlColumn { ColumnName = "AdditionalColumn1", AllowNull = false, DataType = SqlDbType.BigInt };
86+
var additionalColumn2 = new SqlColumn { ColumnName = "AdditionalColumn2", AllowNull = true, DataType = SqlDbType.NVarChar, DataLength = 10 };
87+
_columnOptions.AdditionalColumns = new List<SqlColumn> { additionalColumn1, additionalColumn2 };
88+
SetupSut();
89+
90+
// Act
91+
var result = _sut.CreateDataTable();
92+
93+
// Assert
94+
Assert.Equal(2, result.Columns.Count);
95+
AssertColumnsEqual(additionalColumn1.AsDataColumn(), result.Columns["AdditionalColumn1"]);
96+
AssertColumnsEqual(additionalColumn2.AsDataColumn(), result.Columns["AdditionalColumn2"]);
97+
}
98+
99+
[Fact]
100+
public void CreateDataTableSetsCustomAdditionalColumnAsPrimaryKey()
101+
{
102+
// Arrange
103+
_columnOptions.Store.Remove(StandardColumn.Id);
104+
_columnOptions.Store.Remove(StandardColumn.Message);
105+
_columnOptions.Store.Remove(StandardColumn.MessageTemplate);
106+
_columnOptions.Store.Remove(StandardColumn.Level);
107+
_columnOptions.Store.Remove(StandardColumn.TimeStamp);
108+
_columnOptions.Store.Remove(StandardColumn.Exception);
109+
_columnOptions.Store.Remove(StandardColumn.Properties);
110+
var additionalColumn1 = new SqlColumn { ColumnName = "AdditionalColumn1", AllowNull = false, DataType = SqlDbType.BigInt };
111+
var additionalColumn2 = new SqlColumn { ColumnName = "AdditionalColumn2", AllowNull = true, DataType = SqlDbType.NVarChar, DataLength = 10 };
112+
_columnOptions.AdditionalColumns = new List<SqlColumn> { additionalColumn1, additionalColumn2 };
113+
_columnOptions.PrimaryKey = additionalColumn1;
114+
SetupSut();
115+
116+
// Act
117+
var result = _sut.CreateDataTable();
118+
119+
// Assert
120+
var additionalColumn1DataColumn = additionalColumn1.AsDataColumn();
121+
AssertColumnsEqual(additionalColumn1DataColumn, result.PrimaryKey.Single());
122+
}
123+
124+
private void SetupSut()
125+
{
126+
_sut = new DataTableCreator(_tableName, _columnOptions);
127+
}
128+
129+
private static void AssertColumnsEqual(DataColumn column, DataColumn dataColumn)
130+
{
131+
Assert.Equal(column.ColumnName, dataColumn.ColumnName);
132+
Assert.Equal(column.DataType, dataColumn.DataType);
133+
Assert.Equal(column.MaxLength, dataColumn.MaxLength);
134+
Assert.Equal(column.AllowDBNull, dataColumn.AllowDBNull);
135+
}
136+
137+
private void CompareStandardColumn(DataTable result, StandardColumn standardColumn, string standardColumnName)
138+
{
139+
var column = _columnOptions.GetStandardColumnOptions(standardColumn).AsDataColumn();
140+
var dataColumn = result.Columns[standardColumnName];
141+
AssertColumnsEqual(column, dataColumn);
142+
}
143+
}
144+
}

0 commit comments

Comments
 (0)