using NewLife.Studio.Core.DTOs;
using NewLife.Studio.Modules.DataStudio.ViewModels;
using Xunit;
namespace NewLife.Studio.Modules.DataStudio.Tests;
public class QueryTabTests
{
[Fact]
public void Default_Sql_IsSelectStarFrom()
{
var tab = new QueryTab();
Assert.Equal("SELECT * FROM ", tab.Sql);
}
[Fact]
public void Default_Title_IsQuery1()
{
var tab = new QueryTab();
Assert.Equal("查询 1", tab.Title);
}
[Fact]
public void Default_Result_IsNull()
{
var tab = new QueryTab();
Assert.Null(tab.Result);
}
[Fact]
public void ResultGrid_IsNotNull()
{
var tab = new QueryTab();
Assert.NotNull(tab.ResultGrid);
}
[Fact]
public void Sql_CanBeSet()
{
var tab = new QueryTab();
tab.Sql = "SELECT * FROM users WHERE id = 1";
Assert.Equal("SELECT * FROM users WHERE id = 1", tab.Sql);
}
[Fact]
public void Title_CanBeSet()
{
var tab = new QueryTab();
tab.Title = "自定义查询";
Assert.Equal("自定义查询", tab.Title);
}
[Fact]
public void Setting_Result_UpdatesResultGrid()
{
var tab = new QueryTab();
var result = new QueryResult
{
Columns = new[]
{
new ColumnInfo { Name = "Id", DataType = "INTEGER" },
new ColumnInfo { Name = "Name", DataType = "TEXT" }
},
Rows = new List<object?[]>
{
new object?[] { 1, "Test" }
},
RowCount = 1,
ElapsedMs = 42
};
tab.Result = result;
Assert.Same(result, tab.Result);
Assert.Equal(1, tab.ResultGrid.RowCount);
Assert.Equal(42, tab.ResultGrid.ElapsedMs);
Assert.Equal(2, tab.ResultGrid.Columns.Count);
Assert.Equal("Id", tab.ResultGrid.Columns[0].Name);
}
[Fact]
public void Setting_Result_ToNull_ClearsNothing()
{
var tab = new QueryTab();
// First set a result
tab.Result = new QueryResult
{
Columns = new[] { new ColumnInfo { Name = "X" } },
Rows = new List<object?[]> { new object?[] { 1 } },
RowCount = 1
};
// Then set to null - OnResultChanged won't call SetResult for null values
tab.Result = null;
// ResultGrid still holds previous data (since OnResultChanged only acts when value != null)
Assert.Equal(1, tab.ResultGrid.RowCount);
}
[Fact]
public void Setting_Result_WithError_PropagatesError()
{
var tab = new QueryTab();
tab.Result = new QueryResult
{
Columns = [],
Rows = [],
Error = "Syntax error near 'INNER'"
};
Assert.Equal("Syntax error near 'INNER'", tab.ResultGrid.Error);
Assert.True(tab.ResultGrid.HasError);
}
[Fact]
public void Setting_Result_WithTruncated_PropagatesWarning()
{
var tab = new QueryTab();
tab.Result = new QueryResult
{
Columns = [],
Rows = [],
Truncated = true,
RowCount = 1000
};
Assert.True(tab.ResultGrid.IsTruncated);
Assert.Equal("(结果已裁剪)", tab.ResultGrid.TruncatedWarning);
Assert.Equal(1000, tab.ResultGrid.RowCount);
}
[Fact]
public void EachQueryTab_HasIndependentResultGrid()
{
var tab1 = new QueryTab();
var tab2 = new QueryTab();
Assert.NotSame(tab1.ResultGrid, tab2.ResultGrid);
tab1.Result = new QueryResult
{
Columns = new[] { new ColumnInfo { Name = "A" } },
Rows = new List<object?[]> { new object?[] { 1 } },
RowCount = 1
};
Assert.Equal(1, tab1.ResultGrid.RowCount);
Assert.Equal(0, tab2.ResultGrid.RowCount);
}
}
|