Skip to content

Commit 2af27b1

Browse files
committed
tests: sqlite query builder
1 parent 2da68e2 commit 2af27b1

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using FluentAssertions;
5+
using Microsoft.Extensions.Primitives;
6+
using Serilog.Ui.Core.Models;
7+
using Serilog.Ui.SqliteDataProvider;
8+
using Serilog.Ui.SqliteDataProvider.Models;
9+
using Xunit;
10+
11+
namespace Sqlite.Tests.DataProvider;
12+
13+
[Trait("Unit-QueryBuilder", "Sqlite")]
14+
public class QueryBuilderTests
15+
{
16+
[Theory]
17+
[ClassData(typeof(QueryBuilderTestData))]
18+
public void BuildFetchLogsQuery_ForSink_ReturnsCorrectQuery(
19+
string schema,
20+
string tableName,
21+
string level,
22+
string searchCriteria,
23+
DateTime? startDate,
24+
DateTime? endDate,
25+
string expectedQuery)
26+
{
27+
// Arrange
28+
Dictionary<string, StringValues> queryLogs = new()
29+
{
30+
["level"] = level,
31+
["search"] = searchCriteria,
32+
["startDate"] = startDate?.ToString("O"),
33+
["endDate"] = endDate?.ToString("O")
34+
};
35+
36+
SqliteSinkColumnNames sinkColumns = new();
37+
SqliteQueryBuilder sut = new();
38+
39+
// Act
40+
string query = sut.BuildFetchLogsQuery(sinkColumns, schema, tableName, FetchLogsQuery.ParseQuery(queryLogs));
41+
42+
// Assert
43+
query.Should().Be(expectedQuery);
44+
}
45+
46+
public class QueryBuilderTestData : IEnumerable<object[]>
47+
{
48+
private readonly List<object?[]> _data =
49+
[
50+
[
51+
string.Empty, "Logs", null!, null!, null!, null!,
52+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs ORDER BY Timestamp DESC LIMIT @Offset, @Count"
53+
],
54+
[
55+
string.Empty, "Logs", null!, null!, null!, DateTime.Now,
56+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs WHERE Timestamp <= @EndDate ORDER BY Timestamp DESC LIMIT @Offset, @Count"
57+
],
58+
[
59+
string.Empty, "Logs", null!, null!, DateTime.Now, DateTime.Now,
60+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs WHERE Timestamp >= @StartDate AND Timestamp <= @EndDate ORDER BY Timestamp DESC LIMIT @Offset, @Count"
61+
],
62+
[
63+
string.Empty, "Logs", "Information", null!, null!, null!,
64+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs WHERE Level = @Level ORDER BY Timestamp DESC LIMIT @Offset, @Count"
65+
],
66+
[
67+
string.Empty, "Logs", null!, "Test", null!, null!,
68+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs WHERE (RenderedMessage LIKE @Search OR Exception LIKE @Search) ORDER BY Timestamp DESC LIMIT @Offset, @Count"
69+
],
70+
[
71+
string.Empty, "Logs", "Information", "Test", null!, null!,
72+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs WHERE Level = @Level AND (RenderedMessage LIKE @Search OR Exception LIKE @Search) ORDER BY Timestamp DESC LIMIT @Offset, @Count"
73+
],
74+
[
75+
string.Empty, "Logs", "Information", "Test", DateTime.UtcNow, DateTime.UtcNow,
76+
"SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM Logs WHERE Level = @Level AND (RenderedMessage LIKE @Search OR Exception LIKE @Search) AND Timestamp >= @StartDate AND Timestamp <= @EndDate ORDER BY Timestamp DESC LIMIT @Offset, @Count"
77+
]
78+
];
79+
80+
public IEnumerator<object[]> GetEnumerator() => _data.GetEnumerator();
81+
82+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
83+
}
84+
}

0 commit comments

Comments
 (0)