feat: 初始化NewLife Studio项目,完成基础框架与数据管理模块
何炳宏 authored at 2026-05-26 12:09:09
3.19 KiB
NewLife.Studio
using NewLife.Studio.Core.DTOs;
using Xunit;

namespace NewLife.Studio.Core.Tests.DTOs;

public class QueryHistoryEntryTests
{
    [Fact]
    public void Default_Values_Are_Set_Correctly()
    {
        var entry = new QueryHistoryEntry();

        Assert.NotEmpty(entry.Id);
        Assert.True(Guid.TryParse(entry.Id, out _));
        Assert.Equal("", entry.Sql);
        Assert.Equal("", entry.ConnectionName);
        Assert.True(entry.ExecutedAt <= DateTime.Now);
        Assert.True(entry.ExecutedAt > DateTime.Now.AddSeconds(-5));
        Assert.Equal(0L, entry.ElapsedMs);
        Assert.Equal(0, entry.RowCount);
    }

    [Fact]
    public void Id_Default_Generates_Unique_Guid_Each_Time()
    {
        var entry1 = new QueryHistoryEntry();
        var entry2 = new QueryHistoryEntry();

        Assert.NotEqual(entry1.Id, entry2.Id);
        Assert.True(Guid.TryParse(entry1.Id, out _));
        Assert.True(Guid.TryParse(entry2.Id, out _));
    }

    [Fact]
    public void Properties_Set_And_Get_Correctly()
    {
        var executedAt = new DateTime(2025, 5, 25, 10, 30, 0, DateTimeKind.Utc);
        var entry = new QueryHistoryEntry
        {
            Id = "hist-001",
            Sql = "SELECT * FROM Users",
            ConnectionName = "Production DB",
            ExecutedAt = executedAt,
            ElapsedMs = 250,
            RowCount = 1500
        };

        Assert.Equal("hist-001", entry.Id);
        Assert.Equal("SELECT * FROM Users", entry.Sql);
        Assert.Equal("Production DB", entry.ConnectionName);
        Assert.Equal(executedAt, entry.ExecutedAt);
        Assert.Equal(250L, entry.ElapsedMs);
        Assert.Equal(1500, entry.RowCount);
    }

    [Fact]
    public void Null_Values_Can_Be_Assigned()
    {
        var entry = new QueryHistoryEntry
        {
            Sql = null!,
            ConnectionName = null!
        };

        Assert.Null(entry.Sql);
        Assert.Null(entry.ConnectionName);
    }

    [Fact]
    public void Empty_String_Values_Are_Allowed()
    {
        var entry = new QueryHistoryEntry
        {
            Sql = "",
            ConnectionName = ""
        };

        Assert.Equal("", entry.Sql);
        Assert.Equal("", entry.ConnectionName);
    }

    [Fact]
    public void ElapsedMs_Boundary_Values()
    {
        var entry = new QueryHistoryEntry();

        entry.ElapsedMs = 0;
        Assert.Equal(0L, entry.ElapsedMs);

        entry.ElapsedMs = long.MaxValue;
        Assert.Equal(long.MaxValue, entry.ElapsedMs);

        entry.ElapsedMs = -1;
        Assert.Equal(-1L, entry.ElapsedMs);
    }

    [Fact]
    public void RowCount_Boundary_Values()
    {
        var entry = new QueryHistoryEntry();

        entry.RowCount = 0;
        Assert.Equal(0, entry.RowCount);

        entry.RowCount = int.MaxValue;
        Assert.Equal(int.MaxValue, entry.RowCount);

        entry.RowCount = -1;
        Assert.Equal(-1, entry.RowCount);
    }

    [Fact]
    public void ExecutedAt_Boundary_Values()
    {
        var entry = new QueryHistoryEntry();

        entry.ExecutedAt = DateTime.MinValue;
        Assert.Equal(DateTime.MinValue, entry.ExecutedAt);

        entry.ExecutedAt = DateTime.MaxValue;
        Assert.Equal(DateTime.MaxValue, entry.ExecutedAt);
    }
}