using NewLife.Studio.Core.DTOs;
using Xunit;
namespace NewLife.Studio.Core.Tests.DTOs;
public class QueryResultTests
{
[Fact]
public void Default_Values_Are_Set_Correctly()
{
var result = new QueryResult();
Assert.NotNull(result.Columns);
Assert.Empty(result.Columns);
Assert.NotNull(result.Rows);
Assert.Empty(result.Rows);
Assert.Equal(0, result.RowCount);
Assert.Equal(0L, result.ElapsedMs);
Assert.False(result.Truncated);
Assert.Null(result.Error);
}
[Fact]
public void Properties_Set_And_Get_Correctly()
{
var columns = new[]
{
new ColumnInfo { Name = "Id", DataType = "int" },
new ColumnInfo { Name = "Name", DataType = "varchar" }
};
var rows = new List<object?[]>
{
new object?[] { 1, "Alice" },
new object?[] { 2, "Bob" }
};
var result = new QueryResult
{
Columns = columns,
Rows = rows,
RowCount = 2,
ElapsedMs = 150,
Truncated = true,
Error = "Query timeout"
};
Assert.Equal(columns, result.Columns);
Assert.Equal(rows, result.Rows);
Assert.Equal(2, result.RowCount);
Assert.Equal(150L, result.ElapsedMs);
Assert.True(result.Truncated);
Assert.Equal("Query timeout", result.Error);
}
[Fact]
public void Error_Can_Be_Null()
{
var result = new QueryResult { Error = null };
Assert.Null(result.Error);
}
[Fact]
public void Empty_Columns_And_Rows_Are_Allowed()
{
var result = new QueryResult
{
Columns = [],
Rows = []
};
Assert.NotNull(result.Columns);
Assert.Empty(result.Columns);
Assert.NotNull(result.Rows);
Assert.Empty(result.Rows);
}
[Fact]
public void RowCount_Can_Differ_From_Rows_Count()
{
var result = new QueryResult
{
Rows = new List<object?[]> { new object?[] { 1 } },
RowCount = 1000 // truncated result
};
Assert.Single(result.Rows);
Assert.Equal(1000, result.RowCount);
}
[Fact]
public void ElapsedMs_Boundary_Values()
{
var result = new QueryResult();
result.ElapsedMs = 0;
Assert.Equal(0L, result.ElapsedMs);
result.ElapsedMs = long.MaxValue;
Assert.Equal(long.MaxValue, result.ElapsedMs);
result.ElapsedMs = -1;
Assert.Equal(-1L, result.ElapsedMs);
}
[Fact]
public void Truncated_Can_Be_Toggled()
{
var result = new QueryResult();
Assert.False(result.Truncated);
result.Truncated = true;
Assert.True(result.Truncated);
result.Truncated = false;
Assert.False(result.Truncated);
}
}
|