feat: 初始化NewLife Studio项目,完成基础框架与数据管理模块
何炳宏 authored at 2026-05-26 12:09:09
2.85 KiB
NewLife.Studio
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);
    }
}